Python 如何使用Altair创建嵌套的分组条形图?-添加了样本数据

Python 如何使用Altair创建嵌套的分组条形图?-添加了样本数据,python,altair,Python,Altair,年 主型 事故数量 被捕人数 逮捕百分比 等级 2018 盗窃 57330 5503 9.6 1. 2018 电池组 44667 8886 19.89 2. 2018 刑事损害 24889 1498 6.02 3. 2018 攻击 18229 2931 16.08 4. 2018 欺骗行为 15879 713 4.49 5. 2017 盗窃 64334 6459 10.04 1. 2017 电池组 49213 10060 20.44 2. 2017 刑事损害 29040 1747 6.02 3.


年
主型
事故数量
被捕人数
逮捕百分比
等级
2018
盗窃
57330
5503
9.6
1.
2018
电池组
44667
8886
19.89
2.
2018
刑事损害
24889
1498
6.02
3.
2018
攻击
18229
2931
16.08
4.
2018
欺骗行为
15879
713
4.49
5.
2017
盗窃
64334
6459
10.04
1.
2017
电池组
49213
10060
20.44
2.
2017
刑事损害
29040
1747
6.02
3.
2017
攻击
19298
3455
17.9
4.
2017
欺骗行为
18816
805
4.28
5.
2016
盗窃
61600
6518
10.58
1.
2016
电池组
50292
10328
20.54
2.
2016
刑事损害
31018
1668
5.38
3.
2016
攻击
18738
3490
18.63
4.
2016
欺骗行为
18733
815
4.35
5.
2015
盗窃
57335
6771
11.81
1.
2015
电池组
48918
11558
23.63
2.
2015
刑事损害
28675
1835
6.4
3.
2015
麻醉品
23883
23875
99.97
4.
2015
其他罪行
17552
4795
27.32
5.
2014
盗窃
61561
7415
12.04
1.
2014
电池组
49447
12517
25.31
2.
2014
麻醉品
29116
29000
99.6
3.
2014
刑事损害
27798
2095
7.54
4.
2014
其他罪行
16979
4159
24.49
5.
2013
盗窃
71530
7727
10.8
1.
2013
电池组
54002
12927
23.94
2.
2013
麻醉品
34127
33819
99.1
3.
2013
刑事损害
30853
2107
6.83
4.
2013
其他罪行
17993
3400
18.9
5.

并列条形图的唯一方法是在x编码旁边使用列编码。您可以按照Altair示例库中的分组条形图示例进行操作:

数据的结果如下所示:

import altair as alt
import pandas as pd
import numpy as np

q13a = pd.DataFrame({
    'year': np.random.randint(2000, 2018, 100),
    'Number_of_Incidents': np.random.randint(0, 20, 100),
    'percent_arrest': np.random.rand(100),
    'primary_type': np.random.choice(['a', 'b', 'c', 'd', 'e'], 100)
})

alt.Chart(q13a).mark_bar().encode(
    x=alt.X('primary_type', scale=alt.Scale(rangeStep=8), title=None),
    y=alt.Y('sum(Number_of_Incidents)', title='sum(Number_of_Incidents)'),
    color='primary_type',
    column='year',
    tooltip=['year']
).configure_view(
    stroke='transparent'
)

并列条形图的唯一方法是在x编码旁边使用列编码。您可以按照Altair示例库中的分组条形图示例进行操作:

数据的结果如下所示:

import altair as alt
import pandas as pd
import numpy as np

q13a = pd.DataFrame({
    'year': np.random.randint(2000, 2018, 100),
    'Number_of_Incidents': np.random.randint(0, 20, 100),
    'percent_arrest': np.random.rand(100),
    'primary_type': np.random.choice(['a', 'b', 'c', 'd', 'e'], 100)
})

alt.Chart(q13a).mark_bar().encode(
    x=alt.X('primary_type', scale=alt.Scale(rangeStep=8), title=None),
    y=alt.Y('sum(Number_of_Incidents)', title='sum(Number_of_Incidents)'),
    color='primary_type',
    column='year',
    tooltip=['year']
).configure_view(
    stroke='transparent'
)

@jakevdp已经回答了,但是为了回答您的最后一个问题(即使您有几点需要问几个问题),您可以使用
alt.EncodingSortField
对条形图进行排序

将altair导入为alt
alt.Chart(q13a).标记条().编码(
x=alt.x('主要类型:N',
比例=高度比例(范围步长=8),
轴=无,
sort=alt.EncodingSortField(field='Number'u of_Incident',
op='sum',
顺序(升序)
),
y=alt.y('sum(事件数):Q',title='sum(事件数)',
颜色class='primary\u类型:N',
工具提示=['primary\u type:N',
“年份:O”,
alt.Tooltip('事件总数:Q',
title='事件数量')
]
).小平面(
column=alt.column('year:O',
header=alt.header(title=None)),
).解决问题(
x='独立'
).configure\u视图(
“透明的”
)


数据

将熊猫作为pd导入
从io导入StringIO
q13a=pd.read_表(StringIO(““”年主要_类型事件数量逮捕百分比逮捕等级
2018年盗窃57330 5503 9.6 1
2018电池44667 8886 19.89 2
2018年刑事损害2488914986.023
2018年袭击18229 2931 16.08 4
2018年欺骗行为15879713 4.49 5
2017年盗窃64334 6459 10.04 1
2017电池49213 10060 20.44 2
2017年刑事损害290401747 6.02 3
2017年袭击19298 3455 17.9 4
2017年欺骗行为18816805 4.285
2016年盗窃案61600 6518 10.58 1
2016电池50292 10328 20.54 2
2016年刑事损害310181668 5.38 3
2016年袭击18738 3490 18.63 4
2016年欺骗行为18733815 4.35 5
2015年盗窃案57335 6771 11.81 1
2015电池48918 11558 23.63 2
2015年刑事损害28675 1835 6.4 3
2015年麻醉品23883 23875 99.97 4
2015年其他罪行17552479527.325
2014年盗窃案61561 7415 12.04 1
2014电池49447 12517 25.31 2
2014年麻醉品29116 29000 99.6 3
2014年刑事损害27798 2095 7.54 4
2014年其他犯罪16979 4159 24.49 5
2013年盗窃71530 7727 10.8 1
2013电池54002 12927 23.94 2
2013年麻醉品34127 33819 99.1 3
2013年刑事损害30853 2107 6.83 4
2013年其他犯罪17993 3400 18.9 5“(以“)号填列)

@jakevdp于2018年11月28日创建的已回答,但为了回答您的最后一个问题(即使您有几点需要问几个问题),您可以使用
alt.EncodingSortField
对条形图进行排序

将altair导入为alt
alt.Chart(q13a).标记条().编码(
x=alt.x('主要类型:N',
比例=高度比例(范围步长=8),
轴=无,
sort=alt.EncodingSortField(field='Number'u of_Incident',
op='sum',
顺序(升序)
),
y=alt.y('sum(事件数):Q',title='sum(事件数)',
颜色class='primary\u类型:N',
工具提示=['primary\u type:N',
“年份:O”,
alt.Tooltip('事件总数:Q',
title='事件数量')
]
).小平面(
column=alt.column('year:O',
header=alt.header(title=None)),
).解决问题(
x='独立'
).configure\u视图(
“透明的”
)


数据

将熊猫作为pd导入
从io导入StringIO
q13a=pd.read_表(StringIO(““”年主要_类型事件数量逮捕百分比逮捕等级
2018年盗窃57330 5503 9.6 1
2018电池44667 8886 19.89 2
2018年刑事损害2488914986.023
2018年袭击18229 2931 16.08 4
2018年欺骗行为15879713 4.49 5
2017年盗窃64334 6459 10.04 1
2017年电池