ggplot2颜色和填充映射图例

4

我有一个包含四个变量的样本数据框,我正在尝试将h变量映射到fill,将s变量映射到shape。由于我的s变量只能取两个值('f'或'u'),因此我想使用geom_point 24和21,这可以使用fillcolor参数。

library(ggplot2)
h <- c(1,2,3,4,5)
x <- seq(1:5)
y <- c(1,3,3,5,5)
s <- c(rep('f',3),rep('u',2))
dt <- data.frame(h,x,y,s)

理想情况下,我的geom_point应该有黑色轮廓和彩色fill。我可以使用以下代码绘制此图,并生成此图:
ggplot(dt, aes(x=y, y=x)) +  
    geom_point(mapping = aes(fill = factor(h), shape = s), size = 5) +
    scale_shape_manual(values = c(24, 21))

填充控制的颜色

由于图例键的颜色映射到 colour 而不是 fill,因此我无法显示彩色键。

如果我将我的 geom_point 更改为 19 和 17,并将我的 h 变量映射为 colour,则可以获得带有颜色的图例键:

ggplot(dt, aes(x=y, y=x)) +  
    geom_point(mapping = aes(colour = factor(h), shape = s), size = 5) +
    scale_shape_manual(values = c(19, 17))

颜色受颜色控制

图例显示为彩色键,但是绘图中我的点的黑色轮廓消失了。

如果我同时使用fillcolour来绘制geom_point,有没有办法选择将什么映射到图例键上(fillcolour)?


我不明白你想要什么。你能在Paint/Word/PPT中绘制你期望的输出并在这里发布吗? - Tung
我认为情节图片应该被交换--第二张图片应该与代码块1一起使用?不管怎样,这里有一个解决方案: 在代码块1的末尾添加guides(fill=guide_legend(override.aes=list(shape=21)))。然后,填充颜色将在填充图例中正确显示。我认为这可能是图例的意外行为。 - bdemarest
@ Tung - 我想要绘制带有黑色轮廓和彩色图例键的彩色圆圈。但是我得到的是没有轮廓的彩色圆圈和彩色图例(第一个图)或彩色圆圈、黑色轮廓和黑色图例(第二个图)。 - kwasny
@bdemarest - 我找到了一个解决方法,首先用颜色绘制图例,然后添加另一层填充并抑制图例。这样做虽然有效,但我需要两倍于所需的对象。我的图表操作大约有15k个数据点,因此速度变慢了。 你的解决方案非常好,非常感谢你的帮助。 同意,这可能是图例的意外行为。 - kwasny
1个回答

6
ggplot(dt, aes(x=y, y=x)) +  
    geom_point(mapping = aes(fill = factor(h), shape = s), size = 5) +
    scale_shape_manual(values = c(24, 21)) +
    guides(fill=guide_legend(override.aes=list(shape=21)))

以上代码生成了这个图 - 正是我想要的,感谢bdemarest

填充映射到图例


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