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()
重新渲染方式
- 使用浏览器打开渲染后的 .html 文件,默认为 render.html。拖拉/调整图表位置和大小,当调整到一 个适合的布局
- 点击左上角save_config
保存为json格式 - 再次渲染图表并指定其布局配置
说明:

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()
效果演示


浙公网安备 33010602011771号