我正在创建 ggplot2 wiki 上描述的 map (choropleth)。一切都像魅力一样,除了我遇到了一个问题,通过 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))
但这不起作用。相反,我收到了类似的错误:
我是否误解了“休息”选项的目的?还是断断续续?
最佳答案
预切割连续数据的一个主要问题是在代码的不同点使用了三段信息:
真正的恶性循环。这可以通过提供一个接受数据和调色板的函数来打破,自动导出断点的数量并返回一个可以添加到
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")
关于r - 使用 ggplot2 中的 scale_fill_brewer() 函数设置数据断点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6738085/