在Google Colab中使用Geopandas.plot()可视化伊朗事故GIS数据遇阻求助
伊朗事故GIS数据可视化问题解决建议
先修正代码里的语法错误
你当前代码存在两处明显语法问题,这是导致可视化异常的直接原因:
points_from_xy参数格式错误:代码里的gpd.points_from_xy(df.longitude)و df.latitude))混入了非英文符号,还多了一个右括号。修正为:gdf = gpd.GeoDataFrame(df, geometry=gpd.points_from_xy(df.longitude, df.latitude))- 列赋值语法错误:
gdf['death_count']] = gdf[['death_count']].fillna(value=0)多了一个右方括号,修正为:gdf['death_count'] = gdf['death_count'].fillna(0)
修正后的完整基础代码
import pandas as pd import matplotlib.pyplot as plt import geopandas as gpd # 读取数据 df = pd.read_excel("/content/accidents98.xlsx") # 转换为GeoDataFrame gdf = gpd.GeoDataFrame(df, geometry=gpd.points_from_xy(df.longitude, df.latitude)) # 填充死亡人数的缺失值 gdf['death_count'] = gdf['death_count'].fillna(0) # 创建绘图画布 fig, ax = plt.subplots(1, figsize=(20, 20)) ax.axis('off') ax.set_title('伊朗交通事故分布', fontdict={'fontsize': '15', 'fontweight' : '3'}) # 绘制事故点,优化点样式提升可读性 gdf.plot(column='death_count', cmap='RdYlGn_r', # 反转配色,死亡人数越多颜色越深 markersize=gdf['death_count']*10 + 5, # 按死亡人数动态调整点大小 alpha=0.7, # 增加透明度避免点重叠 ax=ax, legend=True) plt.show()
针对当前模糊可视化的优化方案
你目前的输出没有地理参考,看起来只是一片点,建议添加伊朗边界底图来让数据更有地理意义:
# 加载世界地图数据,提取伊朗边界 world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres')) iran = world[world.name == 'Iran'] # 先绘制伊朗边界底图 iran.plot(ax=ax, color='lightgray', edgecolor='black') # 再绘制事故点数据 gdf.plot(column='death_count', cmap='RdYlGn_r', markersize=gdf['death_count']*10 +5, alpha=0.7, ax=ax, legend=True)
另外可以确认坐标系统:如果你的经纬度数据是WGS84标准(多数GPS数据都是),可以显式设置:
gdf = gdf.set_crs(epsg=4326, allow_override=True)
内容的提问来源于stack exchange,提问作者fatane
相关产品推荐
相关产品推荐

