You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:36:08