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

寻求可复用的Python美国6区域自定义Choropleth地图实现方案

美国6区域Choropleth地图可复用实现方案

以下是两种可直接复用的实现方案,均能满足「填入区域总数+颜色分级」的需求:

方案1:用Plotly Express快速生成交互式地图

Plotly适合做交互式可视化,代码简洁,颜色分级配置灵活,支持hover显示详情。

步骤&代码

  1. 安装依赖:
pip install plotly pandas
  1. 可复用代码:
import plotly.express as px
import pandas as pd

# 定义美国6区域的州映射(标准划分,可按需调整)
region_state_map = {
    "新英格兰": ["ME", "NH", "VT", "MA", "RI", "CT"],
    "中大西洋": ["NY", "NJ", "PA"],
    "中西部": ["OH", "IN", "IL", "MI", "WI", "MN", "IA", "MO", "ND", "SD", "NE", "KS"],
    "南部": ["DE", "MD", "DC", "VA", "WV", "NC", "SC", "GA", "FL", "KY", "TN", "AL", "MS", "AR", "LA", "OK", "TX"],
    "西南部": ["AZ", "NM"],
    "西部": ["MT", "ID", "WY", "CO", "WA", "OR", "CA", "NV", "UT"]
}

# 转换为州-区域映射,方便关联数据
state_to_region = {}
for region, states in region_state_map.items():
    for state in states:
        state_to_region[state] = region

# 替换为你的实际区域总数数据
region_data = pd.DataFrame({
    "区域": ["新英格兰", "中大西洋", "中西部", "南部", "西南部", "西部"],
    "总数": [1200, 3500, 2800, 4200, 900, 2100]
})

# 关联州与区域数据
state_df = pd.DataFrame({"state": list(state_to_region.keys())})
state_df["区域"] = state_df["state"].map(state_to_region)
state_df = state_df.merge(region_data, on="区域", how="left")

# 生成Choropleth地图
fig = px.choropleth(
    state_df,
    locations="state",
    locationmode="USA-states",
    color="总数",
    color_continuous_scale="Blues",  # 可替换为Reds/Greens等色阶
    scope="usa",
    labels={"总数": "区域总数"},
    hover_data=["区域", "总数"]
)

# 自定义颜色分级区间(可选)
fig.update_layout(coloraxis_colorbar=dict(
    title="总数",
    tickvals=[900, 2000, 3000, 4200],
    ticktext=["低", "中", "高", "极高"]
))

fig.show()

方案2:用GeoPandas生成静态地图

适合需要导出高清静态图的场景,可精细控制地图样式与分级逻辑。

步骤&代码

  1. 安装依赖:
pip install geopandas matplotlib mapclassify
  1. 可复用代码:
import geopandas as gpd
import matplotlib.pyplot as plt
import mapclassify

# 加载美国州级地理数据
us_states = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres')).query("iso_a3 == 'USA'")
us_states = us_states.to_crs("EPSG:4326")

# 定义6区域映射(同上,可按需调整)
region_state_map = {
    "新英格兰": ["Maine", "New Hampshire", "Vermont", "Massachusetts", "Rhode Island", "Connecticut"],
    "中大西洋": ["New York", "New Jersey", "Pennsylvania"],
    "中西部": ["Ohio", "Indiana", "Illinois", "Michigan", "Wisconsin", "Minnesota", "Iowa", "Missouri", "North Dakota", "South Dakota", "Nebraska", "Kansas"],
    "南部": ["Delaware", "Maryland", "District of Columbia", "Virginia", "West Virginia", "North Carolina", "South Carolina", "Georgia", "Florida", "Kentucky", "Tennessee", "Alabama", "Mississippi", "Arkansas", "Louisiana", "Oklahoma", "Texas"],
    "西南部": ["Arizona", "New Mexico"],
    "西部": ["Montana", "Idaho", "Wyoming", "Colorado", "Washington", "Oregon", "California", "Nevada", "Utah"]
}

# 关联区域到州数据
us_states["区域"] = us_states["name"].map({state: region for region, states in region_state_map.items() for state in states})

# 替换为你的实际区域总数数据
region_data = {
    "新英格兰": 1200,
    "中大西洋": 3500,
    "中西部": 2800,
    "南部": 4200,
    "西南部": 900,
    "西部": 2100
}
us_states["总数"] = us_states["区域"].map(region_data)

# 按分位数做颜色分级(也可改用equal_interval等方法)
classifier = mapclassify.Quantiles(us_states["总数"], k=4)
us_states["等级"] = classifier.yb

# 绘制地图
fig, ax = plt.subplots(1, 1, figsize=(12, 8))
us_states.plot(column="总数", cmap="Blues", scheme="quantiles", k=4, legend=True, ax=ax,
               legend_kwds={"loc": "lower left", "title": "区域总数"})
ax.set_title("美国6区域总数分级地图")
ax.axis('off')

plt.show()

关键调整点

  • 可修改region_state_map中的州列表,匹配你需要的6区域划分
  • 颜色方案可替换为Matplotlib/Plotly支持的任意色阶(如viridis、Reds)
  • 颜色分级逻辑:Plotly通过tickvals自定义区间,GeoPandas通过scheme参数选择分级方法(分位数/等距等)

内容的提问来源于stack exchange,提问作者kvsider

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 05:29:58