之前有写画过柱状图,遇到了一个问题,数据过多,x轴很密的问题。这点当时用的matplotlib做的,解决方法就是去掉部分点,隔一段显示一个,参见matplotlib画图时候x轴的标签过于密集的解决方法。后来我发现echarts, 它里面有滑动柱状图/折线图,完美的解决了这个问题。我看到还是有很多人遇到这方面的问题。刚好昨天针对我们自己的走势图做一个pv,uv的数据统计。我就用了pyecharts解决了这个问题。
我大概分了这么几步:
第一步:一个sh脚本完成对数据的统计,统计之后,记录当天的时间,pv, uv. 写入一个txt文本。
第二步:写一个python脚本,读取txt文本中的数据。然后生成原始数据。
第三步:生成走势图的html并配置nginx.
第一步就是shell脚本了,这里我就略过了。主要是第三步:
*安装pyecharts pip install pyecharts==0.5.11
pyecharts_snapshot 提供图片导出功能 pip install pyecharts_snapshot
参考:https://pyecharts.org/#/zh-cn/global_options
https://zhuanlan.zhihu.com/p/63236019
from pyecharts import Bar, Line
x = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋"]
y1 = [5, 20, 36, 10, 75]
y2 = [10, 25, 8, 60, 20]
bar = Bar(title = "产品月销量",width = 600,height = 420)
bar.add(name = "商家A", x_axis = x, y_axis = y1)
bar.add(name = "商家B", x_axis = x, y_axis = y2,is_xaxis_boundarygap =True)
# 导出绘图html文件,可直接用浏览器打开
bar.render('柱形图示范.html')
折线图
x = ['2018-{:0>2d}'.format(s) for s in range(1,13)]
y1 = [5,10,26,30,35,30,20,26,40,46,40,50]
y2 = [8,20,24,36,40,36,40,45,50,53,48,58]
line = Line(title = "月销售总额",width = 600,height = 420)
line.add(name = "商家A", x_axis = x, y_axis = y1,
line_width = 3,line_color = 'red')
line.add(name = "商家B", x_axis = x, y_axis = y2,
yaxis_min = 0,yaxis_max = 100,is_xaxis_boundarygap = True,
is_datazoom_show =True,line_width = 2,line_color = 'cyan')
# 这里面折线图可以左右拉伸完全取决于is_datazoom_show这个参数。同时datazoom_range=[81,100]是设置滚动条默认显示的长度。
# is_xaxis_boundarygap 是点居于x轴的中心。
line.render('折线图示范.html')
这里会生成一个折线图示范.html的文件,配置一下nginx就可以供外部访问了。
与业务相关的代码就不贴了,参考上面代码即可完成滑动条形图或者折线图的配置。