如何使用plotly和python在条形图中将xaxis中的bin组合在一起?
以下是我的尝试:
data3 = Data([
Bar(
x=[x[0] for x in lv_list],
y=[(y[1]/lc_dict[y[0]]) for y in lv_list]
)
])
layout3 = dict(
title='Public Highlight Analysis',
yaxis=YAxis(
title = 'Average Number of Views'),
xaxis1=XAxis(
title = "Duration of Highlight in Seconds",
autotick=False,
dtick=50, range = [0,10000])
)
fig3 = Figure(data=data3, layout=layout3)
py.iplot(fig3)
我想做什么:
我希望图表能够合并1-1000,1001-2000,2001-3000等数字,以便沿轴有6个分档。
答案 0 :(得分:1)
不确定你的意思"结合",但这里有几个可能的解决方案。
示例数据:
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [2, 1, 6, 3, 7, 9, 2, 12,5, 3]
s = ['A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'E', 'F']
1 - 如果您只想显示更少的刻度线,请在dtick
(https://plot.ly/python/reference/#XAxis)内使用xaxis
以下是默认视图:
>> py.iplot([Bar(x=x, y=y)])
此处,使用自定义dtick
:
iplot({
'data': [
Bar(x=x, y=y)
],
'layout': {
'xaxis': {
'dtick': 3
}
}
})
2 - 如果您希望按频率分类项目,请使用直方图(more histogram examples)
py.iplot([Histogram(y=y)])
3 - 如果您希望对项目进行分箱和求和,请考虑使用Pandas:
>> import pandas as pd
>> df = pd.DataFrame({'x': x, 'y': y, 's': ['A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'E', 'F']})
>> df
s x y
0 A 1 2
1 B 2 1
2 C 3 6
3 D 4 3
4 A 5 7
5 B 6 9
6 C 7 2
7 D 8 12
8 E 9 5
9 F 10 3
使用groupby
和sum
对属于同一类别的所有商品进行存储和汇总
>> s = df.groupby('s').sum()
>> s
x y
s
A 6 9
B 8 10
C 10 8
D 12 15
E 9 5
F 10 3
>> py.iplot([Bar(x=s.index, y=s.y)])
如果您的数据是数字,并且您想要对值进行合并和求和,那么请自行创建数字分箱并绘制结果:
>> import numpy as np
>> bins = np.linspace(df.x.min(), df.x.max(), 5)
>> print bins
[ 1. 3.25 5.5 7.75 10. ]
>> df['groups'] = np.digitize(df.x, bins)
>> print df
s x y groups
0 A 1 2 1
1 B 2 1 1
2 C 3 6 1
3 D 4 3 2
4 A 5 7 2
5 B 6 9 3
6 C 7 2 3
7 D 8 12 4
8 E 9 5 4
9 F 10 3 5
>> grouped = df.groupby('groups').sum()
>> print grouped
x y
groups
1 6 9
2 9 10
3 13 11
4 17 17
5 10 3
>> bin_boundaries = [_ - 0.5 for _ in range(len(grouped.y))]
>> py.iplot({
'data': [Bar(y=grouped.y)],
'layout': {
'bargap': 0,
'xaxis': {
'ticktext': bins,
'tickvals': bin_boundaries
}
}
}, validate=False)