我是ggplot2的绝对新手。我对ggplot2感到沮丧,并开始阅读Wickham的精彩书籍。他说,对于剧情中使用的每一种美学都需要一个刻度。"。
所以,我做了以下事情:
尝试1:
huron <- data.frame(year = 1875:1972, level = as.numeric(LakeHuron))
ggplot(huron, aes(year)) +
geom_line(aes(y = level + 5, color = "y+5")) +
scale_color_manual(values = c("orange")) +
geom_line(aes(y = level - 5, color = "y-5")) +
scale_color_manual(values = "blue")
运行此操作后,我收到错误消息" insufficient value of colors provided."
我用Google搜索并在SO上找到了以下帖子:ggplot2 Error: Insufficient values in manual scale。在原帖中,为什么他/她添加额外的颜色是有道理的。但是,我不确定为什么在我的例子中会出现这种情况,因为我有两层,每层都有自己的美学。
尝试2
此代码可以正常工作:(因为我可以看到两种不同颜色的两个线条图和一个图例 - 这是我的目标)
ggplot(huron, aes(year)) +
geom_line(aes(y = level + 5, color = "y+5")) +
scale_color_manual(values = c("orange", "blue")) + #Added another color here.
geom_line(aes(y = level - 5, color = "y-5"))
令人惊讶的是,上面的代码显示了一些奇怪的东西 - 我有两个美学,只有一个尺度。
问题1:这是非常令人惊讶的,因为我们可以看到有两个geom但只有一个比例。正确?我知道威克姆不能错。那么,我错过了什么?
问题2:另外,出于好奇,如果我有多个geom,每个都有一个美学,如上面的情况,并且每个都有一个尺度,ggplot将如何知道哪个尺度与哪个geom?如同,ggplot2将如何知道layer1是否与color = red
一起使用,而layer2与color = blue
一起使用?
我真诚地感谢你的想法。提前谢谢。
答案 0 :(得分:2)
回答评论中的具体问题:
如果要强制使用特定颜色,则需要使用scale_color_manual
。顾名思义,这需要一些手工工作。
library(ggplot2)
#default colors
#http://stackoverflow.com/a/8197703/1412059
gg_color_hue <- function(n) {
hues = seq(15, 375, length = n + 1)
hcl(h = hues, l = 65, c = 100)[1:n]
}
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(colour = class)) +
geom_smooth(method = "lm", se = FALSE, aes(color = "model")) +
scale_color_manual(values = setNames(c(gg_color_hue(length(unique(mpg$class))), "red"),
c(unique(mpg$class), "model")))
但是,我会为线型使用额外的美学。
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(colour = class)) +
geom_smooth(method = "lm", se = FALSE, aes(linetype = "model"), color = "red")