如何用Matplotlib为英国郡犯罪率vs人口散点图添加郡名标签
为英国郡犯罪率-人口散点图添加郡名标注
以下是用numpy、pandas和matplotlib实现散点图并为每个数据点标注郡名的具体方案:
1. 导入所需库
import numpy as np import pandas as pd import matplotlib.pyplot as plt
2. 加载并预处理数据
假设你的数据存储在CSV文件中,包含county(郡名)、population(人口)、crime_rate(犯罪率)三列:
# 读取数据 df = pd.read_csv('uk_counties_data.csv') # 提取核心数据列 populations = df['population'].values crime_rates = df['crime_rate'].values counties = df['county'].values
3. 绘制散点图并添加标注
用plt.scatter()绘制基础散点图,再通过循环调用plt.annotate()为每个数据点绑定郡名:
# 创建画布,设置合适尺寸 plt.figure(figsize=(12, 8)) # 绘制散点图,设置样式 plt.scatter(populations, crime_rates, color='steelblue', alpha=0.7, edgecolor='white') # 循环为每个点添加标注 for pop, rate, county in zip(populations, crime_rates, counties): # 标注位置偏移,避免覆盖数据点 plt.annotate(county, xy=(pop, rate), xytext=(6, 6), # 文本相对数据点的偏移像素 textcoords='offset points', fontsize=8, color='darkred') # 设置图表基础信息 plt.xlabel('人口', fontsize=10) plt.ylabel('犯罪率', fontsize=10) plt.title('英国各郡犯罪率与人口分布散点图', fontsize=12) # 添加网格辅助观察 plt.grid(True, linestyle='--', alpha=0.5) # 自动调整布局,避免标签被截断 plt.tight_layout() plt.show()
4. 标注优化技巧(可选)
如果数据点密集导致标注重叠,可尝试以下调整:
- 缩小字体大小(比如
fontsize=7) - 给标注添加旋转角度,比如
rotation=30 - 调整
xytext的偏移方向,对不同区域的点设置不同偏移量 - 安装
adjustText库,用adjust_text()函数自动优化标注位置
内容的提问来源于stack exchange,提问作者Lucas Oldrey
相关产品推荐
相关产品推荐

