自动检测所需数量的正确colorRampPalette值

时间:2018-07-03 23:48:33

标签: r ggplot2 colors

this question有关。

如果我使用colorRampPalette创建渐变,是否可以让ggplot2自动检测该渐变中需要的颜色数量?

在下面的示例中,我必须指定3个cyl值需要3种颜色。这需要我提前知道我将需要这么多。我不想指定它,而让ggplot自动检测它需要的数字。

myColRamp <- colorRampPalette(c('#a0e2f2', '#27bce1'))
ggplot(mtcars, aes(x = wt, y = mpg, col = as.factor(cyl))) +
  geom_point(size = 3) +
  scale_colour_manual(values = myColRamp(3)) # How to avoid having to specify 3?

我也接受不使用colorRampPalette但实现相同功能的选项。

1 个答案:

答案 0 :(得分:1)

我在这里看到两个选择。一个需要一点定制的东西。一种具有更多代码但不需要自定义的代码。

选项1-根据您的特定变量确定唯一因子的数量

只需使用lengthunique函数即可计算出cyl中有多少个因素。

values = myColRamp(length(unique(mtcars$cyl))

选项2-构建图,并查看使用了多少种颜色

如果您不想指定变量的名称,并且想要更通用的名称,我们可以构建图表,查看ggplot使用了多少种颜色,然后再次构建。

为此,我们还必须将绘图保存为对象,我们将该绘图对象称为p

p <- ggplot(mtcars, aes(x = wt, y = mpg, col = as.factor(cyl))) +
     geom_point(size = 3)
     #Notice I haven't set the colour option this time


p_built <- ggplot_build(p) #This builds the plot and saves the data based on
                           #the plot, so x data is called 'x', y is called 'y',
                           #and importantly in this case, colour is called the
                           #generic 'colour'.

#Now we can fish out that data and check how many colour levels were used
num_colours <- length(unique(p_built$data[[1]]$colour))

#Now we know how many colours were used, we can add the colour scale to our plot
p <- p + scale_colour_manual(values = myColRamp(num_colours))

现在,根据您的使用习惯,只需调用pprint(p)即可。