在 seaborn 的一个图中组合 2 个 kde 函数
Combine 2 kde-functions in one plot in seaborn
我有以下代码用于绘制训练和验证数据集的直方图和 kde 函数(核密度估计):
#Plot histograms
import matplotlib.pyplot as plt
import matplotlib
import seaborn as sns
displot_dataTrain=sns.displot(data_train, bins='auto', kde=True)
displot_dataTrain._legend.remove()
plt.ylabel('Count')
plt.xlabel('Training Data')
plt.title("Histogram Training Data")
plt.show()
displot_dataValid =sns.displot(data_valid, bins='auto', kde=True)
displot_dataValid._legend.remove()
plt.ylabel('Count')
plt.xlabel('Validation Data')
plt.title("Histogram Validation Data")
plt.show()
# Try to plot the kde-functions together --> yields an AttributeError
X1 = np.linspace(data_train.min(), data_train.max(), 1000)
X2 = np.linspace(data_valid.min(), data_valid.max(), 1000)
fig, ax = plt.subplots(1,2, figsize=(12,6))
ax[0].plot(X1, displot_dataTest.kde.pdf(X1), label='train')
ax[1].plot(X2, displot_dataValid.kde.pdf(X1), label='valid')
在一个图中绘制直方图和 kde 函数没有问题。现在我想在一个图中使用 2 个 kde 函数,但是在使用发布的代码时,出现以下错误 AttributeError: 'FacetGrid' object has no attribute 'kde'
你知道如何在一个图中组合 2 个 kde 函数(没有直方图)吗?
sns.displot()
returns一个FacetGrid
。这不适用于 ax.plot()
的输入。此外,displot_dataTest.kde.pdf
永远无效。但是,您可以编写 sns.kdeplot(data=data_train, ax=ax[0])
以在第一个子图中创建一个 kdeplot
。见 docs;请注意可用于调整限制的可选参数 cut=
和 clip=
。
如果你只想要一个子图,你可以使用 fig, ax = plt.subplots(1, 1, figsize=(12,6))
并使用 ax=ax
而不是 ax=ax[0]
因为在这种情况下 ax
只是一个子图,而不是一组子图。
以下代码已经使用最新的seaborn版本进行了测试:
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
fig, ax = plt.subplots(figsize=(12, 6))
sns.kdeplot(data=np.random.normal(0.1, 1, 100).cumsum(),
color='crimson', label='train', fill=True, ax=ax)
sns.kdeplot(data=np.random.normal(0.1, 1, 100).cumsum(),
color='limegreen', label='valid', fill=True, ax=ax)
ax.legend()
plt.tight_layout()
plt.show()
我有以下代码用于绘制训练和验证数据集的直方图和 kde 函数(核密度估计):
#Plot histograms
import matplotlib.pyplot as plt
import matplotlib
import seaborn as sns
displot_dataTrain=sns.displot(data_train, bins='auto', kde=True)
displot_dataTrain._legend.remove()
plt.ylabel('Count')
plt.xlabel('Training Data')
plt.title("Histogram Training Data")
plt.show()
displot_dataValid =sns.displot(data_valid, bins='auto', kde=True)
displot_dataValid._legend.remove()
plt.ylabel('Count')
plt.xlabel('Validation Data')
plt.title("Histogram Validation Data")
plt.show()
# Try to plot the kde-functions together --> yields an AttributeError
X1 = np.linspace(data_train.min(), data_train.max(), 1000)
X2 = np.linspace(data_valid.min(), data_valid.max(), 1000)
fig, ax = plt.subplots(1,2, figsize=(12,6))
ax[0].plot(X1, displot_dataTest.kde.pdf(X1), label='train')
ax[1].plot(X2, displot_dataValid.kde.pdf(X1), label='valid')
在一个图中绘制直方图和 kde 函数没有问题。现在我想在一个图中使用 2 个 kde 函数,但是在使用发布的代码时,出现以下错误 AttributeError: 'FacetGrid' object has no attribute 'kde'
你知道如何在一个图中组合 2 个 kde 函数(没有直方图)吗?
sns.displot()
returns一个FacetGrid
。这不适用于 ax.plot()
的输入。此外,displot_dataTest.kde.pdf
永远无效。但是,您可以编写 sns.kdeplot(data=data_train, ax=ax[0])
以在第一个子图中创建一个 kdeplot
。见 docs;请注意可用于调整限制的可选参数 cut=
和 clip=
。
如果你只想要一个子图,你可以使用 fig, ax = plt.subplots(1, 1, figsize=(12,6))
并使用 ax=ax
而不是 ax=ax[0]
因为在这种情况下 ax
只是一个子图,而不是一组子图。
以下代码已经使用最新的seaborn版本进行了测试:
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
fig, ax = plt.subplots(figsize=(12, 6))
sns.kdeplot(data=np.random.normal(0.1, 1, 100).cumsum(),
color='crimson', label='train', fill=True, ax=ax)
sns.kdeplot(data=np.random.normal(0.1, 1, 100).cumsum(),
color='limegreen', label='valid', fill=True, ax=ax)
ax.legend()
plt.tight_layout()
plt.show()