用于绘图的美学尺度| GGPLOT2

时间:2016-08-26 05:43:35

标签: r ggplot2

我是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一起使用?

我真诚地感谢你的想法。提前谢谢。

1 个答案:

答案 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")))

resulting plot

但是,我会为线型使用额外的美学。

ggplot(mpg, aes(displ, hwy)) + 
  geom_point(aes(colour = class)) + 
  geom_smooth(method = "lm", se = FALSE, aes(linetype = "model"), color = "red")

second resulting plot