MJi*_*ter 5 python matplotlib seaborn
使用seaborn,我想在一张图中绘制4个不同数组的kde分布。问题是所有数组的长度彼此不同。
mc_means_TP.shape, mc_means_TN.shape, mc_means_FP.shape, mc_means_FN.shape
> ((3640, 1), (3566, 1), (170, 1), (238, 1))
Run Code Online (Sandbox Code Playgroud)
这使得需要一些解决方法,其中我通过共享同一轴将它们全部绘制在一个图中:
import seaborn as sns
fig, ax = plt.subplots()
sns.kdeplot(data=mc_means_TP, ax=ax, color='red', fill=True)
sns.kdeplot(data=mc_means_TN, ax=ax, color='green', fill=True)
sns.kdeplot(data=mc_means_FP, ax=ax, color='yellow')
sns.kdeplot(data=mc_means_FN, ax=ax, color='purple')
Run Code Online (Sandbox Code Playgroud)
结果如下:
显然,由于它们共享同一轴,因此不可能对它们进行不同的着色,它们都是蓝色的。
我尝试用 解决这个问题ax.set_prop_cycle(color=['red', 'green', 'blue', 'purple']),但它不起作用,我猜是因为我ax对所有绘图都使用相同的方法。
我想这个问题可以分解为如何在一个图中可视化不同大小的数据数组的分布密度?
Joh*_*anC 10
当使用多维数组时,seaborn 会忽略该color参数,只考虑palette. 您可以提供一个调色板(以覆盖本例中使用的默认蓝色调色板),或者将数组压缩为一维:
import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt
mc_means_TP = np.random.normal(10, 1, size=(3640, 1))
mc_means_TN = np.random.normal(20, 1, size=(3566, 1))
mc_means_FP = np.random.normal(12, 1, size=(170, 1))
mc_means_FN = np.random.normal(18, 1, size=(238, 1))
fig, ax = plt.subplots()
sns.kdeplot(data=mc_means_TP.squeeze(), ax=ax, color='red', fill=True, label='means TP')
sns.kdeplot(data=mc_means_TN.squeeze(), ax=ax, color='green', fill=True, label='means TN')
sns.kdeplot(data=mc_means_FP.squeeze(), ax=ax, color='gold', label='means FP')
sns.kdeplot(data=mc_means_FN.squeeze(), ax=ax, color='purple', label='means FN')
ax.legend(bbox_to_anchor=(1.02, 1.02), loc='upper left')
plt.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12315 次 |
| 最近记录: |