R:根据regoin的值,用ggplot2填充/映射/绘制一个Shapefile

时间:2016-04-05 20:41:19

标签: r ggplot2 shapefile

最佳

我有以下shapefile,这是Flanders(比利时)的地图,我想用ggplot 关于 cheapestEnergyPrices 绘制它。 (因此使用渐变色)

head(flanders@data, n = 1)
  OBJECTID  Cs012011      Nis_   ...  Sec    Commune     Prov_nl    Reg_nl       cheapestEnergyPrices   mostExpensiveEnergyprices
  3         11001A00-     11001  ...  A00-   AARTSELAAR  Antwerpen  Vlaanderen   935.03                 1254.74


head(flanders@polygons, n=1)
[[1]]
An object of class "Polygons"
Slot "Polygons":
[[1]]
An object of class "Polygon"
Slot "labpt":
[1]  4.387485 51.132957

Slot "area":
[1] 6.825956e-05

Slot "hole":
[1] FALSE

Slot "ringDir":
[1] 1

Slot "coords":
           [,1]     [,2]
  [1,] 4.385794 51.13767
  [2,] 4.386132 51.13745
  ...  ...      ...
[147,] 4.385794 51.13767



Slot "plotOrder":
[1] 1

Slot "labpt":
[1]  4.387485 51.132957

Slot "ID":
[1] "0"

Slot "area":
[1] 6.825956e-05

此时我尝试了很多东西,例如下一段代码:

> ggplot() + geom_polygon(data = flanders, aes(x = long, y = lat, group = group,fill = flanders$cheapestEnergyPrices))

但不幸的是它会给我下一个错误代码

Regions defined for each Polygons
Error: Aesthetics must be either length 1 or the same as the data (1224957): x, y, group, fill

然而,当我用 1 替换佛兰德斯* cheapestEnergyPrices 时,例如:

ggplot() + geom_polygon(data = flanders, aes(x = long, y = lat, group = group,fill = 1))

然后我会得到这个不需要的结果,因为所有内容都包含相同的颜色。

enter image description here

因此......我想用ggplot2绘制我的shapefile,其中多边形被着色,相对于例如cheapestEnergyPrices。 例如,其中 cheapestEnergyPrice 最低的 commune 将具有DarkGreen颜色,并且 commublicEnergyPrice commune 更高会有浅绿色/白色,甚至是红色......

1 个答案:

答案 0 :(得分:1)

也许:

ggplot() + geom_polygon(data = flanders, aes(x = long, y = lat, group = group, fill = cheapestEnergyPrices))

我认为你不需要回复flanders$,但没有你的数据就很难说。由于您的列似乎是数字,因此应使用色标。

我猜flandersfortify - 由ggplot动态编辑并变成data.frame。一个更简单的选择是:

i)将flanders变为data.frame fortifyeven better broom::tidy

ii)将此data.frameggplot2一起使用,以及其他数据操作。

类似的东西:

flanders_df <- broom::tidy(flanders)
ggplot() + geom_polygon(data = flanders_df, aes(x = long, y = lat, group = group, fill = cheapestEnergyPrices))