在同一轴上绘制具有回归线的多个分组散点图

问题描述 投票:0回答:1

我正在尝试创建一个数据可视化,它本质上是一个散点图。

数据片段如下所示:

地点 年份 A B
阿富汗 1990 48.3973 1377.85863
阿富汗 2020 65.432 620.40751
阿尔巴尼亚 1990 76.4334 32.87494
阿尔巴尼亚 2020 79.6756 8.27645
阿尔及利亚 1990 68.5167 205.81979
阿尔及利亚 2020 75.9125 77.69479
安哥拉 1990 82.6756 1101.50579
安哥拉 2020 83.1922 221.90649
安提瓜和巴布达 1990 73.6497 58.0267
安提瓜和巴布达 2020 80.7452 21.24795
阿根廷 1990 75.9699 87.81427
阿根廷 2020 81.3155 44.90008

即每个国家都有一对积分。我想绘制 A 对 B 的图,然后理想情况下将每个国家/地区的点对(在完美世界中)采用不同的颜色(理想情况下带有标签,显示它们是哪个国家/地区以及哪一年)。

然后我想绘制所有 1990 个点的回归线,以及 2020 个点的同一轴上的回归线。

在 Excel 中是理想的选择,但如果更合适的话我可能会使用其他东西。任何帮助将非常感激。

excel regression scatter-plot
1个回答
0
投票

既然你对其他选择持开放态度,我想我可以用 python 回答你的问题,如果可以的话。以下是如何使用seaborn来实现这一点,seaborn是一个很好的数据可视化软件包,具有许多用于统计和机器学习的有用功能。

首先,为了让你开始使用 python,我推荐 anaconda,因为它们的安装已经包含了大量相互兼容的好包。

熟悉后,您可以导入以下包作为示例:

import seaborn as sns # nice plotting
%matplotlib notebook
import matplotlib.pyplot as plt # package also for plottingm the above line is a magic command to define the backend
import pandas as pd # for data handling

我暂时定义了没有阿富汗的数据,因为它似乎是一个对回归模型产生负面影响的不良异常值,我将在最后展示。目前,以下是没有 AFG 的结果:

data = {
    'Location': ['Albania', 'Albania', 'Algeria', 'Algeria', 'Angola', 'Angola', 'Antigua and Barbuda', 'Antigua and Barbuda', 'Argentina', 'Argentina'],
    'Year': [1990, 2020, 1990, 2020, 1990, 2020, 1990, 2020, 1990, 2020],
    'A': [76.4334, 79.6756, 68.5167, 75.9125, 82.6756, 83.1922, 73.6497, 80.7452, 75.9699, 81.3155],
    'B': [32.87494, 8.27645, 205.81979, 77.69479, 1101.50579, 221.90649, 58.0267, 21.24795, 87.81427, 44.90008]
} # define the data without afghanistan
df = pd.DataFrame(data) # generate dataframe
plt.figure() # figure
sns.scatterplot(data=df, x='A', y='B', hue='Location', style='Year') # scatter plot the data, changing style for year and colour with country
sns.regplot(data=df[df['Year'] == 1990], x='A', y='B', scatter=False, color='blue') # plot model for 1990
sns.regplot(data=df[df['Year'] == 2020], x='A', y='B', scatter=False, color='orange') # plot model for 2000
plt.grid() # add grid
plt.legend(loc = "lower right", ncols = 3) # and legend

这导致了以下情节:

当然,如果您有更好的方式获取数据,您可以使用

pd.read_excel()
pd.read_csv()
从保存的文件中获取数据。

在这里查看阿富汗的数据:

如您所见,回归主要捕获 AFG 与其他组之间发现的方差。例如,可以通过使用稳健回归来解决。

我希望这个答案能鼓励你开始学习 python 并这样做。优点是现在有很多资源可以入门甚至掌握 python。另外,chatGPT 可以帮助您入门(无论如何您都会回来抱怨它;))

© www.soinside.com 2019 - 2024. All rights reserved.