matplotlib 如何使用seaborn制作一个带有色调的对角直方图?

zvokhttg  于 2023-03-03  发布在  其他
关注(0)|答案(2)|浏览(123)

我试图用直方图对角线做一个散点图的配对图,但是当添加一个色调时,直方图变得无效。
我的代码在色调之前:

import seaborn as sn
sn.pairplot(dropped_data)

输出:

我的代码后添加色调:

sn.pairplot(dropped_data, hue='damage rating')

输出:

我尝试过的:

sn.pairplot(dropped_data, hue='damage rating', diag_kind='hist', kind='scatter')

输出:

正如你所看到的,当使用一个色调,对角线直方图,它去所有奇怪的,变得不正确。我该如何解决这个问题?

hl0ma9xz

hl0ma9xz1#

看起来hue列是连续的并且只包含唯一的值,因为对角线是由kdeplot s组成的,所以当每个kde都是由一个值组成时,对角线是不起作用的。
解决这个问题的一种方法是使用堆叠的histplot。当涉及大量数据时,这可能会很慢。
另一种方法是使色调列离散,例如通过对它们进行舍入。

一个可重复的例子

首先,让我们尝试使用易于重现的数据重现问题:

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

np.random.seed(20220226)
df = pd.DataFrame({f'Sensor {i}': np.random.randn(100) for i in range(1, 4)})
df['damage'] = np.random.rand(100)

sns.pairplot(df, hue="damage")

使用堆叠直方图

sns.pairplot(df, hue="damage", diag_kind='hist', diag_kws={'multiple': 'stack'})

通过舍入使色调列离散:

df['damage'] = (df['damage'] * 5).round() / 5  # round to multiples of 0.2
sns.pairplot(df, hue="damage")

eufgjt7s

eufgjt7s2#

我假设这里的问题是“当色调变量是数值时,如何为散点图而不是对角线绘制色调Map”。

mpg = sns.load_dataset("mpg")
sns.pairplot(mpg, hue="cylinders", diag_kws=dict(hue=None, color=".2"))

相关问题