与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但实现相同功能的选项。
答案 0 :(得分:1)
我在这里看到两个选择。一个需要一点定制的东西。一种具有更多代码但不需要自定义的代码。
选项1-根据您的特定变量确定唯一因子的数量
只需使用length
和unique
函数即可计算出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))
现在,根据您的使用习惯,只需调用p
或print(p)
即可。