用matplotlib可以一步到位,但是用pyechart时:
- 需要手动分箱并绘图,分箱的方法使用的是:
pd.cut(array, bins)
- 统计x对应的下标与y轴对应的频数,将数据统计好后,给
def plot_bar()
进行绘制
示例代码如下:
示例代码
import numpy as np
import pandas as pd
def plot_bar(bar_index, value_list):
"""绘制柱状图
:param bar_index: x轴的下标
:param value_list: y轴的值
"""
from pyecharts import options as opts
from pyecharts.charts import Bar
bar = Bar()
bar.add_xaxis(bar_index)
bar.add_yaxis("", value_list)
bar.set_global_opts(
title_opts=opts.TitleOpts(title="柱状图"),
yaxis_opts=opts.AxisOpts(name="X轴"),
xaxis_opts=opts.AxisOpts(name="Y轴"),
datazoom_opts=opts.DataZoomOpts(type_="slider", is_realtime=True, range_start=0, range_end=100),
)
bar.set_series_opts(
label_opts=opts.LabelOpts(is_show=False),
markline_opts=opts.MarkLineOpts(
data=[
opts.MarkLineItem(type_="max", name="最大值"),
opts.MarkLineItem(type_="average", name="平均值"),
]
),
).render("bar_chart_display_delay.html")
def plot_result(array, bins=20):
"""准备转换数据
:param array: 待绘制的数组
:param bins: 柱状图柱子的数量
"""
# 开始准备数据,准备绘图
num_list = [] # 记录每个bins的数量
index_list = [] # 记录下标
value_dis_bins = pd.cut(array, bins=bins) # 数据分箱
for i in range(bins):
bin_code = np.argwhere(value_dis_bins.codes == i).flatten()
num_list.append(len(bin_code))
index_list.append(((value_dis_bins.categories[i].left + value_dis_bins.categories[i].right) / 2).round(5))
plot_bar(index_list, num_list)
plot_result(array=np.random.random(size=200))
效果如下所示: