之前,在网上搜到过很多教程,但是我按照教程做,一次也没成功。踩了很多坑,最后才做成。
没成功的主要原因:
- pyecharts版本不同,有些函数我的pyecharts库里没有,如dump_options_with_quotes()
- Markup() 方法不成功,主要是因为render_embed()函数只返回部分html代码,没有头和尾,必须还要引用echarts.js, 或者绘制地图时,相对应需要的js。中国地图需要china.js, 世界地图需要world.js
- 异步调用不成功,我也不太明白,反正就是flask不能直接引用pyecharts生成的html文件。
网上教程:利用 Flask 动态展示 Pyecharts 图表数据的几种方法
一、准备
工具 | 版本 |
---|---|
pyecharts | 0.1.9.4 |
js | echarts.js, china.js, world.js |
name_map.py | 国家中文名及英文名 |
二、饼图
文件结构
makeCharts.py
from pyecharts.charts.pie import Pie
# html代码头尾
html1 = '<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>数据可视化</title><script src="/static/echarts.js"></script><script src="/static/china.js"></script><script src="/static/world.js"></script></head><body>'
html2 = '</body></html>'
def make_pie():
attrs = ['现存确诊', '死亡', '治愈']
values = [1369, 49, 13225]
# 绘制饼图
pie = Pie("中国" + "数据饼图")
pie.add(
"",
attrs,
values,
is_label_show=True,
is_more_utils=True
)
# pie.render_embed() 是绘制饼图的html代码
html = html1 + pie.render_embed() + html2
return html
app.py
from flask import Flask
from jinja2 import Markup
import charts.makeCharts
app = Flask(__name__)
# 默认网页
@app.route('/')
def show_start():
return Markup(charts.makeCharts.make_pie())
运行结果
三、中国地图
markCharts.py
from pyecharts.charts.map import Map
# html代码头尾
html1 = '<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>数据可视化</title><script src="/static/echarts.js"></script><script src="/static/china.js"></script><script src="/static/world.js"></script></head><body>'
html2 = '</body></html>'
# 绘制中国地图
def make_ChinaMap():
global ChinaData
allProvinces = ['香港', '台湾', '上海', '辽宁', '北京', '广东', '福建', '四川', '内蒙古', '陕西', '云南', '浙江', '黑龙江', '天津', '山东', '河南', '山西', '江苏', '湖南', '安徽', '河北', '广西', '湖北', '新疆', '江西', '重庆', '甘肃', '海南', '吉林', '贵州', '宁夏', '澳门', '青海', '西藏']
values = [805, 115, 95, 73, 37, 31, 27, 26, 23, 17, 13, 12, 10, 10, 8, 7, 3, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# 绘制地图
map = Map("中国"+"数据地图", '中国', width=1200, height=600)
map.add('现存确诊', allProvinces, values, visual_range=[1, 200], maptype='china', is_visualmap=True, visual_text_color='#000')
# map.render_embed() 是绘制地图的html代码
html = html1 + map.render_embed() + html2
return html
app.py
from flask import Flask
from jinja2 import Markup
import charts.makeCharts
app = Flask(__name__)
# 默认网页
@app.route('/')
def show_start():
return Markup(charts.makeCharts.make_ChinaMap())
运行结果
四、世界地图
name_map.py
# 绘制世界地图时,需要翻译
name_map = {
'Singapore Rep.': '新加坡',
'Dominican Rep.': '多米尼加',
'Palestine': '巴勒斯坦',
'Bahamas': '巴哈马',
'Timor-Leste': '东帝汶',
'Afghanistan': '阿富汗',
'Guinea-Bissau': '几内亚比绍',
"Côte d'Ivoire": '科特迪瓦',
'Siachen Glacier': '锡亚琴冰川',
"Br. Indian Ocean Ter.": '英属印度洋领土',
'Angola': '安哥拉',
'Albania':