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

在同一坐标轴绘制多组带回归线的分组散点图

散点图(带分组颜色、标签及分年份回归线)实现方案

Excel 实现步骤

1. 数据预处理

  • 保留原数据结构(Location/Year/A/B),可新增辅助列 Label,公式为 =A2&" "&B2(假设Location在A列,Year在B列),用于后续点的标注。
  • 单独整理1990年和2020年的子集:
    • 1990子集:筛选Year=1990的所有A、B数据
    • 2020子集:筛选Year=2020的所有A、B数据

2. 创建分组散点图

  • 选中所有A、B列数据,点击「插入」>「散点图」>「仅带数据标记的散点图」。
  • 右键图表>「选择数据」,逐个添加每个国家的系列:
    • 点击「添加」,系列名称选择对应国家的Location单元格,X值选择该国家的两个A值单元格,Y值选择对应两个B值单元格。
    • 重复操作完成所有国家的系列添加,此时每个国家的两个数据点会自动使用不同颜色(可手动调整颜色方案)。

3. 添加数据标签

  • 选中任意系列,点击「图表元素」>「数据标签」>「更多选项」。
  • 在「标签选项」中勾选「单元格中的值」,选择对应国家的Label列单元格,取消勾选默认的Y值,完成该系列的标签添加。
  • 重复操作给所有系列添加标签。

4. 添加分年份回归线

  • 右键图表>「选择数据」>「添加」,创建1990年数据系列:
    • 系列名称填「1990回归线」,X值选1990子集的A列,Y值选1990子集的B列,点击确定。
  • 选中这个新系列,点击「图表元素」>「趋势线」>「线性」,右键趋势线>「设置趋势线格式」:
    • 勾选「显示公式」和「显示R平方值」,然后将该系列的「数据标记」设为「无」(隐藏原始点)。
  • 重复上述步骤,添加2020年的回归线系列,完成后两条回归线会显示在同一坐标轴上。

Python(Matplotlib+Seaborn)实现方案

如果Excel操作繁琐,可使用Python快速实现,代码示例如下:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 读取数据(可替换为你的数据源路径)
data = pd.DataFrame({
    'Location': ['Afghanistan']*2 + ['Albania']*2 + ['Algeria']*2 + ['Angola']*2 + ['Antigua and Barbuda']*2 + ['Argentina']*2,
    'Year': [1990,2020]*6,
    'A': [48.3973,65.432,76.4334,79.6756,68.5167,75.9125,82.6756,83.1922,73.6497,80.7452,75.9699,81.3155],
    'B': [1377.85863,620.40751,32.87494,8.27645,205.81979,77.69479,1101.50579,221.90649,58.0267,21.24795,87.81427,44.90008]
})

plt.figure(figsize=(10,6))

# 绘制分组散点图,每个国家一组颜色,年份用标记区分
sns.scatterplot(data=data, x='A', y='B', hue='Location', style='Year', s=100)

# 添加1990年回归线
sns.regplot(data=data[data['Year']==1990], x='A', y='B', scatter=False, color='darkred', label='1990 回归线')
# 添加2020年回归线
sns.regplot(data=data[data['Year']==2020], x='A', y='B', scatter=False, color='darkblue', label='2020 回归线')

# 添加数据标签
for idx, row in data.iterrows():
    plt.text(row['A']+0.5, row['B'], f"{row['Location']} {row['Year']}", fontsize=8)

plt.legend(bbox_to_anchor=(1.05,1), loc='upper left')
plt.xlabel('A')
plt.ylabel('B')
plt.title('带分组颜色与分年份回归线的散点图')
plt.tight_layout()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 01:06:05