ggplot没有绘制正确的颜色

Ali*_*ice 4 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)
Run Code Online (Sandbox Code Playgroud)

我的代码在上面.我不知道为什么当我把颜色放在aes里面时,颜色变成了红色.但如果我把它放在aes之外,那是正确的.谢谢你的帮助!在此输入图像描述

eip*_*i10 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"))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是现在我们把颜色放在外面,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")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

ggplot(mtcars) +
  geom_line(aes(mpg, wt, colour=factor(cyl)))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

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)))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 这也完全解释了为什么我的 geom_text(aes(color="white")) 没有产生白色文本。它必须是 geom_text(aes(), color="white")。谢谢! (2认同)