【问题标题】:How can I bin the legend of a continuous variable in ggplot2?如何在 ggplot2 中合并连续变量的图例?
【发布时间】:2020-10-16 12:05:43
【问题描述】:

我正在尝试制作美国各县的等值线地图。我的值范围很大,并且高度膨胀为 0,因此我想为图例和着色创建自定义箱。理想情况下,这将使用 ggplot。我还想为图例保留一个标准结构,以便我可以将相同的图例用于具有不同数据的多个等值线。

图例可能是 0、1-20、21-50、51-150、151-300、301-800,每个“bin”的颜色来自光谱或其他一些连续的调色板。

scale_color_steps()scale_fill_brewer() 和其他类似功能,即使使用breakslimits or n.breaks,似乎也不起作用。有什么想法吗?

library(choroplethr)
library(choroplethrMaps)
library(ggplot2)
data(county.regions)

df <- tibble(region = county.regions$region, value = c(rep(0,2000), rep(1,1000), sample(2:800, 143)))  

county_choropleth(df) +
  scale_colour_steps(palette='Spectral', n.breaks = 8)

【问题讨论】:

  • “自定义 bin 大小”是什么意思?你的意思是“自定义垃圾箱”吗?
  • 那么这里想要的结果到底是什么?
  • @Edward 目标是有一个连续的图例,其中包含我指定的中断或垃圾箱,例如0、1-20、21-50、51-150、151-300、301-800,每个“bin”的颜色都来自光谱或其他一些连续调色板。我也会编辑原帖。
  • 感谢您使用 Choroplethr。我会回应其他评论者。如果您的问题有一个非常明确的预期最终结果,那就太好了,这样我们就可以确定我们的答案会被接受。

标签: r ggplot2 choropleth choroplethr


【解决方案1】:

实现所需结果的简单解决方案是将num_colors = 1 设置为country_choropleth

来自country_choroplethdocs

num_colors 在地图上使用的颜色数。值 0 使用发散比例(用于可视化负数和正数),值 1 使用连续比例(用于可视化异常值),而 [2, 9] 中的值将使用那么多分位数。

默认情况下num_colors = 7 这意味着连续数据被离散化,因此添加连续填充比例会引发Error: Binned scales only support continuous data. 设置num_colors = 1 数据不会被分箱,我们可以应用 自定义连续填充比例:

library(choroplethr)
library(choroplethrMaps)
library(ggplot2)
data(county.regions)

set.seed(42)

df <- tibble::tibble(region = county.regions$region, value = runif(3143, 0, 800))  

breaks <- c(0, 20, 50, 150, 300, 800)

county_choropleth(df, num_colors = 1) +
  scale_fill_stepsn(colors = RColorBrewer::brewer.pal(5, "Spectral"), breaks = breaks)

county_choropleth(df, num_colors = 1) +
  scale_fill_viridis_b(breaks = breaks) 

【讨论】:

  • 请注意这个答案有一个问题:使用 ggplot2 的+ 运算符不会影响用于 AK 或 HI 的比例。要了解如何解决此问题,请参阅例如我对这个问题的回答的最后一部分:stackoverflow.com/questions/61771543/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-24
相关资源
最近更新 更多