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之外,那是正确的。谢谢你的帮助!
答案 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"))
但是现在我们把颜色放在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")
请注意,如果我们将颜色映射到mtcars
的实际列(具有三个唯一级别的列),我们将获得与第一个示例中相同的三种颜色,但现在它们被映射到实际的数据:
ggplot(mtcars) +
geom_line(aes(mpg, wt, colour=factor(cyl)))
最后,如果我们想将这些映射的颜色设置为不同的值,那该怎么办:
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)))