【问题标题】:Can I adjust the lower limit of scale_color_brewer?我可以调整 scale_color_brewer 的下限吗?
【发布时间】:2015-01-19 05:29:47
【问题描述】:

我已经订购了我想在其上使用 color brewer 的分类数据。但是我很难看到非常轻的较低值。有没有办法修剪掉那些较低的值或设置比例的下限?

ggplot(data.frame(x=1:6, y=10:15, w=letters[1:6]), aes(x, y, color=w)) + 
geom_point()+ scale_color_brewer(type="seq", palette=1) + theme_bw()

有没有更好的方法来做到这一点?到目前为止,我要么看到没有排序的定性尺度,要么看到不喜欢应用于离散数据的连续尺度。如果这是唯一的路线,我知道手动秤。

【问题讨论】:

  • 一个简单的可能替代方法是使用在填充区域周围有轮廓的绘图符号,例如pch = 21(参见例如here)。然后你可以改用fillaesthetic。 ggplot(data.frame(x = 1:6, y = 10:15, w = letters[1:6]), aes(x, y, fill = w)) + geom_point(pch = 21,size = 5)+ scale_fill_brewer(type = "seq", palette = 1) + theme_bw()

标签: r ggplot2 colorbrewer


【解决方案1】:

您不能只设置一个下限。但是您可以使用比所需颜色更多的调色板,并将最亮的颜色映射到未使用的级别。下面是一个有 9 个级别的示例:

ggplot(data.frame(x=1:6, y=10:15, w=letters[1:6]), aes(x, y, color=w)) + 
  geom_point() + theme_bw() + 
  scale_color_brewer(type="seq", palette=1, 
                     limits=c(LETTERS[1:3], letters[1:6]), 
                     breaks=letters[1:6])

【讨论】:

  • 是的!这就是我试图弄清楚的解决方法。谢谢!
  • 您能否详细说明您在limits 参数中所做的事情?全大写的LETTERS 来自哪里?在我没有绘制letters 的情况下,如何将其推断为一般意义?
【解决方案2】:

虽然@shadow 的回答对我来说是一个开始,但我需要使用的那种啤酒调色板(顺序)只有 9 个值——我有 8 个分类变量要绘制!仅删除第 9 种也是最浅的调色板颜色仍然不足以使配色方案完全可见。

所以我使用了colorRampPalette() 函数,它允许您将现有的调色板扩展为连续函数:

library(RColorBrewer)
ggplot(data.frame(x=1:6, y=10:15, w=letters[1:6]), aes(x, y, color=w)) + 
  geom_point() + theme_bw() + 
  scale_color_manual(values = colorRampPalette(brewer.pal(9, "YlGnBu"))(12)[6:12])

因此,在这种情况下,我将“YlGnBu”调色板中的(最多)9 种原生颜色映射到 12 种颜色,然后在图中仅使用这些颜色中最暗的 6 种颜色 ([6:12])。

【讨论】:

    【解决方案3】:

    我不知道您可以传递给 scale_colour_brewer() 以设置比例下限的任何其他参数(请参阅http://docs.ggplot2.org/current/scale_brewer.html

    ggplot 的颜色选项之一具有更大的灵活性,它采用以下格式:scale_xxx_yyy,例如 scale_fill_discrete() 采用更多参数。例如参见http://docs.ggplot2.org/current/scale_hue.html,但也请注意其他选项(“另请参见”)。

    scale_fill_continuous 可能是您要求的序数数据的良好起点。

    例如,您可以将颜色从http://colorbrewer2.org/ 传递给它,然后选择更合适的起始颜色。唯一的问题是您需要使用以下工具将 rgb/hex 值转换为 HSL 值:http://serennu.com/colour/hsltorgb.php

    【讨论】:

    • 谢谢@Phil。我尝试了scale_colour_discrete,但找不到一种方法来处理有序的分类值(即在某种梯度上)。你知道一种方法吗?如果我只是选择值,那么我几乎要回到手动模式了。
    • 我已经更新了我的答案。 @shadow 的答案更适用于您的特定要求,但 scale_xxx_yyy 选项始终值得考虑。
    猜你喜欢
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 2020-07-22
    • 2020-09-30
    • 1970-01-01
    相关资源
    最近更新 更多