Pandas 通过组合列值在Altair中绘制网格堆叠条形图
我想绘制一个网格堆叠条形图,如示例中所示 我有以下数据集:Pandas 通过组合列值在Altair中绘制网格堆叠条形图,pandas,altair,Pandas,Altair,我想绘制一个网格堆叠条形图,如示例中所示 我有以下数据集: pd.DataFrame({ 'storage': ['dev01', 'dev01', 'dev01', 'dev02', 'dev02', 'dev03'], 'project': ['omega', 'alpha', 'beta', 'omega', 'beta', 'alpha'], 'read': [3, 0, 0, 114, 27, 82], 'write': [70, 0, 0,
pd.DataFrame({
'storage': ['dev01', 'dev01', 'dev01', 'dev02', 'dev02', 'dev03'],
'project': ['omega', 'alpha', 'beta', 'omega', 'beta', 'alpha'],
'read': [3, 0, 0, 114, 27, 82],
'write': [70, 0, 0, 45, 655, 203],
'read-write': [313, 322, 45, 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
我搞不懂的是如何将读、写、读写列指定为Altair的颜色/值。您需要将所需列添加到新列中:
# assuming your DataFrame is assigned to `df`
cols_to_melt = ['read', 'write', '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
然后在altair代码段中,使用color='mode'而不是color='site'。您需要将所需的列添加到新列中:
# assuming your DataFrame is assigned to `df`
cols_to_melt = ['read', 'write', '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
然后在altair代码段中,使用color='mode'而不是color='site'。您的数据是宽格式的,必须转换为长格式才能在altair编码中使用。有关更多信息,请参阅Altair文档中的
这可以通过使用修改Pandas中的输入数据来解决,但在图表规范中使用Altair进行这种重塑通常更方便。例如:
作为pd进口熊猫
将牵牛星导入为alt
df=pd.DataFrame{
'存储':['dev01','dev01','dev01','dev02','dev02','dev03'],
'项目':['omega','alpha','beta','omega','beta','alpha'],
“读”:[3,0,0,114,27,82],
“写入”:[70,0,0,45655203],
“读写”:[313322,45,89,90,12]
}
alt.Chartdf.transform\u fold
[“读”、“写”、“读写”],
作为\=['mode','value']
.mark_bar.encode
x='value:Q',
y='project:N',
column='storage:N',
颜色模式:N'
.物业
宽度=200
您的数据是宽格式的,必须转换为长格式才能在Altair编码中使用。有关更多信息,请参阅Altair文档中的
这可以通过使用修改Pandas中的输入数据来解决,但在图表规范中使用Altair进行这种重塑通常更方便。例如:
作为pd进口熊猫
将牵牛星导入为alt
df=pd.DataFrame{
'存储':['dev01','dev01','dev01','dev02','dev02','dev03'],
'项目':['omega','alpha','beta','omega','beta','alpha'],
“读”:[3,0,0,114,27,82],
“写入”:[70,0,0,45655203],
“读写”:[313322,45,89,90,12]
}
alt.Chartdf.transform\u fold
[“读”、“写”、“读写”],
作为\=['mode','value']
.mark_bar.encode
x='value:Q',
y='project:N',
column='storage:N',
颜色模式:N'
.物业
宽度=200
你的答案是正确的,适用于熊猫的更多问题。我真的很想给出和jakevdp都接受的答案,但很抱歉,StackOverflow只能允许一个。我所能做的就是投票。你的答案是正确的,适用于熊猫的更多问题。我真的很想给出和jakevdp都接受的答案,但很抱歉,StackOverflow只能允许一个。我所能做的就是投票。谢谢@jakevdp。我在浏览帖子,这是一个常见的问题,措辞不同。谢谢你的耐心和这个伟大的图书馆。谢谢@jakevdp。我在浏览帖子,这是一个常见的问题,措辞不同。谢谢你的耐心和这个伟大的图书馆。