分享

图表神器:pyecharts/qtpy的使用

 AI量化实验室 2023-10-12 发布于北京

echarts是百度开源的一款js的图表库,界面很酷炫,使用也不复杂。但还是不够pythonic,对吧。

pyecharts来了。

先看一个图,还不错对吧:

django里是可以直接支持的,

import math

from django.http import HttpResponse
from django.template import loader
from pyecharts import Line3D

from pyecharts.constants import DEFAULT_HOST


def index(request):
template = loader.get_template('myfirstvis/pyecharts.html')
l3d = line3d()
context = dict(
myechart=l3d.render_embed(),
host=DEFAULT_HOST,
script_list=l3d.get_js_dependencies()
)
return HttpResponse(template.render(context, request))

def line3d():
_data = []
for t in range(0, 25000):
_t = t / 1000
       x = (1 + 0.25 * math.cos(75 * _t)) * math.cos(_t)
y = (1 + 0.25 * math.cos(75 * _t)) * math.sin(_t)
z = _t + 2.0 * math.sin(75 * _t)
_data.append([x, y, z])
range_color = [
'#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf',
'#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026']
line3d = Line3D("3D line plot demo", width=1200, height=600)
line3d.add("", _data, is_visualmap=True,
visual_range_color=range_color, visual_range=[0, 30],
is_grid3D_rotate=True, grid3D_rotate_speed=180)
return line3d

html里的模板如下,包括3个变量即可:

<!-- myfirstvis/templates/pyecharts.html --><!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Proudly presented by PycCharts</title>
	{% for jsfile_name in script_list %}
    <script src="{{host}}/{{jsfile_name}}.js"></script>
    {% endfor %}
</head>

<body>
  {{myechart|safe}}
</body>

</html>

有没有把问题复杂化,仁者见仁,相信后端的开发者会喜欢。

这原本就是html/js的模式,在网页里使用不算难事,但可否在GUI的程序里使用呢,如本文开头的图示就是pyqt里的调用。很自然想到是pyqt里嵌入图片,那就变成静态的了,echarts最大的优点是,它是动态图,你可以改变它的轴,时间,还是显示样式等。否则使用matplotlib就好了。

我们可以把pyecharts生成的html使用webview控件来呈现。

这里再引入一个库QtPy, 

Provides an abstraction layer on top of the various Qt bindings (PyQt5, PyQt4 and PySide) and additional custom QWidgets.

它构建在pyqt5/pyside之上,还有一些自定义的控件。这个也不需要额外安装,anaconda里本来就有。

Qt慢慢淘汰了古老的Webkit ,用WebEngine框架代替掉了。Webengine与webkit不同的是它是基于Chromium引擎的,也就是集成谷歌的引擎。所以这里我们使用WebEngine。

如果说在网页里使用echarts也很容易的话,那要在gui的程序里使用,再自己去写js,然后一个个去拼成网页,那工作量大,且不好维护,那pyecharts就是一个神器了。

明天用真实的数据去展现一下。

关于作者:魏佳斌,互联网产品/技术总监,北京大学光华管理学院(MBA),特许金融分析师(CFA),资深产品经理/码农。偏爱python,深度关注互联网趋势,人工智能,AI金融量化。致力于使用最前沿的认知技术去理解这个复杂的世界。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多