在Cartopy中更改地图边界颜色

时间:2016-02-16 03:49:14

标签: python matplotlib cartopy

我在Cartopy中绘制世界地图,作为整个过程的一部分,我想将所有线条涂成白色。除了地图的边界外,我已经能够为每个元素做到这一点。这是我正在使用的代码:

import matplotlib.pyplot as plt
import cartopy
import cartopy.io.shapereader as shpreader
import cartopy.crs as ccrs

fig = plt.Figure()
fig.set_canvas(plt.gcf().canvas)

ax = plt.axes(projection=ccrs.PlateCarree())
ax.add_feature(cartopy.feature.LAND, linewidth=0.5, edgecolor='white')
ax.set_extent([-150,60,-25,60])

shpf = shpreader.natural_earth(resolution='110m', category='cultural', name='admin_0_countries')

reader = shpreader.Reader(shpf)
countries = reader.records()

for country in countries:
    ax.add_geometries(country.geometry, ccrs.PlateCarree(), facecolor=(0,1,0), linewidth=0.5, edgecolor='white', label=country.attributes['adm0_a3'])

fig.savefig("final_image.png", format='png', dpi=200)

这是最终结果:

enter image description here

如何尽可能少地将边界线更改为白色或完全关闭?

谢谢!

1 个答案:

答案 0 :(得分:7)

可以使用以下行使框架变白:

library(data.table)
library(microbenchmark)

df = data.frame(l = letters, n = 1:26)
df = do.call(rbind, replicate(1e4, df, FALSE))
dfdt = dfdtk = data.table(df)
setkey(dfdtk, l)

mb = microbenchmark(times = 10, unit = "s",
  base = df[df$l == "a",],
  dt = dfdt[l == "a"],
  dtl = dfdt[list("a")],
  dtk = dfdtk[list("a")]
)
plot(mb)

除此之外,ax.outline_patch.set_edgecolor('white') 接受一个布尔关键字参数plt.axes,当设置为frameon时,会阻止绘制边框。然而,它似乎被Cartopy忽略了。这是一个潜在的错误,应该加以研究。