使用Python在加利福尼亚州地图绘制指定城市点位的代码调整问题
代码调整方案
你当前使用的naturalearth_lowres是国家级边界数据集,仅包含国家维度的地理边界,没有美国的州级行政边界数据,所以无法直接筛选出加利福尼亚州范围。你可以选择以下两种方案调整:
方案1:直接限定坐标轴范围(快速实现,无需额外加载数据)
不需要改动原有数据加载逻辑,仅需在绘图部分添加坐标轴范围限制即可,代码修改如下:
!pip install geopandas import geopandas as gpd import matplotlib.pyplot as plt import pandas as pd from shapely.geometry import Point df = pd.DataFrame({ 'Latitude': [39.8938333, 40.363, 35.7758333, 33.8313333, 40.2705], 'Longitude': [-123.4245, -124.2553333, -121.3043333, -118.2636667, -124.3813333] }) df["Coordinates"] = list(zip(df.Longitude, df.Latitude)) df["Coordinates"] = df["Coordinates"].apply(Point) gdf = gpd.GeoDataFrame(df, geometry="Coordinates") world = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres")) world = world.set_index("iso_a3") fig, gax = plt.subplots(figsize=(10,10)) # 只绘制美国本土区域作为底图 world.query("name == 'United States of America'").plot(ax = gax, edgecolor='black', color='white') gdf.plot(ax=gax, color='red', alpha = 0.5) # 新增:限定加州的经纬度范围 gax.set_xlim([-125, -114]) gax.set_ylim([32, 42]) gax.set_xlabel('经度') gax.set_ylabel('纬度') gax.set_title('加利福尼亚州点位分布') gax.spines['top'].set_visible(False) gax.spines['right'].set_visible(False) plt.show()
方案2:加载州级边界绘制完整加州地图(显示州边界,效果更标准)
如果需要显示清晰的加州行政边界,你可以先下载美国州级GeoJSON数据到本地,再按如下逻辑修改:
# 前面的点位数据处理逻辑和方案1一致,仅修改底图加载部分即可: # 读取本地存储的美国州级边界文件 us_states = gpd.read_file("本地存储路径/us-states.geojson") # 筛选出加利福尼亚州 california = us_states[us_states["name"] == "California"] fig, gax = plt.subplots(figsize=(10,10)) # 仅绘制加州边界作为底图 california.plot(ax = gax, edgecolor='black', color='white') gdf.plot(ax=gax, color='red', alpha = 0.5) gax.set_xlabel('经度') gax.set_ylabel('纬度') gax.set_title('加利福尼亚州点位分布') gax.spines['top'].set_visible(False) gax.spines['right'].set_visible(False) plt.show()
内容的提问来源于stack exchange,提问作者Thiziri
相关产品推荐
相关产品推荐

