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 参数,这一切都很好,我在情节和图例中都得到了纯色。

更新:到目前为止,感谢您的评论,但我想这只是我或我的设置,因为我仍然有这个问题。我在链接中得到的一个例子......

例子

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

1 回答 1

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 图形设备中的错误。

于 2012-06-28T18:22:05.150 回答