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

Python中用Matplotlib修改Choropleth地图的色条及图表属性

解决Choropleth地图的三个问题及优化建议

1. 将图例刻度减少至5个

你当前设置k=4会生成4个数据区间,对应5个刻度(两端+中间3个),但matplotlib可能自动生成多余刻度。可以通过手动指定刻度值实现需求:

  • 先提取数据的极值和分位数作为刻度点
  • 绘制后获取颜色条对象,设置自定义刻度

修改后的代码片段:

# 提取房价数据的关键值作为刻度
price_data = gdf['Median_House_Price__2013']
min_val = price_data.min()
max_val = price_data.max()
q25 = price_data.quantile(0.25)
median = price_data.median()
q75 = price_data.quantile(0.75)

# 绘制地图并获取颜色条对象
cbar = gdf.plot('Median_House_Price__2013', 
                ax=ax,
                figsize=[10,5],
                legend=True,
                cax=cax,
                k=4,
                cmap='RdPu',
                legend_kwds={'label': "House Prices", "orientation": "horizontal"})

# 设置5个自定义刻度
cbar.set_ticks([min_val, q25, median, q75, max_val])
# 可选:格式化刻度为易读格式(如带英镑符号和千位分隔符)
cbar.set_ticklabels([f'£{x:,.0f}' for x in [min_val, q25, median, q75, max_val]])

2. 调整标题位置与字体

当前plt.title的位置可能被绘图覆盖,改用ax.set_title将标题固定在顶部,并指定目标字体:

  • 通过y参数调整标题位置,避免被地图遮挡
  • 指定fontfamily='Gill Sans MT',若系统无该字体,可替换为sans-serif等兼容字体

修改后的代码:

# 替换原plt.title代码
ax.set_title("Median House Prices of London, 2013", 
             loc='center', 
             y=1.05,  # 向上偏移确保在顶部
             fontfamily='Gill Sans MT',
             fontsize=14)

3. 额外优化建议

  • 添加行政边界高亮:为伦敦行政区添加黑色细边界,增强区域辨识度:
    gdf.boundary.plot(ax=ax, color='black', linewidth=0.5)
    
  • 优化颜色映射:若房价数据偏态,使用对数刻度映射,让低价值区间差异更明显:
    from matplotlib.colors import LogNorm
    # 绘制时替换k参数为norm参数
    gdf.plot('Median_House_Price__2013', 
             ...,
             norm=LogNorm(vmin=min_val, vmax=max_val),
             ...)
    
  • 添加数据来源标注:在图的角落标注数据源,提升专业性:
    ax.text(0.01, 0.01, 'Data Source: [你的数据源名称]', 
            transform=ax.transAxes, 
            fontsize=8,
            fontfamily='Gill Sans MT')
    
  • 调整画布尺寸:在创建画布时设置更大尺寸,避免绘图压缩变形:
    fig, ax = plt.subplots(1, 1, figsize=[12,8])
    

完整修改后的代码

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
from matplotlib.colors import LogNorm  # 可选,用于对数刻度

# 创建画布
fig, ax = plt.subplots(1, 1, figsize=[12,8])
divider = make_axes_locatable(ax)
cax = divider.append_axes("bottom", size="5%", pad=0.1)

# 设置标题
ax.set_title("Median House Prices of London, 2013", 
             loc='center', 
             y=1.05,
             fontfamily='Gill Sans MT',
             fontsize=14)

# 提取房价数据关键值
price_data = gdf['Median_House_Price__2013']
min_val = price_data.min()
max_val = price_data.max()
q25 = price_data.quantile(0.25)
median = price_data.median()
q75 = price_data.quantile(0.75)

# 绘制地图
cbar = gdf.plot('Median_House_Price__2013', 
                ax=ax,
                legend=True,
                cax=cax,
                k=4,
                cmap='RdPu',
                legend_kwds={'label': "House Prices", "orientation": "horizontal"})

# 设置自定义刻度及格式化标签
cbar.set_ticks([min_val, q25, median, q75, max_val])
cbar.set_ticklabels([f'£{x:,.0f}' for x in [min_val, q25, median, q75, max_val]])

# 添加行政区边界高亮
gdf.boundary.plot(ax=ax, color='black', linewidth=0.5)

# 添加数据来源标注
ax.text(0.01, 0.01, 'Data Source: [请填入你的数据源]', 
        transform=ax.transAxes, 
        fontsize=8,
        fontfamily='Gill Sans MT')

# 关闭坐标轴
ax.set_axis_off()

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:53:13