ggplot没有绘制正确的颜色

时间:2017-04-03 05:44:17

标签: r ggplot2

gb <- read.csv('results-gradient-boosting.csv')
p <- ggplot(gb) + geom_point(aes(x = pred, y = y),alpha = 0.4, fill = 'darkgrey', size = 2) + 
geom_line(aes(x = pred, y = pred,color = 'darkgrey'),size = 0.6) + 
geom_line(aes(x = pred, y = pred + 3,color = I("darkgrey")), linetype = 'dashed',size = 0.6) + 
geom_line(aes(x = pred, y = pred -3,color = 'darkgrey'),linetype = 'dashed',size = 0.6)

我的代码在上面。我不知道为什么当我把颜色放在aes里面时,颜色变成了红色。但如果我把它放在aes之外,那是正确的。谢谢你的帮助! enter image description here

1 个答案:

答案 0 :(得分:8)

当您将color="darkgrey"放在aes之外时,ggplot会将字面意思理解为该行应为"darkgrey"。但是当你将color="darkgrey"置于aes内时,ggplot将其视为您想要将颜色映射到变量。在这种情况下,变量只有一个值:“darkgrey”。但那不是颜色"darkgrey"。这只是一个字符串。你可以称之为任何东西。颜色ggplot选择将基于默认调色板。当您需要不同级别的变量时,将颜色映射到变量。

例如,看看下面的例子中会发生什么。颜色从ggplot的默认调色板中选择,完全独立于我们在colour每次调用中用于geom_line的名称。如果您有任何具有三种不同独特值的色彩美学,您将获得相同的三种颜色:

library(ggplot2)
theme_set(theme_classic())

ggplot(mtcars) +
  geom_line(aes(mpg, wt, colour="green")) +
  geom_line(aes(mpg, wt - 1, colour="blue")) +
  geom_line(aes(mpg, wt + 1, colour="star trek"))

enter image description here

但是现在我们把颜色放在aes之外,所以它们是字面意思的,我们注释掉第三行,因为如果我们不使用有效的颜色会导致错误。

ggplot(mtcars) +
  geom_line(aes(mpg, wt), colour="green") +
  geom_line(aes(mpg, wt - 1), colour="blue") #+
  #geom_line(aes(mpg, wt + 1), colour="star trek")

enter image description here

请注意,如果我们将颜色映射到mtcars的实际列(具有三个唯一级别的列),我们将获得与第一个示例中相同的三种颜色,但现在它们被映射到实际的数据:

ggplot(mtcars) +
  geom_line(aes(mpg, wt, colour=factor(cyl)))

enter image description here

最后,如果我们想将这些映射的颜色设置为不同的值,那该怎么办:

ggplot(mtcars) +
  geom_line(aes(mpg, wt, colour=factor(cyl))) +
  scale_colour_manual(values=c("purple", hcl(150,100,80), rgb(0.9,0.5,0.3)))

enter image description here