Geopandas和Mapplotlib,如何在没有轮廓的情况下进行绘图?

时间:2019-04-19 08:46:27

标签: matplotlib geopandas

当我在Jupyter Notebook中运行以下代码时, 我得到了一张红色的世界地图。

enter image description here

国家之间有细白线。 有没有办法绘制世界,让所有国家 是坚固的,两者之间没有界限?

我问,因为我的现实用例是一个很好的网格, 行为就像世界地图:每个网格形状都有一个精细的轮廓 我不想在情节中有。 (更新,因为有人问:网格形状将不会具有相同的填充颜色。

grid example

PUT /parent/:id/nestedArray

对于网格示例,网格文件位于https://opendata-esri-de.opendata.arcgis.com/datasets/3c1f46241cbb4b669e18b002e4893711_0 一个显示问题的简化示例。

import geopandas as gpd
import geoplot as gplt
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
world['total'] = 1
world.plot(column='total', cmap='Set1')

1 个答案:

答案 0 :(得分:2)

白线归因于抗锯齿。这通常会使视觉更加平滑,但会导致不同形状之间出现白线。您可以通过以下方式关闭锯齿处理

antialiased=False

这有一个不可避免的缺点,那就是情节看起来像是像素化的。

另一种方法是使补丁具有一定线宽的边缘。边缘的颜色应该与面孔的颜色相同,所以

edgecolor="face", linewidth=0.4

将是一个选择。这样可以消除白线,但是会产生轻微的“摩擦”效果(您会注意到主要是在印度尼西亚或日本这样的岛屿上)。这将是更明显的,特征越小,因此与显示六边形图可能无关。不过,稍微增加一下线宽可能会进一步改善结果。

enter image description here

复制代码:

import numpy as np; np.random.seed(42)
import geopandas as gpd
import matplotlib.pyplot as plt

world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
world['total'] = np.random.randint(0,10, size=len(world))

fig, (ax1, ax2, ax3) = plt.subplots(nrows=3, figsize=(7,10))

world.plot(column='total', cmap='Set1', ax=ax1)

world.plot(column='total', cmap='Set1', ax=ax2, antialiased=False)

world.plot(column='total', cmap='Set1', ax=ax3, edgecolor="face", linewidth=0.4)


ax1.set_title("original")
ax2.set_title("antialiased=False")
ax3.set_title("edgecolor='face', linewidth=0.4")
plt.tight_layout()
plt.savefig("world.png")
plt.show()