Pet*_*rBe 4 python matplotlib 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')
Run Code Online (Sandbox Code Playgroud)
在一个图中绘制直方图和 kde 函数可以正常工作。现在我想在一个图中包含 2 个 kde 函数,但是当使用发布的代码时,我收到以下错误AttributeError: 'FacetGrid' object has no attribute 'kde'
你知道如何将 2 个 kde 函数组合到一个图中(没有直方图)吗?
sns.displot()返回一个FacetGrid. 这不能作为 的输入ax.plot()。而且,displot_dataTest.kde.pdf永远无效。但是,您可以编写在第一个子图内sns.kdeplot(data=data_train, ax=ax[0])创建一个子图。kdeplot请参阅文档;请注意可选参数cut=,clip=可用于调整限制。
如果您只想要一个子图,则可以使用fig, ax = plt.subplots(1, 1, figsize=(12,6))and useax=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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6314 次 |
| 最近记录: |