ggplot2和RcolorBrewer具有2个值的定性调色板

时间:2012-11-01 10:47:46

标签: r colors ggplot2

我使用RColorBrewer来设置ggplot2中的颜色。我写了一个函数,在同一个图表上我叠加了1到4行。为了设置我使用的颜色:

scale_color_brewer(type="qual", palette="Set1")

根据手册“对于定性调色板,可用的最小数量的不同值总是3”,因此当行数等于1或2时,我收到警告信息。是否有任何克拉弗技巧来应对?

罗伯特

@Ben Bolker:你绝对是正确的,在许多情况下必须提交一个可重复的例子,尽管这里没有必要。因为我原来的功能很长,所以我准备了一个显示问题的简单例子。

library("datasets")
library("ggplot2")

set.seed(1367)
y <- log10(lynx)
y.estim <- y + rnorm(length(y), sd=0.2)
mydf <- data.frame(time=1:length(y), y, y.estim) 
mydf <- melt(mydf, id="time")

p <- ggplot(mydf, aes(x=time, y=value, color=variable))
p + geom_line() + geom_point(size=2) + theme_bw() +
   scale_color_brewer(type="qual", palette="Set1") #here is a problem

也许我可以直接指定颜色。我知道

library("RColorBrewer")
> brewer.pal(4, "Set1")
[1] "#E41A1C" "#377EB8" "#4DAF4A" "#984EA3"

是否可以使用例如“#E41A1C”?

1 个答案:

答案 0 :(得分:3)

正如@mnel建议的那样,将语句包装在显式的print语句中似乎有效:

suppressWarnings(print(p + geom_line() + geom_point(size=2) + theme_bw() +
     scale_color_brewer(type="qual", palette="Set1")))

会话信息:

> sessionInfo()
R Under development (unstable) (2012-10-14 r60940)
Platform: i686-pc-linux-gnu (32-bit)

[snip]

other attached packages:
[1] reshape2_1.2.1  ggplot2_0.9.2.1

编辑 - @mnel

您可以重新定义print.ggplot以自动执行此操作。我不知道这是否会导致 环境(parent.frame问题)

print.ggplot <- function(..., warnings = getOption('ggplot_warning', default = TRUE)){
  if(warnings){
    ggplot2:::print.ggplot(...))} else { 
     suppressWarnings(ggplot2:::print.ggplot(...))
   }
  }

因此,如果您希望将ggplot打印的所有警告设置为关闭,则只需设置

options(ggplot_warning = FALSE)

否则它应该正常。