该可视化作品展示了中国境内的所有河流。图中根据各河流所属的主干流为其赋予了不同的颜色,并依据其流域面积的大小设定了不同的线宽。
世界河流数据来源于HydroRIVERS数据库。我们利用从国家基础地理信息中心(NGCC)获取的国界线数据,从中筛选出了位于中国境内的河流数据。
# Select the country and get its geometry
country_gdf = gpd.read_file()
country = 'China'
selected_country = country_gdf[(country_gdf['NAME'] == country)]
# Filter out the geometry of the rivers from the world rivers datasets
river_gdf = gpd.read_file(hydrorivers_filepath, mask=selected_country)
接着,依据地理数据框中流域面积列(UPLAND_SKM)的数据,我们创建了一个新的线宽列(width),并根据每条河流的流域面积,为其分配了0.2至1.0之间的线宽值。
original_min = 300
original_max = 30000
target_min = 0.2
target_max = 1.0
scaled = (river_gdf['UPLAND_SKM'] - original_min) / (original_max - original_min)
river_gdf['width'] = scaled.clip(0, 1) * (target_max - target_min) + target_min
river_gdf_final = river_gdf.sort_values(['UPLAND_SKM', 'width'])[
['MAIN_RIV', 'UPLAND_SKM', 'width', 'geometry']]
最后,我们绘制并保存图像。在图中,每条河流都根据其主干流列(MAIN_RIV)的数值,被赋予了相应颜色图谱中的一种颜色。
fig, ax = plt.subplots(figsize=(10, 10))
title = f'Rivers of {country}'
fig.patch.set_facecolor('black')
river_gdf_final.plot(
ax=ax,
categorical=True,
column='MAIN_RIV',
cmap = 'terrain',
linewidth = river_gdf_final['width']
)
ax.set_axis_off()
plt.tight_layout()
ax.set_title(title, color='white', fontsize=20)
plt.savefig('Rivers in China.jpg', dpi = 300)
plt.show()
最终的可视化成果如下所示:
