seaborn双角停车场

2024-04-26 12:12:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用两个角的pairplot创建一个pairplot。 使用

import seaborn as sns; sns.set(style="ticks", color_codes=True)
iris = sns.load_dataset("iris")
g = sns.pairplot(iris, hue="species", corner=True)

我得到了网格的一个较低的三角形。 我想做的是在网格的上部(非对角线)放置另一个pairplot,使用不同的色调值

import seaborn as sns; sns.set(style="ticks", color_codes=True)
iris = sns.load_dataset("iris")
iris['species'] = iris['species'].map({'setosa': 0, 
                                   'versicolor': 1, 
                                   'virginica': 2})

sns.pairplot(iris, hue="species", corner=True)
sns.pairplot(iris, hue="petal_length", corner=True)

有办法在上面的三角形上绘图吗?或者加入两个不同的团队

提前谢谢


Tags: importtrueirisstyleasseabornhuecodes
1条回答
网友
1楼 · 发布于 2024-04-26 12:12:43

无法在上面的三角形上绘图。但是,您可以做的是绘制两个图,其中至少一个带有corner=False,然后将下三角形和对角轴从角点图添加到完整图。但是,这只有在两个绘图的pairplot参数相同时才有意义,否则(如示例中所示),轴标签和图例仅对一个三角形有效(除非您手动将第二个图例以及右轴和顶轴添加到上部三角形Suplot,但在这种情况下,从一开始就可以更轻松地滚动)

示例(下三角形和对角线表示iris的奇数行,上三角形表示偶数行):

import matplotlib.pyplot as plt
import seaborn as sns; sns.set(style="ticks", color_codes=True)
iris = sns.load_dataset("iris")

pg1 = sns.pairplot(iris[1::2], hue="species", corner=True)
pg2 = sns.pairplot(iris[::2], hue="species", corner=False, diag_kind=None))

# remove lower triangle and diagonal from figure 2
for ax in pg2.fig.get_axes():
    if ax.get_geometry()[2] in [1,5,6,9,10,11,13,14,15,16]:
        ax.remove()

# add all axes from figure 1 (lower triangle and diagonal) to figure 2
for ax in pg1.fig.get_axes():
    ax.figure = pg2.fig # in the next step we can only add axes from the same figure
    pg2.fig.add_axes(ax)

# close figure 1 which is not needed anymore    
plt.close(pg1.fig)

enter image description here

为了节省一些工作量,查找所有必要索引所需的代码如下:

upper_triangular_list = []

k=10

for i in range(k+1):
    for c in range(i-1):
        upper_triangular_list.append((i-1)*k+c+1)

print(upper_triangular_list)

相关问题 更多 >