【问题标题】:Create map plot with discrete colors创建具有离散颜色的地图图
【发布时间】:2019-12-12 19:09:01
【问题描述】:

我刚刚开始使用 ggplot2 并创建了一个地图,上面覆盖了由连续彩色地图表示的数据。数据从 0.205 到 0.756。但是,我想用“n”个离散颜色绘制数据,中点为 0.5。

我已将代码的相关部分修改为以下内容:

...
df %>% # dataframe
mutate(value_cut = cut_interval(value, n = 6)) %>%
ggplot() -> gg

gg <- gg + geom_polygon(aes(x = long, y = lat, group = group,
                            fill = value_cut), size = 0.25, color = NA)
gg <- gg + viridis::scale_fill_viridis(discrete = TRUE,direction=-1)
...
print(gg)

生成以下图:

几乎就在那里,但我希望能够指定“偶数”个唯一颜色并将中点设置为 0.5。我尝试了许多不同的方法,但通常都会出错。

任何帮助表示赞赏。

【问题讨论】:

  • 如果您想完全控制用于离散化数据的间隔,您可能希望使用基础 R 中的 cut 函数;见rdocumentation.org/packages/base/versions/3.6.2/topics/cut
  • 谢谢,这可以通过设置breaks=c(0.2,0.35,0.5,0.65,0.8) 来实现,从而产生4 种离散颜色。更多的中断会增加颜色的数量。现在我需要做的就是设置自己的颜色 - 有什么建议吗?
  • 是的,看看 ColorBrewer (colorbrewer2.org),然后使用 scale_fill_manual 应用您选择的矢量。
  • 我试过:gg
  • 我认为您需要控制填充颜色的scale_fill_manual,而不是控制边框颜色的scale_colour_manual

标签: r ggplot2


【解决方案1】:

我将我的答案包括在内,以防将来对某人有所帮助。

根据ulfelder的建议,当相关代码变为时,我使用了R函数cut()scale_fill_manual()

...
df %>%
  mutate(value_cut = cut(value, breaks=c(0.2,0.35,0.5,0.65,0.8))) %>%
  ggplot() -> gg

# Create the coloured map using the ggplot2 package
# color=NA omits demarcation lines between constituencies
gg <- gg + geom_polygon(aes(x = long, y = lat, group = group,
                            fill = value_cut),
                        size = 0.25, color = NA)
cols <- c("yellow","gold","lightblue","royalblue")
gg <- gg + scale_fill_manual(values = cols)
...
print(gg)

生成如下图:

根据需要。

通过在调用cut() 函数时增加breaks 的数量,并增加cols 数组中的颜色数量,可以轻松实现更多离散颜色。

非常感谢 ulfelder 提供的出色而及时的建议。

【讨论】:

    猜你喜欢
    • 2022-01-02
    • 2021-09-05
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多