Seaborn:从元组列表创建堆叠直方图

Seaborn: create stacked histogram from list of tuples

我有一个如下所示的元组列表:

[(7, 7, 57, 192), (7, 7, 57, 192), (7, 7, 57, 192), (7, 7, 57, 192), (7, 7, 52, 192), (7, 7, 52, 192)]

我想为元组中的所有值创建堆叠直方图。对于这种情况,将有 4 种颜色的直方图条(对应于元组中的每个位置),x 轴将是每个数字在该特定索引中出现的频率。例如,

颜色

对于给定的颜色:

如何使用 seaborn 执行此操作,而无需为 4 个元组位置创建单独的列表或不创建 pandas 数据框?

您可以创建从最后一种颜色循环到第一种颜色的直方图:

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

data = [(7, 7, 57, 192), (7, 7, 57, 192), (7, 7, 57, 192), (7, 7, 57, 192), (7, 7, 52, 192), (7, 7, 52, 192)]
sns.set()
for i, color in enumerate(['red', 'blue', 'green', 'purple'][::-1]):
    sns.histplot([di for d in data for di in d[:4-i]], bins=np.arange(-0.5, 200), color=color)
plt.show()

PS:为了使代码更独立于元组的长度,可以从颜色图中检索颜色:

n = len(data[0])
colors = plt.cm.rainbow(np.linspace(0, 1, n))
for i, color in enumerate(colors):
    sns.histplot([di for d in data for di in d[:n - i]], bins=np.arange(-0.5, 200), color=color)