使用ggplot2绘制带有“path”和alpha选项的图例

3

我是一名老牌的R用户,但是在理解ggplot2方面有些困难。在这个例子中,当我使用geom="path"选项并设置alpha时,无法得到图例。如果我将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))

然后点的图形看起来很好,包括一个带有正确alpha设置的图例显示点。添加geom="path"。

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

获取一个将线条连接并正确绘制alpha设置的情节,并且图例也出现但是为空 - 例如,没有alpha颜色。这个可能做得到吗?
如果删除alpha参数,则所有内容都正常工作,我可以在情节和图例中获得实心颜色。
更新:感谢您迄今为止的评论,但我想这只是我或我的设置,因为我仍然有这个问题。在链接中我所获得的一个示例...

Example

http://i.stack.imgur.com/LiEwD.jpg

为了完整性...

> 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  

4
你能说一下你正在使用的R和ggplot2版本吗?对我来说,第二张图表在0.9.1版本中生成了一个图例。 - joran
谢谢回复。我使用的是R版本2.15.0(2012-03-30)和ggplot2_0.9.1。当我在第二个图中(p2)设置alpha = I(1.0)时,会出现带有颜色的图例。要生成图形,我只需键入p2或使用print(p2)。 - chm
哦,很抱歉,但我完全无法重现这个问题。对我来说一切似乎都正常工作。 - joran
我也尝试过,并且它按预期工作(R 2.15.0 patched 和 ggplot2 0.9.1)。你是否在新的 R 会话中尝试过?sessionInfo() 的输出是什么? - Thierry
当我尝试时,即使尽可能与您的设置匹配,我也会得到一个带有适当alpha的图例。 - Brian Diggs
1个回答

1
我终于成功重现了你所看到的问题,但只在非常特定的情况下(而且是偶然发现的)。考虑到这些情况,我相信必须在Windows上(或者说使用Windows设备驱动程序)才能出现这个问题。
使用问题中提到的tmpp1p2
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图形设备中的一个错误。


感谢Brian的大力挖掘。我以为我要迷失方向了(无意冒犯!)。 - chm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接