根据echarts生成pyecharts并修改,复刻echarts图案到pyecharts

根据echarts生成pyecharts并修改

在plotly系列学习中,plotly的配置最终通过生成json传给前端plotly.js,因此通过修改json或者dict的方式,直接可以更改图表。

pyecharts是一个优秀的框架,使echarts能够被python所使用。但echarts更新太快,同时echarts有很多优秀的案例库,却没有相应的python实现,只能看着眼馋。

通过对plotly的原理分析,再看pyecharts原理,有类似的理念,即pyecharts最终传参数给echarts.js,也即最终生成echarts的配置文件。

那么问题来了,如何通过echarts配置文件反向生成pyecharts,然后就可以利用python自由修改相关属性。如果成功,有如下应用场景:

  • 看到好看的echarts图,直接根据echarts配置文件生成python对象,用python完成对数据的更改和标题、图例等的修改,加快开发速度。

  • 对不熟悉pyecharts的API的开发者,能够快速上手,通过字典或json快速定位到需要修改的属性,完成修改。

经过对API的尝试阅读,找到一个快速的路径,可以实现该操作,步骤如下:

  1. 编写javascript代码,生成echarts对象,如mychart,调用mychart.getOption()得到配置,用json进行输出。

  2. 在python中调用demjson,将json生成python字典,如data。demjson自动将json中的true之类转换为python的True。

  3. 在pyecharts中找到对应的图表类,如Bar, 生成空的对象如bar

  4. 修改目标属性,可以对dict 进行操作,也可以使用bar.options=data,然后对bar按pyecharts方式进行修改。

  5. 调用bar.render()得到bar对象。
    在第三步中,也可以对相应图表的超类进行初始化,如对Bar类,超类为RectChart,可以初始化RectChart。

关键代码

javascript端生成配置文件

如果echarts里没有javascript的代码,只有配置文件,就可以省略这一步,但如果有javascript语句,就需要执行后才知道完整的配置,所以需要用代码运行一次。

//省略生成echarts代码,生成图后,添加如下代码:
data=myChart.getOption()//mychart为
let str = JSON.stringify(data,"","\t")
console.log(str)//或者存为文件

假如我们用的图是上证指数图,链接为:
https://echarts.apache.org/examples/zh/editor.html?c=candlestick-sh
在这里插入图片描述

python端生成图

对生的Pyecharts空图赋予来自echarts的配置,然后就是见证奇迹的时刻!

import demjson
from pyecharts.charts import Bar
data=demjson.decode(jsontext)#jsontext为上一步生成的str
chart=Bar()

data['title'][0]['text']='更改标题'
#将原图黑色标记点改为2301。
data['series'][0]['markPoint']['data'][0]['value']=2301
chart.options=data
#在Jupyter notebook中显示 
chart.render_notebook()

最后生成的图像如下,成功!
在这里插入图片描述

修改数据

修改数据也是可以的,上图数据太多,换一个简单的图举例,
百度的基础k线图:https://echarts.apache.org/examples/zh/editor.html?c=candlestick-simple
在这里插入图片描述
由于没有动态的javascript语句需要执行,直接复制options内的内容至python

from pyecharts.charts.chart import RectChart
jsontext='''
{
  xAxis: {
    data: ['2017-10-24', '2017-10-25', '2017-10-26', '2017-10-27']
  },
  yAxis: {},
  series: [
    {
      type: 'candlestick',
      data: [
        [20, 34, 10, 38],
        [40, 35, 30, 50],
        [31, 38, 33, 44],
        [38, 15, 5, 42]
      ]
    }
  ]
}
'''
data=demjson.decode(jsontext)
chart=RectChart()
kline=[
    [66, 66, 66, 66],
    [40, 35, 30, 50],
    [31, 38, 33, 44],
    [38, 15, 5, 42],
    [31, 38, 33, 66],
]
data['series'][0]['data']=kline
data['xAxis']['data']=['2017-10-24', '2017-10-25', '2017-10-26', '2017-10-27','2017-10-28']
chart.options=data
chart.render_notebook()

最后生的图如下,成功地把第一根线改成了水平线,并添加了一条K线。

在这里插入图片描述

结语

当然,最好的方式还是学pyecharts,这样的方式比较pythonic,但有时需要快速弄个模型时,这也不失为一个办法。

pyecharts, 一切皆options

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值