如何在ggplot2中设置scale_colour_brewer()的颜色范围?(所选调色板)

17

很抱歉,由于我在这个网站上的声望有限,所以无法提供图片...

我使用以下代码在R中生成我的折线图:

p <- ggplot()+
geom_line(data=data, aes(x, y, color=Label))+ scale_colour_brewer(palette="Oranges")

我使用了调色板"Oranges",因为我想生成一系列颜色相似但不同的线条。

然而,下限/上限的颜色太浅了,所以我想为调色板设置一个限制,避免出现发白的颜色。

我知道我应该指定类似于 scale_color_gradient(low = "green", high = "red") 的东西,但是如何在给定的调色板中找到要指定的颜色呢?

非常感谢!

2个回答

13

由于您有一个离散的比例尺,所以您应该能够手动创建颜色集,并且使用scale_color_manual而不会遇到太多麻烦。

library(ggplot2)
theme_set(theme_bw())
fake_data = data.frame(
    x = rnorm(42), 
    y = rnorm(42), 
    Label = rep(LETTERS[1:7], each = 6))

p_too_light <- ggplot()+ geom_line(data=fake_data, aes(x, y, color=Label))+ 
  scale_colour_brewer(palette="Oranges")
p_too_light

现在使用 brewer.pal 和 http://www.datavis.ca/sasmac/brewerpal.html

library(RColorBrewer)
my_orange = brewer.pal(n = 9, "Oranges")[3:9] #there are 9, I exluded the two lighter hues

p_better <- ggplot()+ geom_line(data=fake_data, aes(x, y, color=Label))+ scale_colour_manual(values=my_orange)
p_better

如果您有超过6个类别,则可以使用colorRampPalette和brewer.pal调用中的边界颜色。但是,现在选择调色板方案需要更多的思考(可能是为什么ggplot2不会自动为离散比例尺执行此操作的原因)。

fake_data2 = data.frame(
  x = rnorm(140), 
  y = rnorm(140), 
  Label = rep(LETTERS[1:20], each = 7))

orange_palette = colorRampPalette(c(my_orange[1], my_orange[4], my_orange[6]), space = "Lab")
my_orange2 = orange_palette(20)

p_20cat <- ggplot()+ geom_line(data=fake_data2, aes(x, y, color=Label))+
  scale_colour_manual(values=my_orange2)
p_20cat

2

这个问题的一个好的直接答案是使用{shades}库。例如,要将scale_color_brewer的亮度降低20%,可以执行以下操作:

library(shades)
lightness(scale_color_brewer(palette="Oranges"),
          scalefac(0.8))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接