Geopandas plotting settings
对地理空间数据的可视化,自己经常使用Geopandas这个Python库,但零零散散地写,经常想设置一些具体绘图细节时每次都要从杂乱代码山中去找。今天想要修改绘图颜色条的文字标签,又是找了半天。索性趁此机会总结一下Geopandas库的绘图代码,包含自己曾经写过的、文档和论坛中看到的。参考链接置于该文最后,有需要请自行查阅。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import geopandas as gpd
gdf = gpd.read_file()
### 基本绘图代码
# 这是gpd绘图的最基本函数,所有参数均在函数说明中已经提供
gdf.plot(column, legend, cmap, scheme, legend_kwds)
### 修改图例细节
# 由于自己需求主要是对图例修改,所以主要先介绍该部分代码
# 不设置schemed的colorbar设置
gdf.plot(column,
legend=True,
vmax, vmin,
legend_kwds={'shrink':0.5, # colorbar缩放
'loc':lower left, # location
'ticks':vmin, vmax,
'format':mticker.FixedFormatter(['Low','High'])}) # 设置对应ticks的文字标签
# 也可以从该图中读取colorbar单独设置
ax = gdf.plot(column, legend=True)
cbr = fig.axes[1]
cbr.tick_params(labelsize) # 修改cbr的字体大小
# 还可以自己创建一个colorbar
vmin = gdf[column].min()
vmax = gdf[column].max()
cax = fig.add_axes([0.55, 0.14, 0.4, 0.02]) # 左侧边界、底部边界、宽度和高度
sm = plt.cm.ScalarMappable(cmap, norm=plt.Normalize(vmin=vmin, vmax=vmax))
cbr = fig.colorbar(sm, cax=cax, orientation='horizontal')
cbr.ax.tick_params(labelsize) # 设置标签文本字体大小
cbr.outline.set_linewidth(0) # 设置cbr的边框宽度
# 设置schemed的图例设置
ax = gdf.plot(column, scheme='Naturalbreaks', legend=True)
leg1 = ax.get_legend()
for ea in leg1.legendHandles:
ea.set_marker('s') # 图形形状
ea.set_markeredgecolor('k') # 边颜色
ea.set_markeredgewidth(0.5) # 边线宽
# 也可以自行导入线、矩形作图例
import matplotlib.lines as mlines
import matplotlib.patches as mpatches
ax = gdf.plot(column, scheme='Naturalbreaks', k=5, legend=True)
labels = [t.get_text() for t in ax.get_legend().get_texts()] # 获取图例中的文本
LegendElement = [mlines.Line2D([0],[0],lw,color,label) for i in range(5)] # 为文本设置线形状、线宽和颜色,5是分类数量k
legend = ax.legend(handles=LegendElement, loc, title, fontsize, title_fontsize, frameon, shadow)
legend.get_title().set_fontweight('bold') # 标题设置字体粗度
参考:
https://gis.stackexchange.com/questions/378416/how-to-change-the-font-size-of-the-color-bar-of-a-geopandas-choropleth-plot
https://www.5axxw.com/questions/content/nmrngc