python - 使用 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 轴在每个示例中都是单列
提前致谢,
解决方案
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)
推荐阅读
- angular - Angular-slickgrid custum Formatter - 引导 ngbTooltip 不起作用
- chart.js - 当父母的高度为 200px 时,chartjs 不跟随高度
- javascript - 加载特定网页时点击另一个页面
- thymeleaf - 在java类上声明键时检索键的值
- python - 嵌套中的Python棉花糖参数
- twitter - 机器学习算法的结果有何不同?
- jsf - 多个会话的屏幕冻结
- python - 如何使用 jinja 创建文本表单?
- node.js - 为什么我的 lambda 函数没有按预期工作?
- csv - 使用 apache nifi 使用预定义文件将列添加到 csv