我正在尝试绘制一个大多数数据点正常绘制的图,但一组数据点的符号大小不同。我希望图例显示相同:大多数点正常显示,但用不同大小的符号绘制的例外。这是一小段代码:
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
会画一个有轮廓的圆圈,但它很薄。我宁愿有一个更厚的轮廓圆圈。我想对三角形做同样的事情。有什么简单的方法吗?)
也许我应用错了,但遵循以下建议:
添加“指南”行没有帮助:
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 的点。有想法该怎么解决这个吗?