R 自动检测所需颜色调色板值的正确数量

R 自动检测所需颜色调色板值的正确数量,r,ggplot2,colors,R,Ggplot2,Colors,与……有关 如果我使用colorRampPalette创建渐变,有没有办法让ggplot2自动检测该渐变所需的颜色数量 在下面的示例中,我必须为3个气缸值指定3种颜色。这需要我提前知道我需要这么多。我希望不必指定它,而是让ggplot自动检测它需要的数字 myColRamp <- colorRampPalette(c('#a0e2f2', '#27bce1')) ggplot(mtcars, aes(x = wt, y = mpg, col = as.factor(cyl))) + g

与……有关

如果我使用colorRampPalette创建渐变,有没有办法让ggplot2自动检测该渐变所需的颜色数量

在下面的示例中,我必须为3个气缸值指定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-根据特定变量确定唯一因子的数量

只需使用长度和独特的功能,以计算出多少因素是在cyl

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

如果您不想指定变量的名称,并且想要更一般的东西,我们可以构建绘图,查看绘图使用了多少颜色,然后再次构建它

要做到这一点,我们还必须将绘图保存为对象,我们称之为绘图对象p


现在只需根据你的使用来调用P或PrPtP。

虽然这些工作,但它们不是我所认为的“自动”,因为默认的颜色方案会自动选择正确的颜色数量,即数量的因素。这里存储了中间步骤和对象,这不是我所希望的。在我给出的第一个选项中,没有存储中间步骤或对象。问题是在复制时,变量名更改时需要更新。是的,关于存储,您是对的。然而,我经常有一长串的数据操作通过管道连接在一起,最后通过管道连接到ggplot函数中。这意味着我不能调用uniquemtcars$cyl,因为实际绘制的数据集没有以相同的格式存储在任何地方。我希望有一种方法可以引用摄取的数据,例如,使用。或者别的什么。我可以存储它,然后绘制它,然后使用你的选项1,但这不是我想问的问题。也许不可能。啊,我明白了。不幸的是,我不知道有什么方法可以做到这一点。不过,可能还有另一种解决问题的方法。您是否希望添加问题的扩展版本,包括一些管道情况,并且我们可能能够找到更好的解决方法?
values = myColRamp(length(unique(mtcars$cyl))
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))