首页 > 解决方案 > 使用 plotly 或 seaborn 进行多列可视化

问题描述

我有工厂的数据及其在生产过程中的错误代码,如下所示;

PlantID  A  B  C  D
1        0  1  2  4
1        3  0  2  0
3        0  0  0  1
4        0  1  1  5

每行代表生产订单。我想创建一个带有 x 轴 = PlantID 的图形,y 轴是 A、B、C、D 和不同的条形图。通过这种方式我可以看到哪个工厂的 D 错误最多,其中一个图中有 A

我通常使用 plotly 和 seaborn 但我找不到任何解决方案,y 轴在每个示例中都是单列

提前致谢,

标签: pythonplotlydata-visualizationmultiple-columnsseaborn

解决方案


Seaborn喜欢长格式或宽格式的数据

如上所述,当您的数据集具有特定组织时,seaborn 将是最强大的。这种格式也称为“长格式”或“整洁”数据,Hadley Wickham 在这篇学术论文中详细描述了这种格式。规则可以简单地说:

  • 每个变量都是一列
  • 每个观察都是一行

以下代码将原始数据帧转换为长格式数据帧。通过将列堆叠在一起,使每一行对应于一个记录,该记录指定列名和值(计数)。

import numpy as np
import pandas as pd
import seaborn as sns
# Generating some data
N = 20
PlantID = np.random.choice(np.arange(1, 4), size=N, replace=True)
data = dict((k, np.random.randint(0, 50, size=N)) for k in ['A', 'B', 'C', 'D'])
df = pd.DataFrame(data, index=PlantID)
df.index = df.index.set_names('PlantID')
# Stacking the columns and resetting the index to create a longformat. (And some renaming)
df = df.stack().reset_index().rename({'level_1' : 'column', 0: 'count'},axis=1)
sns.barplot(x='PlantID', y='count', hue='column', data=df)

条形图结果


推荐阅读