Легенда с ggplot2 с опцией geom="path" и альфа

Я - пользователь R с давних времен, но изо всех сил пытаюсь разобраться с ggplot2. В этом примере я не могу получить легенду, когда использую опцию geom="path" также с настройкой альфа. Если я установлю geom="point", то все будет в порядке.

tmp <- data.frame(cx=rnorm(21),cy=rnorm(21),labels=c(rep("a",7),rep("b",7),rep("c",7)))

p1 <- qplot(data=tmp,cx,cy,geom="point",colour = labels, size=I(5), alpha=I(0.5))

Тогда график точек выглядит хорошо, включая легенду с правильной настройкой альфа-канала, показывающей точки. Добавление в geom = "путь"

p2 <- qplot(data=tmp,cx,cy,geom="path",colour = labels, size=I(5), alpha=I(0.5))

Получает график с соединенными и правильно построенными линиями с настройкой альфа, и легенда также появляется, но пуста - например. нет альфа-цвета.

Возможно ли это сделать?

Все работает нормально, если пропустить параметр альфа, и я получу сплошные цвета на графике, а также легенду.

Обновление: Спасибо за ваши комментарии, но я думаю, что это только я или мои настройки, так как у меня все еще есть эта проблема. Пример того, что я получаю по ссылке...

пример

И для полноты...

> sessionInfo()
R version 2.15.0 (2012-03-30)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United Kingdom.1252  LC_CTYPE=English_United Kingdom.1252       LC_MONETARY=English_United Kingdom.1252
[4] LC_NUMERIC=C                            LC_TIME=English_United Kingdom.1252    
attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets  methods   base     
other attached packages:
[1] scales_0.2.1  ggplot2_0.9.1
loaded via a namespace (and not attached):
[1] colorspace_1.1-1   dichromat_1.2-4    digest_0.5.2       labeling_0.1       MASS_7.3-17        memoise_0.1       
[7] munsell_0.3        plyr_1.7.1         proto_0.3-9.2      RColorBrewer_1.0-5 reshape2_1.2.1     stringr_0.6       
[13] tools_2.15.0  

1 ответ

Решение

Я наконец смог воспроизвести то, что вы видите, но только при очень определенных обстоятельствах (и совершенно случайно, что я случайно наткнулся на это). Учитывая обстоятельства, я почти уверен, что использование Windows (точнее, использование драйвера устройства Windows) необходимо.

С помощью tmp, p1, p2 из вопроса:

dev.new()
p1
p2

dev.new() важно, чтобы вы начали со свежего окна (потому что что-то позже будет повреждено). Эти команды дают соответствующие графики (ничего не делайте с окном печати). Теперь, если вы "прокручиваете" ("История" -> "Предыдущая" или "Следующая") или изменяете размер окна в этой точке, в полях легенды ничего не рисуется. Прежде чем сделать это, можете сохранить и получить правильную легенду. После этого, сохраняя (Файл -> Сохранить как...), поля легенды останутся пустыми. Если вы используете опцию "прокрутка" (я получил ее с помощью колесика мыши, несколько раз прокручивая вниз, поскольку запись по умолчанию не включена, и поэтому параметры "Предыдущая" и "Следующая" недоступны), я (в конце концов) получаю следующее на консоли:

Error: VECTOR_ELT() can only be applied to a 'list', not a 'character'

который можно повторить несколько раз, прежде чем я в конечном итоге получу:

Error: REAL() can only be applied to a 'numeric', not a 'character'

Обходной путь должен использовать ggsave, Так как это создает новое устройство, вам не нужно беспокоиться о том, что устройство Windows попадет в неработоспособное состояние.

ggsave("tmp.jpg", p2)

Я думаю, что поведение, которое я вижу, является ошибкой в ​​графическом устройстве Windows.

Другие вопросы по тегам