首页 > 解决方案 > 如何使用 seaborn 为数据框中的多列绘制一个线性回归散点图?

问题描述

假设我有一个df索引为 0 到 10 的数据框,以及 4 列数据、c_1c_2c_3c_4。当我按如下方式绘制时:

sns.regplot(data=df, x='c_1', y='c_2')
sns.regplot(data=df, x='c_3', y='c_4') 

我得到一张图,上面有两个回归散点图。但是,相反,我想要一个只有一个回归散点图的图表,将每个索引保持为 xc_1与y 值c_3配对,c_2c_4分别作为 y 值。我怎样才能做到这一点?感谢您的帮助,让我知道我是否可以更清楚地说明这一点。

标签: pythonpandasdataframeseaborn

解决方案


大多数 seaborn 函数更适用于长格式数据。因此,我们可以重新组织数据并标记您使用代码暗示的类别。然后,我们为所有数据绘制一个正则图,并在两个类别的顶部绘制一个散点图:

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

#generate sample data
import numpy as np
np.random.seed(123)
n = 20
df = pd.DataFrame({"c_1":np.random.random(n), 
                   "c_2":np.zeros(n), 
                   "c_3":2 * np.random.random(n) - .5, 
                   "c_4":np.zeros(n)})
df.c_2 = 2 * df.c_1 - 3 * np.random.random(n)
df.c_4 = 3 * df.c_3 - 2 * np.random.random(n)        

#reformat the data for plotting...
df_plot = df[["c_1", "c_2"]].copy()
df_plot["cat"] = "set1" 
df_temp = df[["c_3", "c_4"]].copy()
df_temp.columns = ["c_1", "c_2"]
df_temp["cat"] = "set2" 
df_plot = df_plot.append(df_temp)

#...and plot
sns.regplot(data=df_plot, x='c_1', y='c_2', scatter=False)
sns.scatterplot(data=df_plot, x="c_1", y="c_2", hue="cat")

plt.show()

样本输出: 在此处输入图像描述

您可能希望赋予regplot不同的颜色以避免拟合线仅适用于散点图中的某些数据点的印象。


推荐阅读