用ggplot2在R中更改图例中的颜色。

5

我在使用ggplot时遇到了两个关于指定图例颜色的问题。我尝试了一个简化的例子来展示我的问题:

df <- data.frame(x=rep(1:9, 10), y=as.vector(t(aaply(1:10, 1, .fun=function(x){x:(x+8)}))), method=factor(rep(1:9, each=10)), DE=factor(rep(1:9, each=10)))
ggplot(df, aes(x, y, color=method, group=DE, linetype=DE)) + geom_smooth(stat="identity")

由于某种原因,标题为 DE 的图例中显示的线条类型都是蓝色的。 我想让它们变成黑色,但我不知道它们为什么会是蓝色的,因此我不确定如何更改。

对于我的另一个问题,我试图使用点颜色和点形状来显示数据中的两个不同区分。 我想为这两个区分都添加图例。这是我的代码:

classifiers <- c("KNN", "RF", "NB", "LR", "Tree")
des <- c("Uniform", "Gaussian", "KDE")

withoutDE <- c(.735, .710, .706, .628, .614, .720, .713, .532, .523, .557, .677, .641, .398, .507, .538)
withDE <- c(.769, .762, .758, .702, .707, .752, .745, .655, .721, .733, .775, .772, .749, .756, .759)

df <- data.frame(WithoutDE=withoutDE, WithDE=withDE, DE=rep(des, each=5), Classifier=rep(classifiers, 3))
df <- cbind(df, Method=paste(df$DE, df$Classifier, sep=""))

ggplot() + geom_point(data=df, aes(x=WithoutDE, y=WithDE, shape=Classifier, fill=DE), size=3) + ylim(0,1) + xlim(0,1) + xlab("AUC without DE") + ylab("AUC with DE") + scale_shape_manual(values=21:25) + scale_fill_manual(values=c("pink", "blue", "white"), labels=c("Uniform", "KDE", "Gaussian")) + theme(legend.position=c(.85,.3))

如果我更改颜色并更改填充(通过将color = DE放入aes中),则这些内容在图例中可见。虽然我喜欢在点周围有黑色边框,但我希望点的内部在图例中反映出绘图时的填充颜色。(我还想将两个图例并排放置,但现在我只是想让颜色正常工作)。
我花了太长时间在谷歌上搜索这两个问题,并尝试各种解决方案,但都没有成功。有人知道我做错了什么吗?
1个回答

8

针对问题1:

将线条类型的图例和颜色的图例命名相同。

ggplot(df, aes(x, y, color=method, group=DE, linetype=DE)) + 
  geom_smooth(stat="identity") +
  scale_color_discrete("Line") +
  scale_linetype_discrete("Line")

针对问题2:

我认为你的填充颜色与数据不匹配。在 scale_x_manual 中应该为每个颜色赋值名称。

我无法为点设置黑色边框。但是我能得到以下结果:

ggplot() + 
  geom_point(data=df, aes(x=WithoutDE, y=WithDE, shape=Classifier, 
                          fill=DE, colour=DE), size=3) + 
  ylim(0,1) + xlim(0,1) + 
  xlab("AUC without DE") + 
  ylab("AUC with DE") + 
  scale_shape_manual(values=21:25) + 
  scale_fill_manual(values=c("Uniform"="pink", "KDE"="blue", "Gaussian"="white"), 
                    guide="none") +
  scale_colour_manual(values=c("Uniform"="pink", "KDE"="blue", "Gaussian"="white"), 
                      labels=c("Uniform", "KDE", "Gaussian")) +
  theme(legend.position=c(.85,.3))

我不知道您是否可以控制图例中的点类型。也许其他更了解ggplot2的人可以找到答案。


谢谢你的回答!我想我在我的第一个问题上应该更加清楚。我实际上确实希望有不同的图例 - 我希望颜色图例保持原样,而线型图例中的线条为黑色而不是蓝色。是的,如果我改变颜色和填充,我可以改变点的颜色,但白色没有黑色边框就不太明显,所以我真的很希望有黑色边框。 :-\ - Amanda

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