【问题标题】:Assigning colors to table values using Choroplethr使用 Choroplethr 为表格值分配颜色
【发布时间】:2020-08-29 11:07:57
【问题描述】:

我正在尝试使用 choroplethr 在县级制作地图。目前,我的 csv 在列值下有 3 个分类整数(1、2、3),这取决于每个县。 region 列包含县 fips。

我想将以下值显示为相应的标签、颜色(值=标签=颜色):

0 = "无" = "白色", 1 = "MD" = "#64acbe", 2 = "DO" = "#c85a5a", 3 = "两者" = "#574249",

我尝试了几种 scale_fill_brewer 组合,但没有得到我想要的结果。任何帮助都会很棒。这是模拟我正在使用的数据的代码:

library(choroplethr)
library(ggplot2)
library(choroplethrMaps)

Res <- data.frame(

region = c(45001, 22001, 51001, 16001, 19001, 21001, 29001, 40001, 8001, 19003, 16003, 17001, 18001, 28001, 38001, 31001, 39001, 42001, 53001, 55001, 50001, 72001, 72003, 72005, 72007, 72009, 45003, 27001),

value = c(0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3), 
stringsAsFactors = FALSE)

county_choropleth(Res, 
            title = "All United States Medical Residencies",
            legend = "Types of Medical Residencies"
             )

【问题讨论】:

  • 您好,我正在审核您的帖子。虽然是个好问题,但添加一些代码向社区展示您的努力总是一个好主意。
  • 嗨达里奥。感谢您使用 Choroplethr,并感谢您在 Stack Overflow 上提问。跟进拉尼尔所说的话。以下是有关如何创建可重现示例的重要说明:stackoverflow.com/questions/5963269/…。如果您将现有问题编辑为这种格式,这将有助于社区回答您的问题。
  • 大家好,我会弄清楚如何包含我一直在运行的代码。感谢您愿意提供帮助。
  • 已更新代码,希望对您有所帮助!另外,如果我能澄清任何事情,请告诉我。

标签: choroplethr


【解决方案1】:

感谢您使用 Choroplethr。

我认为这里有几个问题。我要解决的第一个问题是您的value 列包含数字数据。这本身不是问题。但是因为您实际上是在使用它来编码分类数据(即“MD”、“OD”等),所以这是一个问题。因此,我的首要任务是将数据类型从数字更改为字符数据:

> class(Res$value)
[1] "numeric"
> Res$value = as.character(Res$value)
> class(Res$value)
[1] "character"

现在我将用您想要的类别名称替换“数字”:

> Res[Res=="0"] = "None"
> Res[Res=="1"] = "MD"
> Res[Res=="2"] = "DO"
> Res[Res=="3"] = "Both"
> head(Res)
  region value
1  45001  None
2  22001    MD
3  51001    DO
4  16001  Both
5  19001  None
6  21001    MD

现在是第二期。你说你试图使用scale_fill_brewer。该功能用于使用布鲁尔秤。但你不想要那些在这里。你说你有自己的秤。所以你想使用scale_fill_manual。

county_choropleth(Res) + 
  scale_fill_manual(values=c("None" = "#ffffffff",  
                             "MD" = "#64acbe", 
                             "DO" = "#c85a5a", 
                             "Both" = "#574249"),
                    name="Types of Medical Residencies")

注意:choroplethr 所说的“图例”(实际上是图例的 名称)实际上是 ggplot2 比例的属性。特别是秤的name。因此,如果您使用自己的音阶,则不能再使用 choroplethr 的 legend 参数。

当然,现在我们有一个新问题:阿拉斯加和夏威夷都是黑色的。我实际上忘记了这个问题(自从我从事 Choroplethr 以来已经有一段时间了)。发生这种情况的原因是非常技术性的,并且可能比您关心的更详细,但为了完整起见,我将在此处提及:choroplethr 使用 ggplot2 注释将 AK 和 HI 呈现在适当的位置。 choropelthr + ggplot_scale 范式不适用于 AK 和 HI,因为 ggplot 不会向注释传播额外的层/比例。为了解决这个问题,我们必须使用 choroplethr 的面向对象的特性:

c = CountyChoropleth$new(Res)
c$title = "All United States Medical Residencies"
c$ggplot_scale = scale_fill_manual(values=c("None" = "#ffffffff", "MD" = "#64acbe", "DO" = "#c85a5a", "Both" = "#574249"), 
                                   name="Types of Medical Residencies")
c$render()

【讨论】:

  • 这是一个伟大而彻底的答案,谢谢。一件事 - 即使在更改代码的那部分之后,图例仍然是“价值”。有什么可以用来覆盖它的吗?
猜你喜欢
  • 1970-01-01
  • 2022-11-02
  • 2019-11-13
  • 1970-01-01
  • 1970-01-01
  • 2019-12-18
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
相关资源
最近更新 更多