【发布时间】: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"...,它就可以正常工作了