首页 > 解决方案 > 地图ggplot中的两种比例颜色

问题描述

我正在绘制地图ggplot,我想绘制两个不同scale_fill_gradient的,在查看了几篇堆栈溢出的帖子后,我无法达到预期的结果。

shapefile我读入的数据框中,spain有两列的地图,其中每一行仅在其中一个区域中被告知,而不是在两个区域中。关键是在同一个图中用两个来表示这两个概念scale_fill_gradient

这是我的实际图片的代码:

df %>% 
  ggplot(aes(x=long, y= lat, group = group)) +
  geom_polygon(aes_string(color= "ratio_quan"), size = 0.2)+
  scale_color_gradient(low ="yellow", high ="blue", na.value="white")+
  geom_polygon(aes_string(fill= "ratio_qua"), size = 0.2)+
  scale_fill_gradient(low ="pink", high ="red", na.value="blank")

在此处输入图像描述

据我了解,只能提供一个填充选项,因此我使用了scale_color_gradientand scale_fill_gradient,但是在一个比例中存在边界区别并在另一个比例中填充,而不是我想要完成的是以下内容:

在此处输入图像描述

如您所知,在这种情况下,这两个概念都由多边形中的颜色填充。

标签: rggplot2maps

解决方案


解决方案 1

完成要求

由@Allan Cameron 提供。

此问题已解决ggnewscale,此问题之前已在堆栈溢出的许多线程中解决,并以其他方式解决。

ggnewscale通过使用函数导入库,new_scale_fill()可以轻松应用新的刻度颜色。

library(ggnewscale)

df %>% 
  ggplot(aes(x=long, y= lat, group = group)) +
  geom_polygon(aes_string(fill= "ratio_quan"), size = 0.2)+
  scale_fill_gradient(low ="yellow", high ="blue", na.value="white")+
  new_scale_fill() +
  geom_polygon(aes_string(fill= "ratio_qua"), size = 0.2)+
  scale_fill_gradient(low ="pink", high ="red", na.value="blank")

解决方案 2

选择

这种经典的方法是使用grid.arrange不那么花哨但更易于解释的安排好的情节。

  p1 <- df %>% 
  ggplot(aes(x=long, y= lat, group = group)) +
  geom_polygon(aes_string(fill= "ratio_quan"), size = 0.2)+
  scale_fill_gradient(low ="yellow", high ="blue", na.value="white")
  p2 <- df %>% 
  ggplot(aes(x=long, y= lat, group = group)) +
  geom_polygon(aes_string(fill= "ratio_qua"), size = 0.2)+
  scale_fill_gradient(low ="yellow", high ="blue", na.value="white")
  grid.arrange(p1, p2, nrow = 1)

因此,在同一个地块上使用了两个具有独立比例的地块。


推荐阅读