一、pyechart刻度不从0开始

一些监控数据基本上在固定在某一个值附近变化不会太大的,尤其是一些行情类的数据,不可能今天是10,明天变0或负值,基本其就是这个值左右波动。遇到这种情况,如果监控图还是从0开始计算的话,很难观察到其抖动情况。这时候就考虑取其一起时间内的最小值为y轴的起始值。而从echarts官方的文档上来看其是支持min、max参数作为起始或终点值的。

echart官方说明文档参考:https://www.echartsjs.com/zh/option.html#yAxis.min

pyechart关于该项值的帮助信息为:

1min_: Union[int, float, str, NoneType] = None
2max_: Union[int, float, str, NoneType] = None

二、遇到的问题

在配置的时候发现使用int数值是可以正常输出图形的,当使用str min表达时,无法正常输出左边的刻度,如下图:

echart-min
echart-min

这个不知道是不是参数使用的有问题,从网上查看到的消息也有人遇到类似的问题。不过其不是用的pyecharts,而是用的echarts,页面为:Echarts中y轴无法设置max,min值? ,其给出的方法是换用最新的echarts.min.js 文件。这个我有尝试更换,发现也不能解决。

代码如下:

 1line_price = (
 2    Line()
 3    .add_xaxis(xaxis_data=list(x_data))
 4    .add_yaxis(
 5        series_name="开",
 6        y_axis=list(df['open'].values),
 7        label_opts=opts.LabelOpts(is_show=False),
 8    )
 9    .add_yaxis(
10        series_name="收",
11        y_axis=list(df['close'].values),
12        label_opts=opts.LabelOpts(is_show=False),
13    )
14    .add_yaxis(
15        series_name="高",
16        y_axis=list(df['high'].values),
17        label_opts=opts.LabelOpts(is_show=False),
18    )
19    .add_yaxis(
20        series_name="低",
21        y_axis=list(df['low'].values),
22        label_opts=opts.LabelOpts(is_show=False),
23    )
24    .set_global_opts(
25        tooltip_opts=opts.TooltipOpts(
26            is_show=True, trigger="axis", axis_pointer_type="cross",
27        ),
28        yaxis_opts=opts.AxisOpts(
29            type_="value",
30            #min_=26,
31            min_="min",
32            #max_="max",
33            axistick_opts=opts.AxisTickOpts(is_show=True),
34            splitline_opts=opts.SplitLineOpts(is_show=True),
35        ),
36        xaxis_opts=opts.AxisOpts(
37            type_="category",
38            boundary_gap=False,
39            axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"),
40        ),
41        #legend_opts=opts.LegendOpts(pos_left="3%",orient="vertical"),
42    )
43)

三、我的解决办法

上面的代码中,如果把min=”min”换成min=26就可以正常显示。既然如此,可以通过使用python本身计算出最小值,把最小值做为一个变量传过去就行了。因为我测试用的数据是pandas类型,所以这里直接使用如下代码搞定:

1minval = df['low'].min()
2在pyecharts调用处改为
3min = minval

使用该方法处理后,输出的图形为:

pyechart-minval
pyechart-minval

同时对于刻度间的间隔还可以使用 min_interval 或 max_interval进行设置。