Pyecharts绘图

本文目录

一、pyecharts绘制折线图、条形图

二、pyecharts绘制箱型图、涟漪图

三、pyecharts绘制k线图、双坐标轴图

四、pyecharts绘制日历图、漏斗图

五、pyecharts绘制仪表盘图、环形图

六、pyecharts绘制雷达图、旭日图

七、pyecharts绘制主题河流图、词云图

八、pyecharts绘制玫瑰图、地理图表

九、pyecharts绘图综合应用一

十、pyecharts绘图综合应用二

十一、pyecharts绘图综合应用三

十二、pyecharts绘图综合应用四

 

  一、pyecharts绘制折线图、条形图

1.折线图————主要类Line()

 1 '''当前新冠疫情全球最为严重的前六个国家分别为"美国", "巴西", "印度", "俄罗斯", "英国", "法国,
 2 其确诊人数(单位万)分别为 2978, 1195, 1155, 445, 429, 335,死亡人数(单位万)分别为
 3 120, 70.5, 81.6, 45.3, 10.9, 38.2, 28.5。请根据此数据绘制如下折线图比较这些国家的疫情情
 4 况。'''
 5 
 6 from pyecharts.charts import Line
 7 from pyecharts import options as opt
 8 v1 = ["美国", "巴西", "印度", "俄罗斯", "英国", "法国"]
 9 v2 = [2978, 1195, 1155, 445, 429, 335]
10 v3 = [120, 70.5, 81.6, 45.3, 10.9, 38.2, 28.5]
11 def line_tool1():
12     c = (
13         Line()
14         .add_xaxis(v1)
15         .add_yaxis('确诊人数(单位万)',v2, is_step=True)
16         .add_yaxis('死亡人数(单位万)',v3,is_smooth=True, is_selected=False)
17         .set_global_opts(title_opts=opt.TitleOpts(title='全球疫情情况',subtitle='前6名数据(单位万)'),
18                          toolbox_opts=opt.ToolboxOpts(is_show=True),
19                          axispointer_opts=opt.AxisPointerOpts(is_show=True)
20                          )
21         .set_series_opts(markpoint_opts=opt.MarkPointOpts(data=[opt.MarkPointItem(name='最大值',type_='max'),
22                                                                 opt.MarkPointItem(name='最小值',type_='min')]),
23                          markline_opts=opt.MarkLineOpts(data=[opt.MarkLineItem(name='平均值',type_='average')]))
24     )
25 
26     return c
27 line_tool1().render('render2.html')

效果演示

 

2.条形图————主要类Bar()

 1 from pyecharts.charts import Bar
 2 from pyecharts import options as opt
 3 from pyecharts.globals import ThemeType
 4 x=["美国", "巴西", "印度", "俄罗斯", "英国", "法国"]
 5 # bar = Bar()
 6 # bar.add_xaxis(x)
 7 # bar.add_yaxis("确诊人数(万)", [2978, 1195, 1155, 445, 429, 335])
 8 #默认将会在根目录下生成一个 render.html 的文件
 9 # bar.render('mybar.html')
10 #链式调用
11 bar = (
12     Bar(init_opts=opt.InitOpts(theme=ThemeType.LIGHT))
13     # Bar()
14     .add_xaxis(x)
15     .add_yaxis("确诊人数(万)", [2978, 1195, 1155, 445, 429, 335])
16     .add_yaxis("治愈人数(万)",[710,230,101,50,92,52])
17     #工具箱配置
18     .set_global_opts(title_opts=opt.TitleOpts(title="世界疫情", subtitle='世界疫情今年'),
19         toolbox_opts=opt.ToolboxOpts(is_show=True,
20         orient='vertical',
21         feature=opt.ToolBoxFeatureOpts(
22         data_zoom=opt.ToolBoxFeatureDataZoomOpts(is_show=False))),
23         legend_opts=opt.LegendOpts(is_show=True),
24         visualmap_opts=opt.VisualMapOpts(is_show=True,type_='color',min_=0,max_=3000),
25         xaxis_opts=opt.AxisOpts(name='x',axispointer_opts=opt.AxisPointerOpts(is_show=True),splitline_opts=opt.SplitLineOpts(is_show=True)),
26         yaxis_opts=opt.AxisOpts(name='y',axispointer_opts=opt.AxisPointerOpts(is_show=True),splitline_opts=opt.SplitLineOpts(is_show=True))
27     )
28     .set_series_opts(markpoint_opts=opt.MarkPointOpts(data=[opt.MarkPointItem(name="最大值",type_='max'),
29                                                             opt.MarkPointItem(name="最小值",type_='min')]),
30                      label_opts=opt.LabelOpts(color='red')
31     )
32 
33 )
34 bar.render('mybar4.html')

效果演示

  二、pyecharts绘制箱型图、涟漪图

 

1.箱型图————主要类Boxplot()

 1 """练习:
 2 根据如下数据绘制箱型图。"""
 3 import pandas as pd
 4 from pyecharts.charts import Boxplot
 5 from pyecharts import options as opt
 6 data = pd.read_csv('data/box.csv',index_col=0, encoding='gb2312')
 7 group = data.销售经理.unique()
 8 def group():
 9     df = []
10     group = data.销售经理.unique()
11     for x in group:
12         a = data.利润额[data.销售经理 == x]
13         df.append(a)
14     return df
15 
16 box1, box2, box3, box4, box5, box6 = list(group()[0]), list(group()[1]), list(group()[2]), list(group()[3]), list(group()[4]), list(group()[5])
17 name = ['张怡莲', '王倩倩', '郝杰', '杨洪光', '江奕健', '姜伟']
18 # 箱型图对数据进行预处理
19 v1_ = Boxplot.prepare_data([box1])
20 v2_ = Boxplot.prepare_data([box2])
21 v3_ = Boxplot.prepare_data([box3])
22 v4_ = Boxplot.prepare_data([box4])
23 v5_ = Boxplot.prepare_data([box5])
24 v6_ = Boxplot.prepare_data([box6])
25 
26 def boxtool() -> Boxplot:
27     c = (
28         Boxplot()
29         .add_xaxis(['2019业绩'])
30         .add_yaxis(name[0], v1_)
31         .add_yaxis(name[1], v2_)
32         .add_yaxis(name[2], v3_)
33         .add_yaxis(name[3], v4_)
34         .add_yaxis(name[4], v5_)
35         .add_yaxis(name[5], v6_)
36         .set_global_opts(title_opts=opt.TitleOpts(title='业绩分析',subtitle='不同人员业绩'),
37                          toolbox_opts=opt.ToolboxOpts(is_show=True))
38     )
39     return c
40 boxtool().render('../boxrender2.html')

效果演示

 

2.涟漪图————主要类EffectScatter()

 1 # 根据以下数据绘制散点图
 2 from pyecharts.charts import EffectScatter
 3 from pyecharts import options as opt
 4 from pyecharts.globals import SymbolType
 5 import numpy as np
 6 A1=np.array([0,0])
 7 B1=np.array(([2,0],[0,2]))
 8 #以 A1 为均值,B1 为协方差矩阵,生成正态分布的随机数 每次生成不一样
 9 C1=np.random.multivariate_normal(A1,B1,200)
10 C2=np.random.multivariate_normal(A1+0.2,B1+0.2,200)
11 # print(C1[::, 0])
12 # print(C1[:, 0][::20])
13 v1 = C1[:, 0][::10]
14 v2 = C2[:, 0][::10]
15 def effectscatter3()->EffectScatter:
16     c = (
17         EffectScatter()
18         .add_xaxis(v1)
19         # 点标记sysbol,pyecharts有装们处理点形状的类
20         .add_yaxis('价值', v2, symbol=SymbolType.ARROW)
21         .set_global_opts(title_opts=opt.TitleOpts(title='正态分布随机数'),
22                          toolbox_opts=opt.ToolboxOpts(is_show=True, pos_left='40%'),
23                          legend_opts=opt.LegendOpts(is_show=False),
24                          visualmap_opts=opt.VisualMapOpts(is_show=False, max_=4, min_=-4)
25                          )
26     )
27     return c
28 effectscatter3().render('../effect3.html')

效果演示

 

  三、pyecharts绘制k线图、双坐标轴图

 

1.k线图————主要类Kline()

 1 import json
 2 from pyecharts.charts import Kline
 3 from pyecharts import options as opt
 4 with open(r'C:\Users\LENOVO\Desktop\K_data.json', 'r', encoding='utf-8-sig') as f1:
 5     data = json.load(f1)
 6 with open(r'C:\Users\LENOVO\Desktop\K_date.json', 'r', encoding='utf-8-sig') as f2:
 7     date = json.load(f2)
 8 
 9 def klineltool()->Kline:
10     c = (
11         Kline()
12         .add_xaxis(date)
13         .add_yaxis('股票k', data)
14         .set_global_opts(title_opts=opt.TitleOpts(title='企业股票价格走势',subtitle='2019 年股价走势'),
15                          toolbox_opts=opt.ToolboxOpts(is_show=True),
16                          datazoom_opts=opt.DataZoomOpts(is_show=True),#缩放x轴
17                          xaxis_opts=opt.AxisOpts(is_show=True, axislabel_opts=opt.LabelOpts(rotate=45), splitarea_opts=opt.SplitAreaOpts(areastyle_opts=opt.AreaStyleOpts(
18                              opacity=1))))
19                          #分割区域  #规范化is_scale
20                          # yaxis_opts=opt.AxisOpts(is_scale=True, splitarea_opts=opt.SplitAreaOpts(areastyle_opts=opt.AreaStyleOpts(
21                          #     opacity=1))))#透明度
22         .set_series_opts(markpoint_opts=opt.MarkPointOpts(data=[opt.MarkPointItem(name='最大值',type_='max', itemstyle_opts={"color": "red"}),
23                                                               opt.MarkPointItem(name='最小值', type_='min',itemstyle_opts={"color": "blue"})],),
24                          # itemstyle_opts=opt.ItemStyleOpts(color='red', color0='blue')
25                          )
26     )
27     return c
28 klineltool().render('../Kline2.htm')

效果演示

2.双坐标图————主要类Bar()

 1 from pyecharts import options as opt
 2 from pyecharts.charts import Scatter, Bar, Line
 3 v1=['东北', '中南', '华东', '华北', '西北', '西南']
 4 v2=[107.1, 146.19, 169.97, 95.77, 29.24, 43.98]
 5 v3=[9.22, 22.95, 20.19, 15.56, 2.69, 3.81]
 6 v4=[2592, 3543, 3975, 1979, 617, 1084]
 7 # 柱形图与折线图组合
 8 
 9 def bartool()->Bar:
10     c = (
11         Bar()
12         .add_xaxis(v1)
13         .add_yaxis('销售额', v2)
14         .add_yaxis('利润额', v3)
15         .set_global_opts(yaxis_opts=opt.AxisOpts(axislabel_opts=opt.LabelOpts(formatter='{value}万元')),
16                          title_opts=opt.TitleOpts(title='区域销售业绩比较分析',subtitle='2019年企业状况分析'),)
17         .extend_axis(yaxis=opt.AxisOpts(axislabel_opts=opt.LabelOpts(formatter='{value}件'), interval=500),
18                      xaxis=opt.AxisOpts(axislabel_opts=opt.LabelOpts(), type_="category", position='top', axisline_opts=opt.AxisLineOpts(is_on_zero=False)),
19                      xaxis_data=v1[::-1]) #扩展y轴
20     )
21     line = (
22         Line()
23         .add_xaxis(v1[::-1])
24         .add_yaxis('销售量',v4, yaxis_index=1)
25 
26     )
27     c.overlap(line) #在原图上覆盖新图
28     return c
29 bartool().render('../barline3.html')

效果演示

 

 

  四、pyecharts绘制日历图、漏斗图

 

1.日历图————主要类Calendar()

 1 '''已知某人的微信步数可以用如下数据表示,请绘制其微信步数的日历图。
 2 '''
 3 import datetime
 4 import random
 5 from pyecharts import options as opt
 6 from pyecharts.charts import Calendar
 7 
 8 begin = datetime.date(2021, 1, 1)
 9 end = datetime.date(2021, 12, 31)
10 data = [
11     [str(begin + datetime.timedelta(days=i)), random.randint(1000, 25000)]
12     for i in range((end - begin).days + 1)
13 ]
14 data0 = [i[1] for i in data]
15 mi = min(data0)
16 ma = max(data0)
17 print(mi)
18 print(ma)
19 
20 
21 def calendar_base()->Calendar:
22     c = (
23         Calendar()
24 
25         .add('微信步数', data, calendar_opts=opt.CalendarOpts(range_=2021, daylabel_opts=opt.CalendarDayLabelOpts(name_map='cn'), #设置中文
26                                                         monthlabel_opts=opt.CalendarMonthLabelOpts(name_map='cn')))#设置中文
27         .set_global_opts(visualmap_opts=opt.VisualMapOpts(is_show=True, min_=mi, max_=ma, is_piecewise=True, orient='horizontal', pos_bottom='50%', pos_left='10%'))
28 
29 
30     )
31     return c
32 calendar_base().render("caltool.html")

效果演示

2.漏斗图————主要类Funnel()

 1 """当前新冠疫情全球最为严重的前六个国家分别为"美国", "巴西", "印度", "俄罗斯", "英国", "
 2 法国,其确诊人数(单位万)分别为 2978, 1195, 1155, 445, 429, 335
 3 ,请根据此数据绘制出如下漏斗图。
 4 """
 5 from pyecharts import options as opt
 6 from pyecharts.charts import Calendar, Funnel
 7 
 8 country = ["美国", "巴西", "印度", "俄罗斯", "英国", "法国"]
 9 mantatal = [2978, 1195, 1155, 445, 429, 335]
10 
11 data = list(zip(country, mantatal))
12 
13 def funneltool()->Funnel:
14     c = (
15         Funnel()
16         .add('',data_pair=data,
17              sort_='ascending')
18             .set_global_opts(title_opts=opt.TitleOpts(title="世界疫情数据"),
19                              toolbox_opts=opt.ToolboxOpts(is_show=True,pos_top="70%"))
20 
21         .set_series_opts(label_opts=opt.LabelOpts(position='left'))
22     )
23     return c
24 funneltool().render('funnel.html')

效果演示

 

 

  五、pyecharts绘制仪表盘图、环形图

 

1.仪表盘图————主要类Gauge()

 1 from pyecharts.charts import Gauge
 2 from pyecharts import options as opt
 3 data = [('达标率',60.5)]
 4 def gaugetool()->Gauge:
 5     c = (
 6         Gauge()
 7         .add('某陶瓷某月生产情况', data_pair=data,
 8              axisline_opts=opt.LineStyleOpts(color=[(0.3,'steelbule'),(0.7,'#53868B'),(1, '#EEC900')], width=60),
 9              title_label_opts=opt.GaugeTitleOpts(offset_center=[0, 60], color='steelblue', font_size=20),
10              detail_label_opts=opt.GaugeDetailOpts(font_size=40))
11         .set_global_opts(
12             title_opts=opt.TitleOpts(title="某陶瓷生产情况", subtitle='5月份生产情况'),
13             toolbox_opts=opt.ToolboxOpts(is_show=True),
14             legend_opts=opt.LegendOpts(is_show=True)
15         )
16     )
17     return c
18 gaugetool().render('gauge2.html')

效果演示

2.环形图————主要类Pie()

 1 from pyecharts.charts import Pie
 2 from pyecharts import options as opt
 3 v1=['初中及其以下', '大专', '本科', '硕士及其以上', '高中']
 4 v2=[123.9, 111.96, 137.5, 47.8, 171.07]
 5 
 6 def pietool()->Pie:
 7     c = (
 8         Pie()
 9         .add(series_name='', data_pair=list(zip(v1, v2)),radius=['40%', '60%'],
10              rosetype="area")
11         .set_colors(["blue", "green", "purple", "red", "silver"])
12         .set_global_opts(
13             title_opts=opt.TitleOpts(title="2019不同教育集体的购买力", subtitle="2019年销售经营情况"),
14             toolbox_opts=opt.ToolboxOpts(is_show=True),
15             legend_opts=opt.LegendOpts(orient="vertical", pos_left="2%", pos_top="35%")
16         )
17         .set_series_opts(
18             label_opts=opt.LabelOpts(formatter="{b}:{c}")
19         )
20 
21     )
22     return c
23 pietool().render("pie2.html")

效果演示

 

 

  六、pyecharts绘制雷达图、旭日图

 

1.雷达图————主要类Radar()

 1 from pyecharts.charts import Radar
 2 from pyecharts import options as opt
 3 
 4 
 5 v1 = ['东北', '中南', '华东', '华北', '西北', '西南']
 6 v2 = [107.42, 146.21, 169.97, 96.28, 29.24, 43.98]
 7 v3 = [9.09, 22.96, 20.19, 15.65, 2.69, 3.81]
 8 
 9 def radartool()->Radar:
10     c = (
11         Radar()
12         .add_schema(schema=[
13             opt.RadarIndicatorItem(name='东北', max_=200, color="red"),
14             opt.RadarIndicatorItem(name='中南', max_=200, color="pink"),
15             opt.RadarIndicatorItem(name='华东', max_=200, color="blue"),
16             opt.RadarIndicatorItem(name='华北', max_=200, color="purple"),
17             opt.RadarIndicatorItem(name='西北', max_=200, color="yellow"),
18             opt.RadarIndicatorItem(name='西南', max_=200, color="black")
19         ], shape="circle")
20         .add('销售额',data=[v2], color="red")
21         .add('利润额',data=[v3], color="blue")
22         .set_global_opts(
23                          toolbox_opts=opt.ToolboxOpts(is_show=True),
24                          title_opts=opt.TitleOpts(title="区域销售额与利润额的比较分析", subtitle="2019 年企业经营状况"))
25         .set_series_opts(label_opts=opt.LabelOpts(is_show=False))
26 
27 
28     )
29     return c
30 radartool().render("radar2.html")

效果演示

2.旭日图————主要类Sunburst()

 1 from pyecharts.charts import Sunburst
 2 from pyecharts import options as opt
 3 
 4 def sunbursttool()->Sunburst:
 5     data = [
 6         opt.SunburstItem(name="王董", value=60, children=[
 7             opt.SunburstItem(name="事务总监", value=60, children=[
 8                 opt.SunburstItem(name="项目经理B", value=20),
 9                 opt.SunburstItem(name="产品经理A", value=20),
10                 opt.SunburstItem(name="项目经理A", value=10),
11                 opt.SunburstItem(name="产品经理B", value=10),
12             ])
13         ]),
14         opt.SunburstItem(name="李董", value=40, children=[
15             opt.SunburstItem(name="开发总监", value=40, children=[
16                 opt.SunburstItem(name="开发经理A", value=15),
17                 opt.SunburstItem(name="开发经理B", value=25),
18 
19             ])
20         ]),
21     ]
22     c = (
23         Sunburst()
24         .add("", data_pair=data,radius=
25              [0,'90%'])
26         .set_series_opts(label_opts=opt.LabelOpts(formatter="{b}:{c}"))
27     )
28     return c
29 sunbursttool().render("sunburst.html")

效果演示

 

 

  七、pyecharts绘制主题河流图、词云图

 

1.主题河流图————主要类ThemeRiver()

方法一:

 1 from pyecharts.charts import ThemeRiver
 2 from pyecharts import options as opt
 3 import json
 4 
 5 with open(r'themeriver.json', 'r', encoding='utf-8') as f:
 6     data = json.load(f)
 7 data1 = list(set([i[2] for i in data]))
 8 
 9 def River()->ThemeRiver:
10     c = (
11         ThemeRiver()
12         .add(data1,data, singleaxis_opts=opt.SingleAxisOpts(type_="time", pos_bottom="10%"))
13         .set_global_opts(title_opts=opt.TitleOpts(title="不同类型商品销售额比较分析",subtitle="2019 年企业经营状况"),
14                          toolbox_opts=opt.ToolboxOpts(is_show=True),
15                          axispointer_opts=opt.AxisPointerOpts(is_show=True), #方法一添加数据框随着x轴的变化而变化
16                          datazoom_opts=[opt.DataZoomOpts(pos_bottom="-2%")],
17                          )
18         .set_series_opts()
19     )
20     return c
21 River().render("river.html")

方法二:
 1 from pyecharts.charts import ThemeRiver
 2 from pyecharts import options as opt
 3 import json
 4 
 5 with open(r'themeriver.json', 'r', encoding='utf-8') as f:
 6     data = json.load(f)
 7 data1 = list(set([i[2] for i in data]))
 8 
 9 def River()->ThemeRiver:
10     c = (
11         ThemeRiver()
12         .add(data1, data, singleaxis_opts=opt.SingleAxisOpts(type_="time", pos_bottom="10%"))
13         .set_colors(["#9AFF9A","#00BFFF","#FF6A6A"])
14         .set_global_opts(title_opts=opt.TitleOpts(title="不同类型商品销售额比较分析",subtitle="2019 年企业经营状况"),
15                          toolbox_opts=opt.ToolboxOpts(is_show=True),#方法二添加数据框随着x轴的变化而变化
16                          tooltip_opts=opt.TooltipOpts(is_show=True, trigger="axis"),
17                          datazoom_opts=[opt.DataZoomOpts(pos_bottom="-2%")],
18                          )
19     )
20     return c
21 River().render("river2.html")

 

效果演示

2.词云图————主要类wordCloud()

 1 from pyecharts.charts import WordCloud
 2 from pyecharts import options as opt
 3 from pyecharts.globals import SymbolType
 4 import json
 5 
 6 
 7 with open(r'ciyun.json', 'r', encoding='utf-8') as f:
 8     data = json.load(f)
 9 
10 # v1 = [tuple(i[0],int(i[1])) for i in data]
11 # print(v1)
12 def Ciyun()->WordCloud:
13     c = (
14         WordCloud()
15         # .add(series_name="词云图", data_pair=data,shape=SymbolType.DIAMOND ,word_size_range=[6,60])
16         # .add(series_name="词云图", data_pair=data, word_size_range=[6, 60], mask_image='20191017202924560.jpg') #按照图片轮廓填充词云
17         .add(series_name="词云图", data_pair=data, word_size_range=[6, 60]) #maker默认是ctrcle
18     )
19     return c
20 Ciyun().render("Ciyun1.html")

效果演示

 

 

  八、pyecharts绘制玫瑰图、地理图表

1.玫瑰图————主要类Pie()

示例一:

 1 from pyecharts import options as opts
 2 from pyecharts.charts import Pie
 3 v1=['专业人员', '公司白领', '技术工人', '普通工人', '管理人员']
 4 v2 = [50.03, 54.54, 53.34, 382.55, 51.77]
 5 #画玫瑰图
 6 def rosetype() -> Pie:
 7      c = (
 8      Pie()
 9      .add("",[list(z) for z in zip(v1, v2)],radius=["30%", "75%"], center=["50%", "55%"], rosetype="radius",
10      label_opts=opts.LabelOpts(is_show=False),
11         )
12      .set_colors(["blue", "green", "purple", "red", "silver"])  # 设置颜色
13      .set_global_opts(title_opts=opts.TitleOpts(title="2019 年不同职业群体的购买力分析",
14                                                 subtitle="2019 年销售经营状况分析"),
15                       legend_opts=opts.LegendOpts(orient="horizontal", pos_top="5%",
16                                                   pos_left="30%"),
17                       toolbox_opts=opts.ToolboxOpts())
18      .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
19                     )
20      return c
21 
22 
23 # 展示数据可视化图表
24 rosetype().render('data/rose.html')

效果演示

示例二:

 1 from pyecharts.charts import Pie
 2 from pyecharts import options as opt
 3 
 4 v1=['专业人员', '公司白领', '技术工人', '普通工人', '管理人员']
 5 v2 = [50.03, 54.54, 53.34, 382.55, 51.77]
 6 
 7 def pie_tool()->Pie:
 8     c = (
 9         Pie()
10         .add("玫瑰图", list(zip(v1, v2)), rosetype="radius", radius=['30%',"60%"], is_clockwise=False) # 饼图的扇区是否是顺时针排布。
11         .set_colors(['blue',"green","purple", "red", "grey"])
12         .set_global_opts(title_opts=opt.TitleOpts(title="2019年不同职业群体的购买力", subtitle="2019年不同职业"),
13                          toolbox_opts=opt.ToolboxOpts(is_show=True),
14                          legend_opts=opt.LegendOpts(orient="vertical", pos_left="15%", pos_top="40%"))
15         .set_series_opts(label_opts=opt.LabelOpts(formatter='{b}:{c}'))
16     )
17     return c
18 pie_tool().render("piemeigui.html")

效果演示

2.地理图表图————主要类Map()

 1 from pyecharts import options as opts
 2 from pyecharts.charts import Map
 3 from pyecharts.faker import Faker
 4 c = (
 5      Map()
 6      .add("商家 A", [list(z) for z in zip(Faker.provinces, Faker.values())], "china")
 7      .set_global_opts( title_opts=opts.TitleOpts(title="Map-VisualMap分段型)"),
 8                                                 visualmap_opts=opts.VisualMapOpts(max_=200, is_piecewise=True),
 9                     )
10     .render("data/map_visualmap_piecewise.html")
11 )

效果演示

  九、pyecharts绘图综合应用一

实例一:

1.并行多图————主要类Grid()以及画不同类型的图类Line(),Scatter()

 1 # 绘图综合应用一
 2 from pyecharts.charts import Grid,Line,Scatter
 3 from pyecharts import options
 4 from pyecharts.faker import Faker
 5 def linetool()->Line:
 6     line1 = (
 7 
 8         Line()
 9         .add_xaxis(Faker.choose())
10         .add_yaxis('商家 C', Faker.values())
11         .add_yaxis('商家 D', Faker.values())
12         .set_global_opts(title_opts=options.TitleOpts(title='折线图'),
13                         legend_opts=options.LegendOpts(pos_left='20%')
14                          )
15             )
16     return line1
17 
18 def scattertool()->Scatter:
19     scatter1 = (
20 
21         Scatter()
22         .add_xaxis(Faker.choose())
23          .add_yaxis('商家 A',Faker.values())
24          .add_yaxis('商家 B',Faker.values())
25          .set_global_opts(
26          title_opts=options.TitleOpts(title='散点图',pos_right='40%'),
27          legend_opts=options.LegendOpts(pos_right='20%')
28                         )
29     )
30     return scatter1
31 if __name__ == '__main__':
32     grid = (
33      Grid()
34      .add(linetool(), grid_opts=options.GridOpts(pos_right='55%'))
35      .add(scattertool(), grid_opts=options.GridOpts(pos_left='55%'))
36     )
37     grid.render('grid2.html')

效果演示

实例二:

2.并行多图————主要类Grid()以及画不同类型的图类Bar(),Line()

 1 from pyecharts.charts import Line, Bar, Grid
 2 from pyecharts import options as opt
 3 from pyecharts.faker import Faker
 4 def bartool()->Bar:
 5     c = (
 6         Bar()
 7         .add_xaxis(Faker.choose())
 8         .add_yaxis('商家A',Faker.values())
 9         .add_yaxis('商家B', Faker.values())
10         .set_global_opts(title_opts=opt.TitleOpts(title="Grid-Bar", pos_top="1%"),
11                          legend_opts=opt.LegendOpts(pos_top="1%"))
12     )
13     return c
14 
15 def Linetool()->Line:
16     c = (
17         Line()
18         .add_xaxis(Faker.choose())
19         .add_yaxis('商家A', Faker.values())
20         .add_yaxis('商家B', Faker.values())
21         .set_global_opts(title_opts=opt.TitleOpts(title="Grid-Line", pos_top="55%"),
22                          legend_opts=opt.LegendOpts(pos_top="55%"))
23     )
24     return c
25 
26 if __name__ == '__main__':
27     grid = (
28         Grid()
29         .add(bartool(), grid_opts=opt.GridOpts(pos_top="10%", pos_bottom="55%"))
30         .add(Linetool(), grid_opts=opt.GridOpts(pos_top="55%"))
31         .render("grid2.html")
32     )

效果演示

  十、pyecharts绘图综合应用二

实例一SimplePageLayout简单布局

1.顺序组合图————主要类Page()以及画不同类型的图类Bar(),Line(),Pie(),grid()

  1 from pyecharts import options as opts
  2 from pyecharts.charts import Bar, Grid, Line, Liquid, Page, Pie
  3 from pyecharts.faker import Faker
  4 def bar_datazoom_slider() -> Bar:
  5     c = (
  6         Bar()
  7         .add_xaxis(Faker.days_attrs)
  8         .add_yaxis("商家A", Faker.days_values)
  9         .set_global_opts(
 10             title_opts=opts.TitleOpts(title="Bar-DataZoom(slider-水平)"),
 11             datazoom_opts=[opts.DataZoomOpts()],
 12         )
 13     )
 14     return c
 15 def line_markpoint() -> Line:
 16     c = (
 17         Line()
 18         .add_xaxis(Faker.choose())
 19         .add_yaxis(
 20             "商家A",
 21             Faker.values(),
 22             markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="min")]),
 23         )
 24         .add_yaxis(
 25             "商家B",
 26             Faker.values(),
 27             markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max")]),
 28         )
 29         .set_global_opts(title_opts=opts.TitleOpts(title="Line-MarkPoint"))
 30     )
 31     return c
 32 def pie_rosetype() -> Pie:
 33     v = Faker.choose()
 34     c = (
 35         Pie()
 36         .add(
 37             "",
 38             [list(z) for z in zip(v, Faker.values())],
 39             radius=["30%", "75%"],
 40             center=["25%", "50%"],
 41             rosetype="radius",
 42             label_opts=opts.LabelOpts(is_show=False),
 43         )
 44         .add(
 45             "",
 46             [list(z) for z in zip(v, Faker.values())],
 47             radius=["30%", "75%"],
 48             center=["75%", "50%"],
 49             rosetype="area",
 50         )
 51         .set_global_opts(title_opts=opts.TitleOpts(title="Pie-玫瑰图示例"))
 52     )
 53     return c
 54 def grid_mutil_yaxis() -> Grid:
 55     x_data = ["{}月".format(i) for i in range(1, 13)]
 56     bar = (
 57         Bar()
 58         .add_xaxis(x_data)
 59         .add_yaxis(
 60             "蒸发量",
 61             [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3],
 62             yaxis_index=0,
 63             color="#d14a61",
 64         )
 65         .add_yaxis(
 66             "降水量",
 67             [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3],
 68             yaxis_index=1,
 69             color="#5793f3",
 70         )
 71         .extend_axis(
 72             yaxis=opts.AxisOpts(
 73                 name="蒸发量",
 74                 type_="value",
 75                 min_=0,
 76                 max_=250,
 77                 position="right",
 78                 axisline_opts=opts.AxisLineOpts(
 79                     linestyle_opts=opts.LineStyleOpts(color="#d14a61")
 80                 ),
 81                 axislabel_opts=opts.LabelOpts(formatter="{value} ml"),
 82             )
 83         )
 84         .extend_axis(
 85             yaxis=opts.AxisOpts(
 86                 type_="value",
 87                 name="温度",
 88                 min_=0,
 89                 max_=25,
 90                 position="left",
 91                 axisline_opts=opts.AxisLineOpts(
 92                     linestyle_opts=opts.LineStyleOpts(color="#675bba")
 93                 ),
 94                 axislabel_opts=opts.LabelOpts(formatter="{value} °C"),
 95                 splitline_opts=opts.SplitLineOpts(
 96                     is_show=True, linestyle_opts=opts.LineStyleOpts(opacity=1)
 97                 ),
 98             )
 99         )
100         .set_global_opts(
101             yaxis_opts=opts.AxisOpts(
102                 name="降水量",
103                 min_=0,
104                 max_=250,
105                 position="right",
106                 offset=80,
107                 axisline_opts=opts.AxisLineOpts(
108                     linestyle_opts=opts.LineStyleOpts(color="#5793f3")
109                 ),
110                 axislabel_opts=opts.LabelOpts(formatter="{value} ml"),
111             ),
112             title_opts=opts.TitleOpts(title="Grid-多 Y 轴示例"),
113             tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
114         )
115     )
116 
117     line = (
118         Line()
119         .add_xaxis(x_data)
120         .add_yaxis(
121             "平均温度",
122             [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2],
123             yaxis_index=2,
124             color="#675bba",
125             label_opts=opts.LabelOpts(is_show=False),
126         )
127     )
128 
129     bar.overlap(line)
130     return Grid().add(
131         bar, opts.GridOpts(pos_left="5%", pos_right="20%"), is_control_axis_index=True
132     )
133 
134 def page_simple_layout():
135     page = Page(layout=Page.SimplePageLayout)
136     page.add(
137         bar_datazoom_slider(),
138         line_markpoint(),
139         pie_rosetype(),
140         grid_mutil_yaxis(),
141     )
142     page.render("page_simple_layout.html")
143 
144 if __name__ == "__main__":
145     page_simple_layout()

效果演示

实例二DraggablePageLayout可拖拽布局

2.顺序组合图————主要类()以及画不同类型的图类

  1 from pyecharts import options as opts
  2 from pyecharts.charts import Bar, Grid, Line, Liquid, Page, Pie
  3 from pyecharts.faker import Faker
  4 def bar_datazoom_slider() -> Bar:
  5     c = (
  6         Bar()
  7         .add_xaxis(Faker.days_attrs)
  8         .add_yaxis("商家A", Faker.days_values)
  9         .set_global_opts(
 10             title_opts=opts.TitleOpts(title="Bar-DataZoom(slider-水平)"),
 11             datazoom_opts=[opts.DataZoomOpts()],
 12         )
 13     )
 14     return c
 15 def line_markpoint() -> Line:
 16     c = (
 17         Line()
 18         .add_xaxis(Faker.choose())
 19         .add_yaxis(
 20             "商家A",
 21             Faker.values(),
 22             markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="min")]),
 23         )
 24         .add_yaxis(
 25             "商家B",
 26             Faker.values(),
 27             markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max")]),
 28         )
 29         .set_global_opts(title_opts=opts.TitleOpts(title="Line-MarkPoint"))
 30     )
 31     return c
 32 def pie_rosetype() -> Pie:
 33     v = Faker.choose()
 34     c = (
 35         Pie()
 36         .add(
 37             "",
 38             [list(z) for z in zip(v, Faker.values())],
 39             radius=["30%", "75%"],
 40             center=["25%", "50%"],
 41             rosetype="radius",
 42             label_opts=opts.LabelOpts(is_show=False),
 43         )
 44         .add(
 45             "",
 46             [list(z) for z in zip(v, Faker.values())],
 47             radius=["30%", "75%"],
 48             center=["75%", "50%"],
 49             rosetype="area",
 50         )
 51         .set_global_opts(title_opts=opts.TitleOpts(title="Pie-玫瑰图示例"))
 52     )
 53     return c
 54 def grid_mutil_yaxis() -> Grid:
 55     x_data = ["{}月".format(i) for i in range(1, 13)]
 56     bar = (
 57         Bar()
 58         .add_xaxis(x_data)
 59         .add_yaxis(
 60             "蒸发量",
 61             [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3],
 62             yaxis_index=0,
 63             color="#d14a61",
 64         )
 65         .add_yaxis(
 66             "降水量",
 67             [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3],
 68             yaxis_index=1,
 69             color="#5793f3",
 70         )
 71         .extend_axis(
 72             yaxis=opts.AxisOpts(
 73                 name="蒸发量",
 74                 type_="value",
 75                 min_=0,
 76                 max_=250,
 77                 position="right",
 78                 axisline_opts=opts.AxisLineOpts(
 79                     linestyle_opts=opts.LineStyleOpts(color="#d14a61")
 80                 ),
 81                 axislabel_opts=opts.LabelOpts(formatter="{value} ml"),
 82             )
 83         )
 84         .extend_axis(
 85             yaxis=opts.AxisOpts(
 86                 type_="value",
 87                 name="温度",
 88                 min_=0,
 89                 max_=25,
 90                 position="left",
 91                 axisline_opts=opts.AxisLineOpts(
 92                     linestyle_opts=opts.LineStyleOpts(color="#675bba")
 93                 ),
 94                 axislabel_opts=opts.LabelOpts(formatter="{value} °C"),
 95                 splitline_opts=opts.SplitLineOpts(
 96                     is_show=True, linestyle_opts=opts.LineStyleOpts(opacity=1)
 97                 ),
 98             )
 99         )
100         .set_global_opts(
101             yaxis_opts=opts.AxisOpts(
102                 name="降水量",
103                 min_=0,
104                 max_=250,
105                 position="right",
106                 offset=80,
107                 axisline_opts=opts.AxisLineOpts(
108                     linestyle_opts=opts.LineStyleOpts(color="#5793f3")
109                 ),
110                 axislabel_opts=opts.LabelOpts(formatter="{value} ml"),
111             ),
112             title_opts=opts.TitleOpts(title="Grid-多 Y 轴示例"),
113             tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
114         )
115     )
116 
117     line = (
118         Line()
119         .add_xaxis(x_data)
120         .add_yaxis(
121             "平均温度",
122             [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2],
123             yaxis_index=2,
124             color="#675bba",
125             label_opts=opts.LabelOpts(is_show=False),
126         )
127     )
128 
129     bar.overlap(line)
130     return Grid().add(
131         bar, opts.GridOpts(pos_left="5%", pos_right="20%"), is_control_axis_index=True
132     )
133 
134 def page_simple_layout():
135     page = Page(layout=Page.DraggablePageLayout)
136     page.add(
137         bar_datazoom_slider(),
138         line_markpoint(),
139         pie_rosetype(),
140         grid_mutil_yaxis(),
141     )
142     page.render("page_simple_layout.html")
143 
144 if __name__ == "__main__":
145     page_simple_layout()

重新渲染方式

  1. 使用浏览器打开渲染后的 .html 文件,默认为 render.html。拖拉/调整图表位置和大小,当调整到一 个适合的布局
  2. 点击左上角save_config 保存为json格式
  3. 再次渲染图表并指定其布局配置

说明:

  

1 from pyecharts.charts import Page
2 if __name__ == '__main__':
3     Page.save_resize_html(source=r"C:\Users\Administrator\PycharmProjects\pythonProject\page_draggable_layout.html",
4                           cfg_file=r"C:\Users\Administrator\Downloads\chart_config (1).json",
5                           dest=r"C:\Users\Administrator\PycharmProjects\pythonProject\page_simple_layout_daremo.html")

效果演示

 

  十一、pyecharts绘图综合应用三

实例一add组合多图

1.选项卡多图————主要类Tab()以及画不同类型的图类Tab(),Line(),Pie(),grid(),bar()

  1 from pyecharts import options as opts
  2 from pyecharts.charts import Bar, Grid, Line, Liquid, Page, Pie, Tab
  3 from pyecharts.faker import Faker
  4 def bar_datazoom_slider() -> Bar:
  5     c = (
  6         Bar()
  7         .add_xaxis(Faker.days_attrs)
  8         .add_yaxis("商家A", Faker.days_values)
  9         .set_global_opts(
 10 
 11             title_opts=opts.TitleOpts(title="Bar-DataZoom(slider-水平)"),
 12             datazoom_opts=[opts.DataZoomOpts()],
 13         )
 14     )
 15     return c
 16 def line_markpoint() -> Line:
 17     c = (
 18         Line()
 19         .add_xaxis(Faker.choose())
 20         .add_yaxis(
 21             "商家A",
 22             Faker.values(),
 23             markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="min")]),
 24         )
 25         .add_yaxis(
 26             "商家B",
 27             Faker.values(),
 28             markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max")]),
 29         )
 30         .set_global_opts(title_opts=opts.TitleOpts(title="Line-MarkPoint"))
 31     )
 32     return c
 33 def pie_rosetype() -> Pie:
 34     v = Faker.choose()
 35     c = (
 36         Pie()
 37         .add(
 38             "",
 39             [list(z) for z in zip(v, Faker.values())],
 40             radius=["30%", "75%"],
 41             center=["25%", "50%"],
 42             rosetype="radius",
 43             label_opts=opts.LabelOpts(is_show=False),
 44         )
 45         .add(
 46             "",
 47             [list(z) for z in zip(v, Faker.values())],
 48             radius=["30%", "75%"],
 49             center=["75%", "50%"],
 50             rosetype="area",
 51         )
 52         .set_global_opts(title_opts=opts.TitleOpts(title="Pie-玫瑰图示例"))
 53     )
 54     return c
 55 def grid_mutil_yaxis() -> Grid:
 56     x_data = ["{}月".format(i) for i in range(1, 13)]
 57     bar = (
 58         Bar()
 59         .add_xaxis(x_data)
 60         .add_yaxis(
 61             "蒸发量",
 62             [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3],
 63             yaxis_index=0,
 64             color="#d14a61",
 65         )
 66         .add_yaxis(
 67             "降水量",
 68             [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3],
 69             yaxis_index=1,
 70             color="#5793f3",
 71         )
 72         .extend_axis(
 73             yaxis=opts.AxisOpts(
 74                 name="蒸发量",
 75                 type_="value",
 76                 min_=0,
 77                 max_=250,
 78                 position="right",
 79                 axisline_opts=opts.AxisLineOpts(
 80                     linestyle_opts=opts.LineStyleOpts(color="#d14a61")
 81                 ),
 82                 axislabel_opts=opts.LabelOpts(formatter="{value} ml"),
 83             )
 84         )
 85         .extend_axis(
 86             yaxis=opts.AxisOpts(
 87                 type_="value",
 88                 name="温度",
 89                 min_=0,
 90                 max_=25,
 91                 position="left",
 92                 axisline_opts=opts.AxisLineOpts(
 93                     linestyle_opts=opts.LineStyleOpts(color="#675bba")
 94                 ),
 95                 axislabel_opts=opts.LabelOpts(formatter="{value} °C"),
 96                 splitline_opts=opts.SplitLineOpts(
 97                     is_show=True, linestyle_opts=opts.LineStyleOpts(opacity=1)
 98                 ),
 99             )
100         )
101         .set_global_opts(
102             yaxis_opts=opts.AxisOpts(
103                 name="降水量",
104                 min_=0,
105                 max_=250,
106                 position="right",
107                 offset=80,
108                 axisline_opts=opts.AxisLineOpts(
109                     linestyle_opts=opts.LineStyleOpts(color="#5793f3")
110                 ),
111                 axislabel_opts=opts.LabelOpts(formatter="{value} ml"),
112             ),
113             title_opts=opts.TitleOpts(title="Grid-多 Y 轴示例"),
114             tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
115         )
116     )
117 
118     line = (
119         Line()
120         .add_xaxis(x_data)
121         .add_yaxis(
122             "平均温度",
123             [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2],
124             yaxis_index=2,
125             color="#675bba",
126             label_opts=opts.LabelOpts(is_show=False),
127         )
128     )
129 
130     bar.overlap(line)
131     return Grid().add(
132         bar, opts.GridOpts(pos_left="5%", pos_right="20%"), is_control_axis_index=True
133     )
134 
135 def sb():
136     tab = (
137         Tab()
138             .add(bar_datazoom_slider(), "bar")
139            .add(line_markpoint(), "line")
140            .add(pie_rosetype(), "pie")
141            .add(grid_mutil_yaxis(), "grid")
142            )
143 
144     return tab.render("tab.html")
145 
146 
147 if __name__ == "__main__":
148     sb()

效果演示

  十二、pyecharts绘图综合应用四

实例一时间线轮播多图

1.时间线轮播多图————主要类Timeline()以及画不同类型的图类Timeline()其他类可自定义

实例一画图使用的类pie()

 

 1 from pyecharts import options as opts
 2 from pyecharts.charts import Bar, Grid, Line, Liquid, Page, Pie, Tab, Timeline
 3 from pyecharts.faker import Faker
 4 
 5 def timeLine():
 6     timeline1 = Timeline()
 7     for i in range(2019, 2023):
 8         c = (
 9             Pie()
10             .add(
11                 "商家A",
12                 [list(z) for z in zip(Faker.choose(), Faker.values())],
13                 rosetype="radius",
14                 radius=["30%", "55%"]
15 
16             )
17         )
18         timeline1.add(c, "{}年".format(i))
19     return timeline1.render("timeline.html")
20 
21 if __name__ == '__main__':
22     timeLine()

 

效果演示

实例二画图使用的类Bar()

 

 1 from pyecharts import options as opts
 2 from pyecharts.charts import Bar, Grid, Line, Liquid, Page, Pie, Tab, Timeline
 3 from pyecharts.faker import Faker
 4 
 5 def timeLine():
 6     timeline1 = Timeline()
 7     for i in range(2019, 2023):
 8         c = (
 9             Bar()
10             .add_xaxis(Faker.choose())
11             .add_yaxis("疫情病况", Faker.values())
12         )
13         timeline1.add(c, "{}年".format(i))
14     return timeline1.render("timeline2.html")
15 
16 if __name__ == '__main__':
17     timeLine()

 

效果演示

 

posted @ 2022-04-21 17:34  @唯一的你。  阅读(269)  评论(0)    收藏  举报