R ggplot2填充和颜色映射图例

R ggplot2填充和颜色映射图例,r,ggplot2,R,Ggplot2,我有一个包含四个变量的示例数据框,我正在尝试将h变量映射到fill和s变量映射到shape。由于我的s变量只能取两个值(“f”或“u”),我想使用geom_点24和21,它们可以取fill和color参数 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) 我无法让图例显

我有一个包含四个变量的示例数据框,我正在尝试将
h
变量映射到
fill
s
变量映射到
shape
。由于我的
s
变量只能取两个值(“f”或“u”),我想使用
geom_点
24和21,它们可以取
fill
color
参数

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_点
更改为19和17,并映射
h
变量
颜色
,我可以使用彩色图例键:

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))

图例用彩色键显示,但“我的点在绘图上”上的黑色轮廓消失了

如果我对
几何点
使用
填充
颜色
,是否有办法选择图例键(
填充
颜色
)上映射的内容

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


我没有得到你想要的。你能用Paint/Word/PPT画出你的预期输出并张贴在这里吗?我认为应该切换绘图图像——图像2与代码块1一起?。无论如何,这里有一个解决方案:将
指南(fill=guide\u legend(override.aes=list(shape=21))
添加到代码块1的末尾。然后,填充颜色将正确显示在填充图例中。我想这可能是传说中的意外行为。@Tung-我想用黑色轮廓和彩色图例键画彩色圆圈。我得到的不是没有轮廓的彩色圆圈和彩色图例(第一个图)或彩色圆圈,而是黑色轮廓和黑色图例(第二个图)@bdemarest-我找到了一个解决方法,首先用彩色图例绘制颜色,然后用填充和压制的图例添加另一层。它起作用了,但我有两倍于所需的物品。我的绘图在大约15k个数据点上运行,所以速度变慢了。您的解决方案非常有效,非常感谢您的帮助。同意,这可能是传说中的意外行为。
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)))