Легенда с 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.