【问题标题】:Setting breakpoints for data with scale_fill_brewer() function in ggplot2在 ggplot2 中使用 scale_fill_brewer() 函数为数据设置断点
【发布时间】:2011-07-18 19:14:24
【问题描述】:

我正在按照ggplot2 wiki 中的说明创建地图(等值线)。一切都像一个魅力,除了我遇到了一个问题,通过 scale_fill_brewer() 函数将连续值映射到多边形填充颜色。

This question 描述了我遇到的问题。正如答案一样,我的解决方法是使用 gtools quantcut() 函数将我的数据预先剪切到 bin 中:

更新:第一个示例实际上是正确的方法

require(gtools) # needed for quantcut()

...

fill_factor <- quantcut(fill_continuous, q=seq(0,1,by=0.25))
ggplot(mydata) + 
aes(long,lat,group=group,fill=fill_factor) +
geom_polygon() +
scale_fill_brewer(name="mybins", palette="PuOr")

这行得通,但是,我觉得我应该能够跳过预剪切数据的步骤,并使用中断选项执行类似的操作:

ggplot(mydata) +
aes(long,lat,group=group,fill=fill_continuous) +
geom_polygon() +
scale_fill_brewer(names="mybins", palette="PuOr", breaks=quantile(fill_continuous))

但这不起作用。相反,我收到类似以下的错误:

提供给离散 scale_brewer 的连续变量(综合得分)。

我是否误解了“休息”选项的目的?还是断了?

【问题讨论】:

  • 正如错误所说,scale_fill_brewer 用于离散数据,而不是连续数据。
  • 感谢 Hadley,感谢您的回答和编写程序包。我想我假设连续数据+中断=离散。这是否意味着我的第一个示例(预先切割我的连续数据)是执行此操作的“正确”方法?
  • 是的。图例与轴没有什么不同 - 在轴上设置中断不会使数据离散,它只是移动刻度线。
  • 非常感谢您的解释。我不敢相信你回答了多少关于 ggplot2 的问题——你得到了我对开源 MVP 的投票。

标签: r ggplot2


【解决方案1】:

预切连续数据的一个主要问题是在代码的不同点使用了三条信息:

  • Brewer 调色板 -- 确定可用颜色的最大数量
  • 断点的数量(或 bin 宽度)——必须用数据指定
  • 要绘制的实际数据 -- 影响 Brewer 调色板的选择(顺序/发散)

真正的恶性循环。这可以通过提供一个接受数据和调色板的函数来打破,自动派生断点的数量并返回一个可以添加到ggplot对象的对象。大致如下:

fill_brewer <- function(fill, palette) {
  require(RColorBrewer)
  n <- brewer.pal.info$maxcolors[palette == rownames(brewer.pal.info)]
  discrete.fill <- call("quantcut", match.call()$fill, q=seq(0, 1, length.out=n))
  list(
    do.call(aes, list(fill=discrete.fill)),
    scale_fill_brewer(palette=palette)
  )
}

像这样使用它:

ggplot(mydata) + aes(long,lat,group=group) + geom_polygon() +
  fill_brewer(fill=fill_continuous, palette="PuOr")

【讨论】:

  • 看起来不错,但我得到“错误:提供给离散刻度的连续值”。
【解决方案2】:

正如 Hadley 所解释的,breaks 选项会移动刻度,但不会使数据连续。因此,根据问题中的第一个示例预先切割数据是使用 scale_fill_brewer 命令的正确方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多