【发布时间】:2012-12-09 05:35:55
【问题描述】:
我正在尝试绘制一个大多数数据点正常绘制的图,但一组数据点具有不同大小的符号。我希望图例显示相同:大多数点正常显示,但用不同大小的符号绘制的例外。下面是一小段代码:
library(ggplot2)
x = c(1,2,1,2,3)
y = c(1,2,3,4,3)
vendor = c("x", "x", "y", "y", "z")
df = data.frame(x,y,vendor)
p <- ggplot(df) +
aes_string(x="x", y="y", color="vendor") +
geom_point(size=3, data=subset(df, vendor!="z")) +
geom_point(size=5, data=subset(df, vendor=="z"))
ggsave("foo.pdf")
问题在于,在生成的图例中,所有 点都是用较大的 (size=5) 符号绘制的,而不仅仅是带有供应商 z 的那些。我希望供应商 z 用图例中较大的点绘制,而其他供应商用 size=3 绘制。
(奖励问题:我真正想要的是一个更大的粗轮廓符号:我想要一个甜甜圈而不是圆圈。我意识到shape=2 会画一个轮廓圆圈,但它很薄。我宁愿有一个更粗的轮廓圆圈。我想对三角形做同样的事情。有什么简单的方法吗?)
也许我应用错了,但遵循以下建议:
ggplot2: Making changes to symbols in the legend
添加“指南”行没有帮助:
guides(size = guide_legend(override.aes = list(shape = 1)))
即相同的输出,图例中的所有三个供应商都有size=5 符号。
已编辑:很棒的答案,我很快就实现了。现在我添加了几行:
library(ggplot2)
x = c(1,2,1,2,3)
y = c(1,2,3,4,3)
vendor = c("x", "x", "y", "y", "z")
df = data.frame(x,y,vendor)
df$vendor_z <- df$vendor=="z" # create a new column
ggplot(df) +
aes_string(x = "x", y = "y", color = "vendor", size = "vendor_z") +
geom_point() +
geom_line(size=1.5) + # this is the only difference
scale_size_manual(values = c(3, 5), guide = FALSE)
guides(colour = guide_legend(override.aes = list(size = c(3, 3, 5))))
ggsave("foo.pdf")
现在所有点的图例大小又回到了 3,包括供应商 z 的点。有关如何解决此问题的任何想法?
【问题讨论】:
-
顺便说一句,我是一个完全的 R n00b,所以请随时批评我的代码并帮助我改进它!