相信很多小伙伴都有这个疑问。用pyecharts 怎么绘制直方图,官网也没有给接口,只有一个Bar()函数,可是那是柱状图的。但是python中的matplotlib中就有绘制直方图的函数Hist()。但是就是要用pyecharts怎么办呢?
今天遇到一个可视化需求,必须要用pyecharts绘制分布式直方图,但是pyecharts 官网又没有给出直方图函数。所以查阅了大量资料,遇到几篇很有意思的博客。明明标题是用pyecharts绘制直方图,内容确是牛头不对马嘴。真是老太太进被窝,给爷整笑了。
废话不多说,直接上代码。
首先pyecharts没有给出直方图函数,就只能自己去设计数据,然后把数据给Bar函数。
本人是基于jupyter写的代码,如果使用pycharm 最用展示图用render() 函数
# 生成一个长度一百,随机大小不大于100的一维数组
data = np.random.randint(100,size=(100,))
# 获取4个区间,五个值
bins = np.linspace(0,100,5)
# array([ 0., 25., 50., 75., 100.])
value = pd.cut(data,bins)
# [(75.0, 100.0], (0.0, 25.0], (25.0, 50.0], (25.0, 50.0], (0.0, 25.0],
#..., (25.0, 50.0], (50.0, 75.0], (25.0, 50.0], (50.0, 75.0], (25.0, 50.0]]
# Length: 100
# Categories (4, interval[float64]): [(0.0, 25.0] < (25.0, 50.0] < (50.0, 75.0]
# < (75.0, 100.0]]
value = pd.value_counts(value).sort_index() # 进行统计计数,每个区间又多少个数
# (0.0, 25.0] 32
# (50.0, 75.0] 28
# (25.0, 50.0] 22
# (75.0, 100.0] 18
x_value = [ f'{round(i.left,2)}-{round(i.right,2)}' for i in value.index ]
# ['0.0-25.0', '25.0-50.0', '50.0-75.0', '75.0-100.0']
value= value.tolist() # 按索引进行排序(为了x轴,从大到小的关系,不然50-75这个区间排第二,value_counts默认降序排列导致),转换成列表,在pyecharts 只支持python的基本数据类型
# (0.0, 25.0] 21
# (25.0, 50.0] 28
# (50.0, 75.0] 20
# (75.0, 100.0] 31
# dtype: int64
bar = charts.Bar()
bar.add_xaxis(x_value )
bar.add_yaxis('区间数量',value)
bar.set_global_opts(
xaxis_opts=opts.AxisOpts(
name='bin值'
),
yaxis_opts=opts.AxisOpts(
name = '数量值'
)
)
bar.render_notebook()
小小代码不成敬意。
有用就收藏吧。