pairplot来自seaborn 的函数允许在数据集中绘制成对关系.
根据文档(突出显示添加):
默认情况下,此函数将创建一个Axes网格,以便数据中的每个变量将在y轴上跨单个行共享,并在x轴上跨单个列共享.对角轴的处理方式不同,绘制一个图表以显示该列中变量的数据的单变量分布.
还可以显示变量的子集或在行和列上绘制不同的变量.
我只能找到一个为行和列分组不同变量的例子,这里(它是与PairGrid和pairplot()部分的Plotting成对关系下的第6个图).正如您所看到的,它正在针对相同的单个因变量(y_vars)绘制许多自变量(x_vars),结果非常好.
我正在尝试对许多依赖变量绘制一个单独的自变量.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
ages = np.random.gamma(6,3, size=50)
data = pd.DataFrame({"age": ages,
"weight": 80*ages**2/(ages**2+10**2)*np.random.normal(1,0.2,size=ages.shape),
"height": 1.80*ages**5/(ages**5+12**5)*np.random.normal(1,0.2,size=ages.shape),
"happiness": (1-ages*0.01*np.random.normal(1,0.3,size=ages.shape))})
pp = sns.pairplot(data=data,
x_vars=['age'],
y_vars=['weight', 'height', 'happiness'])
Run Code Online (Sandbox Code Playgroud)
问题是子图被垂直排列,我找不到改变它的方法.
我知道那时平铺结构不会那么整洁,因为Y轴应该在每个子图上标记.另外,我知道我可以用这样的东西手工制作这些图:
fig, axes = plt.subplots(ncols=3)
for i, yvar in enumerate(['weight', 'height', 'happiness']):
axes[i].scatter(data['age'],data[yvar])
Run Code Online (Sandbox Code Playgroud)
不过,我正在学习使用seaborn,我觉得界面非常方便,所以我想知道是否有办法.此外,这个例子非常简单,但对于更复杂的数据集,seaborn会为你提供更多的东西,这会使raw-matplotlib方法变得更加复杂得多(色调,开始)
Mar*_*ieJ 21
您可以通过交换传递给x_vars和y_vars参数的变量名来实现您正在寻找的内容.所以重新访问代码的sns.pairplot部分:
pp = sns.pairplot(data=data,
y_vars=['age'],
x_vars=['weight', 'height', 'happiness'])
Run Code Online (Sandbox Code Playgroud)
请注意,我在这里所做的只是交换x_vars for y_vars.现在应该水平显示这些图:
现在,x轴对于每个绘图都是唯一的,其中共同的y轴由年龄列确定.