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 轴将是每个数字在该特定索引中出现的频率。例如,
颜色
- 红色 (0)
- 蓝色 (1)
- 绿色 (2)
- 紫色 (3)
对于给定的颜色:
- 在 x 轴值为 7 处应该有一个长度为 6 的红色条
- 在 x 轴值为 7 处会有一个长度为 6 的蓝色条(堆叠在红色上)
- 在 x 轴值为 57 处会有一个长度为 4 的绿色条
- 在 x 轴值为 52 处会有一个长度为 2 的绿色条
- 在 x 轴值为 192 处会有一个长度为 6 的绿色条
如何使用 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)
我有一个如下所示的元组列表:
[(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 轴将是每个数字在该特定索引中出现的频率。例如,
颜色
- 红色 (0)
- 蓝色 (1)
- 绿色 (2)
- 紫色 (3)
对于给定的颜色:
- 在 x 轴值为 7 处应该有一个长度为 6 的红色条
- 在 x 轴值为 7 处会有一个长度为 6 的蓝色条(堆叠在红色上)
- 在 x 轴值为 57 处会有一个长度为 4 的绿色条
- 在 x 轴值为 52 处会有一个长度为 2 的绿色条
- 在 x 轴值为 192 处会有一个长度为 6 的绿色条
如何使用 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)