赞
踩
ECharts是一款基于JavaScript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。ECharts最初由百度团队开源,并于2018年初捐赠给Apache基金会,成为ASF孵化级项目。
ECharts官网:Apache ECharts
PyEcharts 是一个用于生成 Echarts 图表的类库。 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,PyEcharts 诞生了。
目录
pip install pyecharts
- from pyecharts import options # 图形样式编辑
- from pyecharts.charts import Graph/Bar/Line/... # 引入不同图(关系图、柱状图、折线图...)
- from pyecharts import options
- from pyecharts.charts import Line/Bar/Scatter
-
-
- def draw(xlist, ylist):
- line = Line()
- line.add_xaxis(xlist) # x坐标名称
- line.add_yaxis("线名称", ylist, is_smooth=True) # 线名称、各点数值、是否平滑
- line.set_global_opts(title_opts=options.TitleOpts(title='name')) # 表名称
- line.render('xxx.html') # 生成html文件
-
-
- def main():
- xlist = ['一', '二', '三', '四', '五']
- ylist = [3, 9, 15, 21, 27]
- draw(xlist, ylist)
-
-
- if __name__ == '__main__':
- main()

- from pyecharts import options as opts
- from pyecharts.charts import Pie
-
-
- def draw(blist, nlist):
- pie = Pie()
- # 各部分名称,值;添加radius(内环大小、外环大小)即为环状
- pie.add("", [list(i) for i in zip(nlist, blist)], radius=["40%", "75%"])
- # 表名称
- pie.set_global_opts(title_opts=opts.TitleOpts(title="name"))
- # 显示名称及值
- pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
- # 生成html文件
- pie.render('xxx.html')
-
-
- def main():
- nlist = ['一', '二', '三', '四', '五']
- blist = [3, 9, 15, 21, 27]
- draw(blist, nlist)
-
-
- if __name__ == '__main__':
- main()

- from pyecharts import options as opts
- from pyecharts.charts import Graph
-
-
- def draw(alist, value):
- nodes = []
- for i in range(5):
- nodes.append({'name': alist[i], 'value': value[i]}) # 设置节点名称及对应值(字典格式)
-
- links = []
- for i in nodes[2:]:
- links.append(opts.GraphLink(source='A', target=i.get('name')))
- for i in nodes[2:]:
- links.append(opts.GraphLink(source='B', target=i.get('name'))) # 连线,指定连线的起始和目标节点
-
- graph = Graph()
- graph.add("", nodes, links, edge_symbol=['circle', 'arrow'], repulsion=200, is_draggable=True, layout='force') # repulsion节点间排斥力,is_draggable是否可拖拽节点,layout布局方式(有circular环形布局,force力引导布局,none无)
- graph.set_global_opts(title_opts=opts.TitleOpts(title="name")) # 表名称
- graph.render('xxx.html')
-
-
- def main():
- value = [0, 0, 5, 32, 45]
- alist = ['A', 'B', 'c', 'd', 'e']
- draw(alist, value)
-
-
- if __name__ == '__main__':
- main()

- from pyecharts.charts import WordCloud
-
- data = [('天气', 23), ('美丽', 10), ('天空', 5) ,('飞鸟', 15) , ('如诗如画', 25) , ('心情', 5), ('哈哈', 17)]
-
- #面向对象方式
- cloudObj = WordCloud()
-
- # shap默认为cicrle,其他形状有circle, cardioid, diamond, triangle-forward, triangle, pentagon, star
- cloudObj.add('', data, shape='circle')
-
- cloudObj.render('xxx.html')
-
- # shap可更换为图片,但尝试后效果不好。图片存在bug,需刷新网页后才会显示。
- # cloudObj.add('', data, mask_image='C:\XXX.png')
(1)基础地图
- from pyecharts.charts import Map
- from pyecharts import options as opts
-
-
- def map(provinces, value):
- map = Map()
-
- # china可改为world或各省市名称
- map.add("", [list(i) for i in zip(provinces, value)], "china")
-
- # 表名称;max_为最大值,超过此值都为最大值颜色;split_number,is_piecewise可以将颜色分块显示
- map.set_global_opts(title_opts=opts.TitleOpts(title="title"), visualmap_opts=opts.VisualMapOpts(max_=5000, split_number=8, is_piecewise=True))
-
- map.render('xxx.html')
-
-
- def main():
- provinces = ["广东", "北京", "上海", "辽宁", "湖南", "四川", "西藏"]
- value = [300, 100, 2000, 800, 10000, 400, 5000]
- map(provinces, value)
-
-
- if __name__ == '__main__':
- main()

(2)热力地图
- from pyecharts.charts import Geo
- from pyecharts import options as opts
- from pyecharts.globals import ChartType
-
-
- def map(provinces, value):
- map = Geo()
-
- # 仅以下两行与基础地图不同
- map.add_schema(maptype="china")
- map.add("", [list(i) for i in zip(provinces, value)], type_=ChartType.HEATMAP)
-
- map.set_global_opts(title_opts=opts.TitleOpts(title="title"),
- visualmap_opts=opts.VisualMapOpts(max_=5000))
- map.render('xxx.html')
-
-
- def main():
- provinces = ["广东", "北京", "上海", "辽宁", "湖南", "四川", "西藏"]
- value = [300, 100, 2000, 800, 10000, 400, 5000]
- map(provinces, value)
-
-
- if __name__ == '__main__':
- main()

- from pyecharts.charts import Radar
- from pyecharts import options as opts
-
-
- def radar(v1):
- radar = Radar(init_opts=opts.InitOpts())
- radar.add_schema(
- schema=[
- opts.RadarIndicatorItem(name="传球", max_=100),
- opts.RadarIndicatorItem(name="射门", max_=100),
- opts.RadarIndicatorItem(name="身体", max_=100),
- opts.RadarIndicatorItem(name="防守", max_=100),
- opts.RadarIndicatorItem(name="速度", max_=100),
- opts.RadarIndicatorItem(name="盘带", max_=100),
- ],
- splitarea_opt=opts.SplitAreaOpts(is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), # 是否显示分隔区域,透明度为1
- textstyle_opts=opts.TextStyleOpts(color="#000000")
- )
- radar.add(series_name="C·罗纳尔多", data=v1, areastyle_opts=opts.AreaStyleOpts(color="#FF0000", opacity=0.2)) # 区域面积,透明度
-
- radar.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
- radar.set_global_opts(title_opts=opts.TitleOpts(title="标准球员属性雷达图"), legend_opts=opts.LegendOpts(selected_mode="single")) # 可以设置单一选择查看
-
- radar.render('xxx.html')
-
-
- def main():
- v1 = [[83, 92, 87, 49, 89, 86]]
- radar(v1)
-
-
- if __name__ == '__main__':
- main()

- from pyecharts.charts import Tree
- from pyecharts import options as opts
-
-
- def draw(data):
- tree = Tree()
- tree.add('', data)
- tree.set_global_opts(title_opts=opts.TitleOpts(title="title"))
- tree.render('xxx.html')
-
-
- def main():
- # children数据类型为列表;可以为每个节点写入数值(value)
- data = [
- {"children": [{"name": "B", "value": "1"},
- {"children": [{"children": [{"name": "I"}], "name": "E"}, {"name": "F"}],
- "name": "C"},
- {"children": [{"children": [{"name": "J"}, {"name": "K"}], "name": "G"}, {"name": "H"}],
- "name": "D"}],
- "name": "A"}
- ]
-
- draw(data)
-
-
- if __name__ == '__main__':
- main()

- from pyecharts import options as opts
- from pyecharts.charts import ThemeRiver
-
-
- def draw(data, data_list):
- tr = ThemeRiver()
-
- # series_name各数据名称;data数据数值;SingleAxisOpts河流图位置
- tr.add(series_name=data_list, data=data,
- singleaxis_opts=opts.SingleAxisOpts(pos_top="50", pos_bottom="50", type_="time"))
-
- # TooltipOpts设置辅助线;LegendOpts设置图例位置
- tr.set_global_opts(title_opts=opts.TitleOpts(title="title"),
- tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="line"),
- legend_opts=opts.LegendOpts(pos_top=0))
- tr.render('xxx.html')
-
-
- def main():
- data = [['2015/11/08', 35, 'TY'],
- ['2015/11/09', 36, 'TY'],
- ['2015/11/10', 37, 'TY'],
- ['2015/11/11', 22, 'TY'],
- ['2015/11/12', 24, 'TY'],
- ['2015/11/13', 26, 'TY'],
- ['2015/11/14', 34, 'TY'],
- ['2015/11/15', 21, 'TY'],
- ['2015/11/16', 18, 'TY'],
- ['2015/11/17', 45, 'TY'],
- ['2015/11/18', 32, 'TY'],
- ['2015/11/19', 35, 'TY'],
- ['2015/11/20', 30, 'TY'],
- ['2015/11/21', 28, 'TY'],
- ['2015/11/22', 27, 'TY'],
- ['2015/11/23', 26, 'TY'],
- ['2015/11/24', 15, 'TY'],
- ['2015/11/25', 30, 'TY'],
- ['2015/11/26', 35, 'TY'],
- ['2015/11/27', 42, 'TY'],
- ['2015/11/28', 42, 'TY'],
- ['2015/11/08', 21, 'SS'],
- ['2015/11/09', 25, 'SS'],
- ['2015/11/10', 27, 'SS'],
- ['2015/11/11', 23, 'SS'],
- ['2015/11/12', 24, 'SS'],
- ['2015/11/13', 21, 'SS'],
- ['2015/11/14', 35, 'SS'],
- ['2015/11/15', 39, 'SS'],
- ['2015/11/16', 40, 'SS'],
- ['2015/11/17', 36, 'SS'],
- ['2015/11/18', 33, 'SS'],
- ['2015/11/19', 43, 'SS'],
- ['2015/11/20', 40, 'SS'],
- ['2015/11/21', 34, 'SS'],
- ['2015/11/22', 28, 'SS'],
- ['2015/11/23', 26, 'SS'],
- ['2015/11/24', 37, 'SS'],
- ['2015/11/25', 41, 'SS'],
- ['2015/11/26', 46, 'SS'],
- ['2015/11/27', 47, 'SS'],
- ['2015/11/28', 41, 'SS'],
- ['2015/11/08', 10, 'QG'],
- ['2015/11/09', 15, 'QG'],
- ['2015/11/10', 35, 'QG'],
- ['2015/11/11', 38, 'QG'],
- ['2015/11/12', 22, 'QG'],
- ['2015/11/13', 16, 'QG'],
- ['2015/11/14', 7, 'QG'],
- ['2015/11/15', 2, 'QG'],
- ['2015/11/16', 17, 'QG'],
- ['2015/11/17', 33, 'QG'],
- ['2015/11/18', 40, 'QG'],
- ['2015/11/19', 32, 'QG'],
- ['2015/11/20', 26, 'QG'],
- ['2015/11/21', 35, 'QG'],
- ['2015/11/22', 40, 'QG'],
- ['2015/11/23', 32, 'QG'],
- ['2015/11/24', 26, 'QG'],
- ['2015/11/25', 22, 'QG'],
- ['2015/11/26', 16, 'QG'],
- ['2015/11/27', 22, 'QG'],
- ['2015/11/28', 10, 'QG'],
- ['2015/11/08', 10, 'DD'],
- ['2015/11/09', 15, 'DD'],
- ['2015/11/10', 35, 'DD'],
- ['2015/11/11', 38, 'DD'],
- ['2015/11/12', 22, 'DD'],
- ['2015/11/13', 16, 'DD'],
- ['2015/11/14', 7, 'DD'],
- ['2015/11/15', 2, 'DD'],
- ['2015/11/16', 17, 'DD'],
- ['2015/11/17', 33, 'DD'],
- ['2015/11/18', 4, 'DD'],
- ['2015/11/19', 32, 'DD'],
- ['2015/11/20', 26, 'DD'],
- ['2015/11/21', 35, 'DD'],
- ['2015/11/22', 40, 'DD'],
- ['2015/11/23', 32, 'DD'],
- ['2015/11/24', 26, 'DD'],
- ['2015/11/25', 22, 'DD'],
- ['2015/11/26', 16, 'DD'],
- ['2015/11/27', 22, 'DD'],
- ['2015/11/28', 10, 'DD']]
- data_list = ['TY', 'SS', 'QG', 'DD']
- draw(data, data_list)
-
-
- if __name__ == '__main__':
- main()

- from pyecharts.charts import Bar, Line
- from pyecharts import options as opts
-
- x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
- a = [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3]
- b = [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2]
-
- bar = Bar()
- bar.add_xaxis(xaxis_data=x)
- bar.add_yaxis(series_name="蒸发量", y_axis=a, label_opts=opts.LabelOpts(is_show=False))
-
- # 增加一个y轴用于折线图的数据展示
- # splitline_opts背景辅助线
- bar.extend_axis(yaxis=opts.AxisOpts(type_="value", min_=0, max_=25, interval=5,
- axislabel_opts=opts.LabelOpts(formatter="{value}°C"),
- splitline_opts=opts.SplitLineOpts(is_show=True, linestyle_opts=opts.LineStyleOpts(opacity=1)),
- axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color='#d14a61'))
- )
- )
-
- # 左侧y轴及全局设置
- bar.set_global_opts(title_opts=opts.TitleOpts(title="2020年每月天气概况"),
- tooltip_opts=opts.TooltipOpts(is_show=True, trigger="axis", axis_pointer_type="cross"), # 显示提示框、鼠标辅助线
- xaxis_opts=opts.AxisOpts(name_location="middle", name_gap=30),
- yaxis_opts=opts.AxisOpts(type_="value", min_=0, max_=210, interval=42,
- axislabel_opts=opts.LabelOpts(formatter="{value}ml"),
- axistick_opts=opts.AxisTickOpts(is_show=True),
- axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color='#5793f3'))
- )
- )
-
- # 折线图
- line = Line()
- line.add_xaxis(xaxis_data=x)
-
- # z大于0可以使折现位于柱状上方
- line.add_yaxis(series_name="平均温度", yaxis_index=1, y_axis=b, label_opts=opts.LabelOpts(is_show=True), z=10)
-
- # 将两图写入一个坐标系中
- bar.overlap(line)
- bar.render('xxx.html')

(1)添加区域缩放
- '''
- 以折线图为例
- '''
- line.set_global_opts(
- title_opts=opts.TitleOpts(title='name'),
- datazoom_opts=opts.DataZoomOpts(
- is_show=True
- , range_start=0 # 默认开始位置(最小0)
- , range_end=100 # 默认结束位置(最大100)
- , orient='horizontal' # 横向horizontal和纵向vertical
- )
- )
(2)添加工具栏
- '''
- 以折线图为例
- '''
- line.set_global_opts(toolbox_opts=opts.ToolboxOpts(is_show=True))
(3)标记最大最小值
- '''
- 以折线图为例
- '''
- line.set_series_opts(markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),
- opts.MarkPointItem(type_="min", name="最小值")]))
(4)平均值标线
- '''
- 以折线图为例
- '''
- line.add_yaxis(
- "线名称", ylist, is_smooth=True,
- markline_opts=opts.MarkLineOpts(
- data=[opts.MarkLineItem(type_='average', name='平均值')]
- , linestyle_opts=opts.LineStyleOpts(
- type_='dashed' # 点状
- , opacity=0.5 # 透明度0-1值越小越透明
- , color='black'
- )
- )
- )
(5)保存为其他格式到本地
- '''
- 已折线图为例,除备注两行外其他代码与之前相同(注意需要引入两个库)
- '''
- from pyecharts import options
- from pyecharts.charts import Line
- from snapshot_selenium import snapshot
- from pyecharts.render import make_snapshot
-
-
- def draw(xlist, ylist):
- line = Line(init_opts=options.InitOpts(bg_color='#ffffff')) # 背景色更改为白色,默认为透明
- line.add_xaxis(xlist)
- line.add_yaxis("线名称", ylist, is_smooth=True)
- line.set_global_opts(title_opts=options.TitleOpts(title='name'))
- make_snapshot(snapshot, line.render(), "xxx.png") # 生成png格式文件
-
-
- def main():
- xlist = ['一', '二', '三', '四', '五']
- ylist = [3, 9, 15, 21, 27]
- draw(xlist, ylist)
-
-
- if __name__ == '__main__':
- main()

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。