Geopandas和Matplotlib,我如何绘制没有任何形状的轮廓?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Geopandas和Matplotlib,我如何绘制没有任何形状的轮廓?相关的知识,希望对你有一定的参考价值。
当我在Jupyter笔记本中运行下面的代码时,我得到了一张红色的世界地图。
这些国家之间有很好的白线。有没有办法策划世界,以便所有国家都是稳固的,而且两者之间没有界线?
我问,因为我的真实世界用例是一个精细的网格,其行为就像世界地图一样:每个网格形状都有一个很好的轮廓,我不想在图中。 (更新,因为有人问:网格形状不会有相同的填充颜色。
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')
对于网格示例,网格文件位于https://opendata-esri-de.opendata.arcgis.com/datasets/3c1f46241cbb4b669e18b002e4893711_0显示问题的简化示例。
sf = 'Hexagone_125_km/Hexagone_125_km.shp'
shp = gpd.read_file(sf)
shp.crs = {'init': 'epsg:4326'}
shp['sum'] = 1 # for example, fill sum with something
shp.plot(figsize=(20,20), column='sum', cmap='gnuplot', alpha=1, legend=True)
白线是由于抗锯齿。这通常会使视觉更加平滑,但会在不同形状之间产生白线。你可以通过关闭anialiasing
antialiased=False
这具有不可避免的缺点,即情节看起来像素化。
另一种方法是使贴片具有一定的线宽边缘。边缘应该与面部颜色相同,所以
edgecolor="face", linewidth=0.4
将是一个选择。这消除了白线,但引入了轻微的“灼热”效果(你会注意到主要看印度尼西亚或日本等岛屿)。这将是更明显的,功能越小,因此它可能与显示hexbin图无关。尽管如此,使用线宽播放可能会进一步改善结果。
复制代码:
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()
以上是关于Geopandas和Matplotlib,我如何绘制没有任何形状的轮廓?的主要内容,如果未能解决你的问题,请参考以下文章
matplotlib+cartopy+geopandas,实现专业地图可视化!
matplotlib+cartopy+geopandas,实现专业地图可视化!
matplotlib+cartopy+geopandas,实现专业地图可视化!
matplotlib+cartopy+geopandas,实现专业地图可视化!