plotly 热图中的自定义排序轴
Custom sorting axis in plotly heatmap
我想按照与 yaxis 相同的顺序对热图的 xaxis 进行排序。这意味着顺序将以最年轻的年龄范围最先出现的方式出现,此后出现的每个轴都是递增的
这是我的数据示例:
{'age_range': {0: '15-20',
1: '15-20',
2: '20-25',
3: '20-25',
4: '20-25',
5: '20-25',
6: '20-25',
7: '20-25',
8: '20-25',
9: '20-25'},
'opp_age_range': {0: '25-30',
1: '25-30',
2: '20-25',
3: '20-25',
4: '20-25',
5: '20-25',
6: '25-30',
7: '25-30',
8: '25-30',
9: '25-30'},
'division': {0: 'cruiser',
1: 'super feather',
2: 'feather',
3: 'light',
4: 'super bantam',
5: 'welter',
6: 'cruiser',
7: 'feather',
8: 'heavy',
9: 'super bantam'},
'sex': {0: 'male',
1: 'male',
2: 'male',
3: 'male',
4: 'male',
5: 'male',
6: 'male',
7: 'male',
8: 'male',
9: 'male'},
'wins': {0: 6, 1: 15, 2: 9, 3: 30, 4: 7, 5: 25, 6: 14, 7: 28, 8: 45, 9: 21},
'loss': {0: 7, 1: 11, 2: 35, 3: 28, 4: 21, 5: 46, 6: 18, 7: 34, 8: 50, 9: 32},
'draw': {0: 2, 1: 2, 2: 2, 3: 1, 4: 1, 5: 2, 6: 1, 7: 7, 8: 2, 9: 3},
'other': {0: 1, 1: 1, 2: 1, 3: 2, 4: 2, 5: 1, 6: 1, 7: 1, 8: 1, 9: 1},
'total_fights': {0: 16,
1: 29,
2: 47,
3: 61,
4: 31,
5: 74,
6: 34,
7: 70,
8: 98,
9: 57},
'win_rate': {0: 37.5,
1: 51.724137931034484,
2: 19.148936170212767,
3: 49.18032786885246,
4: 22.58064516129032,
5: 33.78378378378378,
6: 41.17647058823529,
7: 40.0,
8: 45.91836734693878,
9: 36.84210526315789}}
这是我目前的展望:
这是我迄今为止编写的代码,其中 fights 包含我在第一个示例中添加的一些示例数据:
order = ['15-20', '20-25', '25-30', '30-35', '35-40', '40-45', '45-50']
return {
'data': [
go.Heatmap(
z=fights['win_rate'],
y=fights['age_range'],
x=fights['opp_age_range'],
showscale=True)
],
'layout': go.Layout(
title='Wins rate by boxer age range',
xaxis={'title':'Opposition age range'},
yaxis={'title': 'Boxer age range'},
hovermode='closest',
paper_bgcolor='black',
)
}
我也尝试过使用 tickvals 来指定事物在我的图中应该出现的顺序,但这并没有改变我的 xaxis
的顺序
'layout': go.Layout(
title='Wins rate by boxer age range',
xaxis={'title':'Opposition age range','tickvals': order},
yaxis={'title': 'Boxer age range'},
hovermode='closest',
paper_bgcolor='black',
)
参考plotly figure reference解决了这个问题。
根据文档,categoryarray 可用于设置轴中类别的显示顺序。
这是我写的:
order = ['15-20', '20-25', '25-30', '30-35', '35-40']
return {
'data': [
go.Heatmap(
z=fights['win_rate'],
y=fights['age_range'],
x=fights['opp_age_range'],
showscale=True)
],
'layout': go.Layout(
title='Wins rate by boxer age range',
xaxis={'title':'Opposition age range','categoryarray': order},
yaxis={'title': 'Boxer age range'},
hovermode='closest',
paper_bgcolor='black',
)
我想按照与 yaxis 相同的顺序对热图的 xaxis 进行排序。这意味着顺序将以最年轻的年龄范围最先出现的方式出现,此后出现的每个轴都是递增的
这是我的数据示例:
{'age_range': {0: '15-20',
1: '15-20',
2: '20-25',
3: '20-25',
4: '20-25',
5: '20-25',
6: '20-25',
7: '20-25',
8: '20-25',
9: '20-25'},
'opp_age_range': {0: '25-30',
1: '25-30',
2: '20-25',
3: '20-25',
4: '20-25',
5: '20-25',
6: '25-30',
7: '25-30',
8: '25-30',
9: '25-30'},
'division': {0: 'cruiser',
1: 'super feather',
2: 'feather',
3: 'light',
4: 'super bantam',
5: 'welter',
6: 'cruiser',
7: 'feather',
8: 'heavy',
9: 'super bantam'},
'sex': {0: 'male',
1: 'male',
2: 'male',
3: 'male',
4: 'male',
5: 'male',
6: 'male',
7: 'male',
8: 'male',
9: 'male'},
'wins': {0: 6, 1: 15, 2: 9, 3: 30, 4: 7, 5: 25, 6: 14, 7: 28, 8: 45, 9: 21},
'loss': {0: 7, 1: 11, 2: 35, 3: 28, 4: 21, 5: 46, 6: 18, 7: 34, 8: 50, 9: 32},
'draw': {0: 2, 1: 2, 2: 2, 3: 1, 4: 1, 5: 2, 6: 1, 7: 7, 8: 2, 9: 3},
'other': {0: 1, 1: 1, 2: 1, 3: 2, 4: 2, 5: 1, 6: 1, 7: 1, 8: 1, 9: 1},
'total_fights': {0: 16,
1: 29,
2: 47,
3: 61,
4: 31,
5: 74,
6: 34,
7: 70,
8: 98,
9: 57},
'win_rate': {0: 37.5,
1: 51.724137931034484,
2: 19.148936170212767,
3: 49.18032786885246,
4: 22.58064516129032,
5: 33.78378378378378,
6: 41.17647058823529,
7: 40.0,
8: 45.91836734693878,
9: 36.84210526315789}}
这是我目前的展望:
这是我迄今为止编写的代码,其中 fights 包含我在第一个示例中添加的一些示例数据:
order = ['15-20', '20-25', '25-30', '30-35', '35-40', '40-45', '45-50']
return {
'data': [
go.Heatmap(
z=fights['win_rate'],
y=fights['age_range'],
x=fights['opp_age_range'],
showscale=True)
],
'layout': go.Layout(
title='Wins rate by boxer age range',
xaxis={'title':'Opposition age range'},
yaxis={'title': 'Boxer age range'},
hovermode='closest',
paper_bgcolor='black',
)
}
我也尝试过使用 tickvals 来指定事物在我的图中应该出现的顺序,但这并没有改变我的 xaxis
的顺序'layout': go.Layout(
title='Wins rate by boxer age range',
xaxis={'title':'Opposition age range','tickvals': order},
yaxis={'title': 'Boxer age range'},
hovermode='closest',
paper_bgcolor='black',
)
参考plotly figure reference解决了这个问题。
根据文档,categoryarray 可用于设置轴中类别的显示顺序。
这是我写的:
order = ['15-20', '20-25', '25-30', '30-35', '35-40']
return {
'data': [
go.Heatmap(
z=fights['win_rate'],
y=fights['age_range'],
x=fights['opp_age_range'],
showscale=True)
],
'layout': go.Layout(
title='Wins rate by boxer age range',
xaxis={'title':'Opposition age range','categoryarray': order},
yaxis={'title': 'Boxer age range'},
hovermode='closest',
paper_bgcolor='black',
)