python - 如何使用 seaborn 为数据框中的多列绘制一个线性回归散点图?
问题描述
假设我有一个df
索引为 0 到 10 的数据框,以及 4 列数据、c_1
、c_2
、c_3
和c_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_2
并c_4
分别作为 y 值。我怎样才能做到这一点?感谢您的帮助,让我知道我是否可以更清楚地说明这一点。
解决方案
大多数 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
不同的颜色以避免拟合线仅适用于散点图中的某些数据点的印象。
推荐阅读
- node.js - 为什么我不能在 Mongo 管道匹配中使用 $nin、$exists 等?
- python - API Get 方法以 JSON 格式获取主题标签计数大于 MongoDB 中的所有推文
- javascript - 为 object.value 填充以返回真实的断言
- excel - 如果语句仅在选择在特定列内时执行操作
- sql - Oracle 没有从比较到日期的结果
- terraform - 处理 Terraform AMI 看起来返回一个空列表
- r - 根据数据框中不同行的变量值在 R 中创建新变量
- autodesk-forge - Forge API “Urn 格式不正确。”
- python - 如何在字符串中累积一系列数字并将它们转换为一个数字?
- netbeans - 窗口菜单下的服务不起作用