堕落不振功业废,勤耕不辍日月新

pyecharts折线图和柱状图

Python hailen 8℃

参照pyecharts-gallery示例代码分容易能完成图形的展示,不过这里也有一点小坑。这里记录下折线图和柱状图的使用。便于说事,这里使用了tushare的stock数据源。先看下效果图:

echart-bar-line

一、折线图

单根线的折线图是比较容易搞的,这里说多根线的折线图,我这里使用的代码如下:

import pyecharts.options as opts
from pyecharts.charts import Line
import talib as ta
import tushare as ts
dw = ts.get_k_data('603515')
df = dw[-30:]
x_data = df['date'].values
x_data = df['date'].values
#y_data = [820, 932, 901, 934, 1290, 1330, 1320]
line = (
    Line()
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(
        series_name="开",
        y_axis=df['open'].values,
        label_opts=opts.LabelOpts(is_show=False),
    )
    .add_yaxis(
        series_name="收",
        y_axis=df['close'].values,
        label_opts=opts.LabelOpts(is_show=False),
    )
    .add_yaxis(
        series_name="高",
        y_axis=df['high'].values,
        label_opts=opts.LabelOpts(is_show=False),
        areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
    )
    .add_yaxis(
        series_name="低",
        y_axis=df['low'].values,
        label_opts=opts.LabelOpts(is_show=False),
        areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
    )
    .set_global_opts(
        tooltip_opts=opts.TooltipOpts(
            is_show=True, trigger="axis", axis_pointer_type="cross"
        ),
        yaxis_opts=opts.AxisOpts(
            type_="value",
            axistick_opts=opts.AxisTickOpts(is_show=True),
            splitline_opts=opts.SplitLineOpts(is_show=True),
        ),
        xaxis_opts=opts.AxisOpts(
            type_="category",
            boundary_gap=False,
            axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"),
        ),
    )
   # .render("stacked_line_chart.html")
)
line.render_notebook()

这里是根据官方 stacked_line_chart.py 示例的基础上修改出来的。使用官方示例有一个问题。其在增加 y 轴值的时候,加了一个参数 stack=”总量” ,使用该参数后,后面每根线的值会和前面一根线的各个点的值求和再显示。有这个场景比较适合使用这个选项,就是CPU利用率,不过这显然我的需求不一样,把这个值拿掉就好了。

上面使用示例中还有两个参数也说明下:

label_opts=opts.LabelOpts(is_show=False),  //控制是否在线上显示各个点的值
areastyle_opts=opts.AreaStyleOpts(opacity=0.5), //控制是否以颜色区域显示某根线

二、柱状图

根据官方示例,这里先写一个柱状图的示例:

import tushare as ts
import pyecharts.options as opts
from pyecharts.charts import Bar, Line
dw = ts.get_k_data('603515')
df = dw[-30:]
x_data = df['date'].values
bar = (
    Bar()
    .add_xaxis(list(x_data))
    .add_yaxis("开", list(df['open'].values),label_opts=opts.LabelOpts(is_show=False))
    .add_yaxis("收", list(df['close'].values),label_opts=opts.LabelOpts(is_show=False))
)
bar.render_notebook()

这里有一个坑就是,默认tushare取回的每一列值的数据类型是numpy类型的,而从官方示例上可以看出,其需要引入的是列表类型,所以需要list(npdata) 或npdata.to_list()进行数据转换,不然不能正常显示柱状图,这点和折线图不同,折线图不转换也可以正常显示。

三、柱状图和折线图混用

这部分可以参考官方示例:mixed_bar_and_line ,我这里具体实现的代码如下:

import tushare as ts
import pyecharts.options as opts
from pyecharts.charts import Bar, Line
dw = ts.get_k_data('603515')
df = dw[-30:]
x_data = df['date'].values
bar = (
    Bar()
    .add_xaxis(list(x_data))
    .add_yaxis("开", list(df['open'].values),label_opts=opts.LabelOpts(is_show=False))
    .add_yaxis("收", list(df['close'].values),label_opts=opts.LabelOpts(is_show=False))
)
#bar.render_notebook()
line = (
    Line()
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(
        series_name="高",
        #线上不显示数值
        label_opts=opts.LabelOpts(is_show=False),
        y_axis=df['high'].values,
    )
    .add_yaxis(
        series_name="低",
        label_opts=opts.LabelOpts(is_show=False),
        #是否显示阴影
        #areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
        y_axis=df['low'].values,
    )
    .set_global_opts(
    tooltip_opts=opts.TooltipOpts(
        is_show=True, trigger="axis", axis_pointer_type="cross"
    ),
    yaxis_opts=opts.AxisOpts(
        type_="value",
        axistick_opts=opts.AxisTickOpts(is_show=True),
        splitline_opts=opts.SplitLineOpts(is_show=True),
    ),
    xaxis_opts=opts.AxisOpts(
        type_="category",
        boundary_gap=False,
        axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"),
    ),
  )
)
#line.render_notebook()
bar.overlap(line).render_notebook()

效果图见最开始的图示。这里混使用主机使用bar.overlap(line)这样的用法。不过上图只是简单的展示,并没有标题,也没有y轴的单位名称,同时在鼠标移动时,也没有参考线,这些也可以参考官方示例进行配置,具体可以根据如下代码进行修改:

.set_global_opts(
    tooltip_opts=opts.TooltipOpts(
        is_show=True, trigger="axis", axis_pointer_type="cross"
    ),
    xaxis_opts=opts.AxisOpts(
        type_="category",
        axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"),
    ),
    yaxis_opts=opts.AxisOpts(
        name="水量",
        type_="value",
        min_=0,
        max_=250,
        interval=50,
        axislabel_opts=opts.LabelOpts(formatter="{value} ml"),
        axistick_opts=opts.AxisTickOpts(is_show=True),
        splitline_opts=opts.SplitLineOpts(is_show=True),
    ),
)

pyecharts折线图和柱状图,首发于运维之路

转载请注明:我是IT » pyecharts折线图和柱状图

喜欢 (0)or分享 (0)