【问题标题】:ggplot2 scale_fill_gradient disappears inconsistentlyggplot2 scale_fill_gradient 不一致地消失
【发布时间】:2020-03-30 03:10:00
【问题描述】:

我一直在学习如何为显示 covid-19 感染数据的工作绘制地图。除了国家地图,我还在制作东北部、南部、西部和中西部的区域地图。代码是相同的,我只是对国家数据框使用了不同的过滤。我为每天的数据制作一张地图,并使用 gganimate 制作帧,最后使用 gifski 制作动画 gif。全国地图基本代码为:

p <- pop_counties_cov %>%
  ggplot() +
  geom_sf(mapping = aes(fill = infRate, geometry=geometry), color = NA) +
  geom_sf(data = states_sf, fill = NA, color = "black", size = 0.25) +
  coord_sf(datum = NA) +   
  scale_fill_gradient(name = "% Population Infected", trans = "log", low='green', high='red',
                      na.value = "white",
                      breaks=c(0, round(max(pop_counties_cov$infRate),3))) +
  geom_point(data=AFMCbases, aes(x=longitude.1, y=latitude.1,size=personnel), color = "hotpink") +
  #geom_label_repel(data=AFMCbases, aes(x=longitude.1, y=latitude.1, label=Base)) +
  theme_bw() + 
  labs(size='AFMC \nMil + Civ') +
  theme(legend.position="bottom", 
        panel.border = element_blank(),
        axis.title.x=element_blank(), 
        axis.title.y=element_blank())

例如,它产生的最后一帧是

另一方面,这段代码:

p <- mw_pop_counties_cov %>%
  ggplot() +
  geom_sf(mapping = aes(fill = infRate, geometry=geometry), color = NA) +
  geom_sf(data = mw_states_sf, fill = NA, color = "black", size = 0.25) +
  coord_sf(datum = NA) +   
  scale_fill_gradient(name = "% Population Infected", trans = "log", low='green', high='red',
                      na.value = "white",
                      breaks=c(0, round(max(mw_pop_counties_cov$infRate),3))) +
  geom_point(data=mwBases, aes(x=longitude.1, y=latitude.1,size=personnel), color = "hotpink") +
  #geom_label_repel(data=AFMCbases, aes(x=longitude.1, y=latitude.1, label=Base)) +
  theme_bw() + 
  labs(size='AFMC \nMil + Civ') +
  theme(legend.position="bottom", 
        panel.border = element_blank(),
        axis.title.x=element_blank(), 
        axis.title.y=element_blank())

除了数据框已被过滤到仅中西部各州之外,其他情况相同,产生

注意色标的外观。

有没有因为我盯着这个太久而没有看到的错字?
我的脚本制作了 5 个动画,国家地图各 1 个,然后是 4 个人口普查区域(东北、中西部、南部和西部)。色标出现在西部和中西部地图上,但没有出现在其他三个地图上。尽管事实上我基本上只是剪切和粘贴然后更改了数据框名称。

我做错了什么?我希望色标出现在所有地图上。

【问题讨论】:

  • 您是否尝试在geom_sf 中传递show.legend = FALSE?您能否提供一个可重现的数据集示例?
  • 我明白了。很抱歉造成误解。
  • @Manu 在每种情况下,我都会根据检测呈阳性的人口百分比对每个县进行颜色编码,因此范围是 [0,1] 无论如何。但是对于规模,我在各自的数据框中使用最大感染率。例如,在中西部地图中,它是breaks=c(0, round(max(mw_pop_counties_cov$infRate),3))) +,所以我取中西部县费率的最大值,而在全国地图中,它是breaks=c(0, round(max(pop_counties_cov$infRate),3))),所以它是所有县的最大值。日志转换只是因为数据非常倾斜......
  • 我的意思不是四舍五入,而是地图上的物理水平空间。如果您将渐变名称从 % Population Infected 更改为 % PI 只是为了尝试这是否是问题所在,您可能也适合第一个图上的比例。
  • @Tjebo 感谢reprex 上的信息,我会检查一下。对我来说大问题是我几乎手动将县人口数据放在一起,因为我必须手动修复一堆东西以确保来源之间的一致性......就像它来自一个来源的“纽约市”和“纽约”城市”在另一个。至于最初的问题,一个简单的解决方法是在比例标签中添加换行符。一旦我做到了scale_fill_gradient(name = "% Population \nInfected"...,它就可以正常工作了

标签: r ggplot2


【解决方案1】:

原来问题似乎是输出图上的水平空间之一。只需从

更改比例标题
scale_fill_gradient(name = "% Population Infected",...

scale_fill_gradient(name = "% Population \nInfected",

注意换行符\n

输出地图现在具有我正在寻找的色标

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 2022-07-13
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    相关资源
    最近更新 更多