如何解决通过组合列值在Altair中绘制网格堆积条形图
我想像示例Trellis Stacked Bar Chart那样绘制网格堆积条形图图。
我有这个数据集:
pd.DataFrame({
'storage': ['dev01','dev01','dev02','dev03'],'project': ['omega','alpha','beta','omega','alpha'],'read': [3,114,27,82],'write': [70,45,655,203],'read-write': [313,322,89,90,12]
})
storage project read write read-write
0 dev01 omega 3 70 313
1 dev01 alpha 0 0 322
2 dev01 beta 0 0 45
3 dev02 omega 114 45 89
4 dev02 beta 27 655 90
5 dev03 alpha 82 203 12
我不知道如何指定read
,write
,read-write
列作为altair的颜色/值。
解决方法
您的数据为宽格式,必须转换为长格式才能在Altair编码中使用。有关更多信息,请参见Altair文档中的Long-Form vs. Wide-Form Data。
这可以通过使用pd.melt
修改Pandas中的输入数据来解决,但是使用Altair的Fold Transform在图表规范中进行此重塑通常更方便。例如:
import pandas as pd
import altair as alt
df = pd.DataFrame({
'storage': ['dev01','dev01','dev02','dev03'],'project': ['omega','alpha','beta','omega','alpha'],'read': [3,114,27,82],'write': [70,45,655,203],'read-write': [313,322,89,90,12]
})
alt.Chart(df).transform_fold(
['read','write','read-write'],as_=['mode','value']
).mark_bar().encode(
x='value:Q',y='project:N',column='storage:N',color='mode:N'
).properties(
width=200
)
,
您需要将所需的列melt
插入新列:
# assuming your DataFrame is assigned to `df`
cols_to_melt = ['read','read-write']
cols_to_keep = df.columns.difference(cols_to_melt)
df = df.melt(cols_to_keep,cols_to_melt,'mode')
因此您将获得以下信息:
project storage mode value
0 omega dev01 read 3
1 alpha dev01 read 0
2 beta dev01 read 0
3 omega dev02 read 114
4 beta dev02 read 27
5 alpha dev03 read 82
6 omega dev01 write 70
7 alpha dev01 write 0
8 beta dev01 write 0
9 omega dev02 write 45
10 beta dev02 write 655
11 alpha dev03 write 203
12 omega dev01 read-write 313
13 alpha dev01 read-write 322
14 beta dev01 read-write 45
15 omega dev02 read-write 89
16 beta dev02 read-write 90
17 alpha dev03 read-write 12
然后在替代代码段中,使用color='site'
代替color='mode'
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。