PyEcharts常用图
PyEcharts特性简单的api设计 , 支持链式调用有多种图表 ,支持主流Notebook 环境 , Jupyter Notebook 和 JupyterLab可以轻松集成Flask , Django等主流web框架高度灵活的配置项 , 可以轻松搭配精美的图表安装PyEchartspip install pyecharts2.0.7 -i https://pypi.tuna.tsinghua.edu.cn/simple 镜像源下载库 1. 使用PyEcharts 2. 导入包 from pyecharts.charts import Bar bar Bar() 画图需要实例化对象 bar.add_xaxis([衬衫, 羊毛衫, 雪纺衫, 裤子, 高跟鞋, 袜子]) bar.add_yaxis(商家A, [5, 20, 36, 10, 75, 90]) # render 会生成本地 HTML 文件默认会在当前目录生成 render.html 文件 # 也可以传入路径参数如 bar.render(mycharts.html) bar.render() 链式调用和非链式调用1. 导包, 要画什么图 , 就导入什么包 , bar 柱形图 2. options是图表的全局配置, 可以修改图表配置 from pyecharts.charts import Bar from pyecharts import options as opts # V1 版本开始支持链式调用 # 你所看到的格式其实是 black 格式化以后的效果 # 可以执行 pip install black 下载使用 bar ( Bar() 要画柱状图, 实例化Bar对象 .add_xaxis([衬衫, 羊毛衫, 雪纺衫, 裤子, 高跟鞋, 袜子]) .add_yaxis(商家A, [5, 20, 36, 10, 75, 90]) .set_global_opts(title_optsopts.TitleOpts(title主标题, subtitle副标题)) 使用全局配置设置图表的标题 # 或者直接使用字典参数 # .set_global_opts(title_opts{text: 主标题, subtext: 副标题}) ) bar.render() 生成图表.html文件 上面的链式调用其实就等于 一直.调用下来 , 只是通过 () 括号给他换行放了 Bar().add_xaxis([衬衫, 羊毛衫, 雪纺衫, 裤子, 高跟鞋, 袜子]).add_yaxis(商家A, [5, 20, 36, 10, 75, 90]).set_global_opts(title_optsopts.TitleOpts(title主标题, subtitle副标题)); # 不习惯链式调用的开发者依旧可以单独调用方法 bar Bar() bar.add_xaxis([衬衫, 羊毛衫, 雪纺衫, 裤子, 高跟鞋, 袜子]) bar.add_yaxis(商家A, [5, 20, 36, 10, 75, 90]) bar.set_global_opts(title_optsopts.TitleOpts(title主标题, subtitle副标题)) bar.render()设置主题PyEcharts提供多种主题,from pyecharts.charts import Bar from pyecharts import options as opts 全局配置 # 内置主题类型可查看 pyecharts.globals.ThemeType from pyecharts.globals import ThemeType 导入主题包 bar ( # Bar(init_optsopts.InitOpts(themeThemeType.LIGHT)) # Bar(init_optsopts.InitOpts(themeThemeType.DARK)) Bar(init_optsopts.InitOpts(themeThemeType.CHALK)) 全局配置, 设置图表主题 .add_xaxis([衬衫, 羊毛衫, 雪纺衫, 裤子, 高跟鞋, 袜子]) .add_yaxis(商家A, [5, 20, 36, 10, 75, 90]) .add_yaxis(商家B, [15, 6, 45, 20, 35, 66]) .set_global_opts(title_optsopts.TitleOpts(title主标题, subtitle副标题)) ) bar.render_notebook() # 在Notebook中查看全局配置from pyecharts.charts import Bar # 柱状图 from pyecharts import options as opts # 全局配置和系列配置 from pyecharts.globals import ThemeType # 主题包 # 准备数据 bar ( Bar(init_optsopts.InitOpts(themeThemeType.WHITE)) .add_xaxis([衬衫, 羊毛衫, 雪纺衫, 裤子, 高跟鞋]) .add_yaxis(商家A, [5, 20, 35, 10, 75]) .add_yaxis(商家B, [15, 30, 35, 10, 75]) .set_global_opts( # 配置标题 title_optsopts.TitleOpts( title我是主标题, subtitle我是副标题, title_textstyle_optsopts.TextStyleOpts( # 设置主标题字体样式的相关配置 font_size18, # 设置字体大小 根据需求 调整数值 colorpink, # 粉红色 ), subtitle_textstyle_optsopts.TextStyleOpts( # 设置副标题字体样式相关配置 font_size14, colorred, # 设置副标题颜色 ), # pos_leftleft, # 将主标题水平居中 # pos_leftright, # 将主标题水平居中 # pos_leftcenter, # 将主标题水平居中 pos_top1%, # 可以根据需要调整主标题垂直位置这里设置距离顶部5%的位置 ) ) ) bar.render_notebook()系列配置全局配置是设置整个图表的, 而系列配置就是设置图表里各个元素的import pyecharts.options as opts from pyecharts.charts import Bar, Line bar ( Bar() .add_xaxis([衬衫, 羊毛衫, 雪纺衫, 裤子, 高跟鞋, 袜子]) .add_yaxis(商家A, [5, 20, 36, 10, 75, 90]) .add_yaxis(商家B, [15, 6, 45, 20, 35, 66]) .set_series_opts( itemstyle_optsopts.ItemStyleOpts(opacity0.8,colorred), #设置图元样式 透明度 更改颜色 lbel_optsopts.LabelOpts(is_showTrue),#是否显示标签 # markline_optsopts.MarkLineOpts(data[opts.MarkLineItem(type_min,name最小值) # 设置警戒线 # markline_optsopts.MarkLineOpts(data[opts.MarkLineItem(type_max,name最大值) # 设置警戒线 markline_optsopts.MarkLineOpts(data[opts.MarkLineItem(type_average,name平均值) # 设置警戒线 ,]) ) ) bar.render_notebook()条图 : Bar竖着的柱状图# 创建一个DataFrame列分别为商品名称商家A销量商家B销量 data { 商品: [衬衫, 羊毛衫, 雪纺衫, 裤子, 高跟鞋], 商家A: [5, 20, 35, 10, 75], 商家B: [15, 30, 35, 10, 75] } df pd.DataFrame(data) dffrom pyecharts.charts import Bar # 柱状图 from pyecharts import options as opts # 全局配置和系列配置 from pyecharts.globals import ThemeType # 主题包 import pandas as pd # 创建一个DataFrame列分别为商品名称商家A销量商家B销量 data { 商品: [衬衫, 羊毛衫, 雪纺衫, 裤子, 高跟鞋], 商家A: [5, 20, 35, 10, 75], 商家B: [15, 30, 35, 10, 75] } df pd.DataFrame(data) # bar ( Bar(init_optsopts.InitOpts(themeThemeType.DARK)) .add_xaxis(df[商品].tolist()) .add_yaxis(商家A,df[商家A].tolist()) # 可以理解 数据的名称 后面的列表 对应的是x轴上的每个商品的具体数值,比如 .add_yaxis(商家B,df[商家B].tolist()) # 同上 ) bar.render_notebook()警戒线import pyecharts.options as opts from pyecharts.charts import Bar, Line bar ( Bar() .add_xaxis([衬衫, 羊毛衫, 雪纺衫, 裤子, 高跟鞋, 袜子]) .add_yaxis(商家A, [5, 20, 36, 10, 75, 90]) .add_yaxis(商家B, [15, 6, 45, 20, 35, 66]) .set_global_opts( # 全局配置 title_optsopts.TitleOpts( title我是标题, subtitle我是副标题)) .set_series_opts( markline_optsopts.MarkLineOpts(data[opts.MarkLineItem(y80,name合格线)]) # 设置警戒线 ) ) bar.render_notebook()条形图import pyecharts.options as opts from pyecharts.charts import Bar, Line bar ( Bar() .add_xaxis([衬衫, 羊毛衫, 雪纺衫, 裤子, 高跟鞋, 袜子]) .add_yaxis(商家A, [5, 20, 36, 10, 75, 90]) .add_yaxis(商家B, [15, 6, 45, 20, 35, 66]) .set_global_opts( # 全局配置 title_optsopts.TitleOpts( title我是标题, subtitle我是副标题)) .set_series_opts( markline_optsopts.MarkLineOpts(data[opts.MarkLineItem(x80,name合格线)]) # 设置警戒线 ) .reversal_axis() # x和y轴翻转 加一个x和y轴反转 , 同时上面的警戒线也要从y轴换成x轴80 ) bar.render_notebook() 直方图: Bar直方图和柱状图的区别柱状图主要是对比不同类型直接的数据大小 , 不同的柱子代表不同的类型, 柱子的长度代表数据的大小直方图 : 适用于展示数据中一定范围内的分布情况 , 把数据分成若干个区域, 不同柱子代表不同区域 1. Bar , 直方图也是从条图转过来的 from pyecharts.charts import Bar from pyecharts import options as opts from pyecharts.globals import ThemeType import pandas as pd from random import randint # 生成模拟的学生成绩数据假设是0-100分的成绩这里生成100个成绩数据 data [randint(0, 100) for _ in range(100)] df pd.DataFrame(data, columns[成绩]) # 划分成绩区间比如这里划分为0-10、10-20、20-30等等一直到90-100共10个区间 bins [i * 10 for i in range(11)] # 使用cut函数将成绩数据划分到不同区间并统计每个区间的频数即落入该区间的数据个数 df[成绩区间] pd.cut(df[成绩], binsbins) grouped_data df[成绩区间].value_counts().sort_index() # 提取区间范围的字符串表示作为x轴数据 x_data [str(interval) for interval in grouped_data.index] # 提取频数作为y轴数据 y_data grouped_data.tolist() # 绘制直方图 hist ( Bar() .add_xaxis(x_data) .add_yaxis(成绩分布, y_data, category_gap0%) category_gap0%把条图转成直方图 , 柱状图每个柱子之间都有距离, 而直方图没有 .set_global_opts( title_optsopts.TitleOpts(title学生成绩分布直方图), xaxis_optsopts.AxisOpts(name成绩区间), yaxis_optsopts.AxisOpts(name学生人数) ) ) hist.render_notebook()折线图 : Line折线图 能够清晰的展示 某个变量的变化趋势import pyecharts.options as opts from pyecharts.charts import Line bar ( 折线图用的对象Line , 同时设置主题 Line(init_optsopts.InitOpts(themeThemeType.HALLOWEEN)) .add_xaxis([衬衫, 羊毛衫, 雪纺衫, 裤子, 高跟鞋, 袜子]) .add_yaxis(商家B, [10,50,60,80,90,60]) .set_global_opts( # 全局配置 title_optsopts.TitleOpts( title我是标题, subtitle我是副标题) ) ) bar.render_notebook()平滑曲线让折线图里的线图过渡的更平滑1. 也就是y轴上让线图更平滑的参数 is_smoothTrue import pyecharts.options as opts from pyecharts.charts import Line bar ( Line(init_optsopts.InitOpts(themeThemeType.HALLOWEEN)) .add_xaxis([衬衫, 羊毛衫, 雪纺衫, 裤子, 高跟鞋, 袜子]) .add_yaxis(商家B, [10,50,60,80,90,60],is_smoothTrue) # 平滑曲线 .set_global_opts( # 全局配置 title_optsopts.TitleOpts( title我是标题, subtitle我是副标题) ) ) bar.render_notebook()标记点折线图上突出某个重要数据点或特殊情况1. 给80这个数据标记一下 import pyecharts.options as opts from pyecharts.charts import Line bar ( Line() .add_xaxis([衬衫, 羊毛衫, 雪纺衫, 裤子, 高跟鞋, 袜子]) .add_yaxis(商家B, [10, 50, 60, 80, 90, 60], is_smoothTrue, markpoint_optsopts.MarkPointOpts( data[ opts.MarkPointItem( name自定义标记, coord[3, 80], symboldiamond, # 标记点符号这里是菱形 symbol_size10, # 标记点大小 itemstyle_optsopts.ItemStyleOpts(colorred) # 标记点颜色 ) ] ) ) .set_global_opts( title_optsopts.TitleOpts( title我是标题, subtitle我是副标题) ) ) bar.render_notebook()阶梯图阶梯图的特点中与他的数据不会不会像折线图那样连续过渡,而是像阶梯一样的变化1. 让数据阶梯变化 : is_stepTrue import pyecharts.options as opts from pyecharts.charts import Line bar ( Line() .add_xaxis([衬衫, 羊毛衫, 雪纺衫, 裤子, 高跟鞋, 袜子]) .add_yaxis(商家B, [10, 50, 60, 80, 90, 60],is_stepTrue) # 阶梯图 .set_global_opts( title_optsopts.TitleOpts( title我是标题, subtitle我是副标题) ) ) bar.render_notebook()堆叠折线图堆叠折线图, 就是展示多个数据系列, 把不同数据系列中主题的x轴上进行堆叠相加.展示不同商家或不同数据系列的区别1. 展示两个商家堆叠的图 import pyecharts.options as opts from pyecharts.charts import Line bar ( Line(init_optsopts.InitOpts(themeThemeType.DARK)) .add_xaxis([衬衫, 羊毛衫, 雪纺衫, 裤子, 高跟鞋, 袜子]) .add_yaxis(商家B, [10, 50, 60, 80, 90, 60],stack总量) .add_yaxis(商家A, [20, 60, 70, 90, 100, 60],stack总量) .set_global_opts( title_optsopts.TitleOpts( title我是标题, subtitle我是副标题) ) ) bar.render_notebook() 面积图面积图展示 数据的累积效果 或占比情况 , 比如展示不同产品在一段时间的市场占有率import pyecharts.options as opts from pyecharts.charts import Line bar ( Line(init_optsopts.InitOpts(themeThemeType.DARK)) .add_xaxis([衬衫, 羊毛衫, 雪纺衫, 裤子, 高跟鞋, 袜子]) .add_yaxis(商家B, [10, 50, 60, 80, 90, 60],stack1) .add_yaxis(商家A, [10, 50, 60, 80, 90, 60],stack1) .set_global_opts( title_optsopts.TitleOpts( title我是标题, subtitle我是副标题), xaxis_optsopts.AxisOpts(boundary_gapFalse) # 设置从头开始 ) .set_series_opts( label_optsopts.LabelOpts(is_showFalse), # 标签不显示 areastyle_optsopts.AreaStyleOpts(opacity0.5), # 设置透明度 面积图 ) ) bar.render_notebook() 散点图 : Scatterimport pyecharts.options as opts from pyecharts.charts import Scatter import pandas as pd from random import randint # 生成示例数据 x1 [i for i in range(100)] y1 [randint(0, 20) for i in range(100)] df pd.DataFrame({0: x1, 1: y1}) scatter ( Scatter(init_optsopts.InitOpts(themeThemeType.WHITE)) .add_xaxis(df[0].tolist()) .add_yaxis(随机数据系列, df[1].tolist(), symbolrect, symbol_size10, itemstyle_optsopts.ItemStyleOpts(colorblue, opacity0.7)) # diamond菱形 # triangle三角形 # circle圆形 .set_global_opts( title_optsopts.TitleOpts( title我是标题, subtitle我是副标题 ), xaxis_optsopts.AxisOpts( axistick_optsopts.AxisTickOpts(is_showFalse), # 隐藏x轴刻度线 axisline_optsopts.AxisLineOpts(is_showTrue), # 显示x轴轴线 splitline_optsopts.SplitLineOpts(is_showFalse) # 隐藏x轴网格线 ), yaxis_optsopts.AxisOpts( axistick_optsopts.AxisTickOpts(is_showFalse), # 隐藏y轴刻度线 axisline_optsopts.AxisLineOpts(is_showTrue), # 显示y轴轴线 splitline_optsopts.SplitLineOpts(is_showFalse) # 隐藏y轴网格线 ) ) ) scatter.render_notebook() 多组散点图import pyecharts.options as opts from pyecharts.charts import Scatter from random import randint # 更严格控制x轴数据范围比如这里改为[5, 25]之间生成随机数 x1 [i for i in range(100)] y1 [randint(0, 20) for i in range(100)] y2 [randint(10, 30) for i in range(100)] scatter ( Scatter(init_optsopts.InitOpts(themeThemeType.DARK)) .add_xaxis(x1) .add_yaxis(随机数据系列1, y1, symbolrect, symbol_size8) .add_yaxis(随机数据系列2, y2, symbolcircle, symbol_size8, itemstyle_optsopts.ItemStyleOpts(colorred)) .set_global_opts( title_optsopts.TitleOpts( title我是标题, subtitle我是副标题 ) ) ) scatter.render_notebook()气泡图气泡图 是在散点图上做扩展, 能够展示两个变量关系的同时, 通过气泡的大小体现第三变量的信息import pyecharts.options as opts from pyecharts.charts import Scatter from random import randint # 更严格控制x轴数据范围比如这里改为[5, 25]之间生成随机数 x1 [i for i in range(10)] y1 [randint(0, 10) for i in range(10)] y2 [randint(10, 20) for i in range(10)] scatter ( Scatter(init_optsopts.InitOpts(themeThemeType.DARK)) .add_xaxis(x1) .add_yaxis(随机数据系列1, y1, symbolrect, symbol_size8) .add_yaxis(随机数据系列2, y2, symbolcircle, symbol_size8, itemstyle_optsopts.ItemStyleOpts(colorred)) .set_global_opts( title_optsopts.TitleOpts( title我是标题, subtitle我是副标题 ), visualmap_optsopts.VisualMapOpts(type_size) ) ) scatter.render_notebook()箱图: Boxplot箱图(箱线图) , 展示数据的分位数等from pyecharts.charts import Boxplot from pyecharts.faker import Faker from pyecharts import options as opts from pyecharts.globals import ThemeType from random import randint data { 种类:[种类1,种类2,种类3,种类4,种类5,种类6,种类7,种类8], y1: [ [randint(0,100) for i in range(100)], [randint(10,100) for i in range(100)], [randint(20,100) for i in range(100)], [randint(30,100) for i in range(100)], [randint(40,100) for i in range(100)], [randint(60,100) for i in range(100)], [randint(80,100) for i in range(100)], [i for i in range(100)] ], } df pd.DataFrame(data) # 绘制箱图 box Boxplot() box ( # box.add_xaxis([种类1,种类2,种类3,种类4,种类5,种类6,种类7]) box.add_xaxis(df[种类].tolist()) .add_yaxis(,box.prepare_data(df[y1].tolist())) ) # 渲染图表 box.render_notebook()饼图: picfrom pyecharts.charts import Pie from pyecharts import options as opts # 链式调用的方式创建饼图实例 pie ( Pie() .add( series_name商品占比, data_pair[(衬衫, 5), (羊毛衫, 20), (雪纺衫, 35), (裤子, 10), (高跟鞋, 75)], ) .set_global_opts( title_optsopts.TitleOpts(title主标题, subtitle副标题) ) ) pie.render_notebook()展示占比import pandas as pd from pyecharts.charts import Pie from pyecharts import options as opts from pyecharts.globals import ThemeType # 主题包 # 创建示例的DataFrame数据包含商品名称和对应的数量这里模拟的数据你可以替换为真实的数据 data_dict { 商品名称: [衬衫, 羊毛衫, 雪纺衫, 裤子, 高跟鞋], 数量: [5, 20, 35, 10, 75] } df pd.DataFrame(data_dict) # 链式调用的方式创建饼图实例 pie ( Pie(init_optsopts.InitOpts(themeThemeType.CHALK)) .add( series_name商品占比, data_pair[(row[商品名称], row[数量]) for _, row in df.iterrows()], ) .set_global_opts( title_optsopts.TitleOpts(title主标题, subtitle副标题) ) .set_series_opts( # 标记线 label_optsopts.LabelOpts( positionoutside, # 设置标签在外部显示 formatter{b}: {c} ({d}%), # 格式化显示内容{b}是名称{c}是数值{d}是百分比 ), # 鼠标悬停的提示框 tooltip_optsopts.TooltipOpts( triggeritem, formatter{a} br/{b}: {c} ({d}%) # 鼠标悬停提示的格式化内容 ) ) ) pie.render_notebook()圆环图从饼图转变过来from pyecharts.charts import Pie from pyecharts import options as opts # 链式调用的方式创建饼图实例 pie ( Pie() .add( series_name商品占比, data_pair[(衬衫, 5), (羊毛衫, 20), (雪纺衫, 35), (裤子, 10), (高跟鞋, 75)], radius[50%,70%] 设置圆环 ) .set_global_opts( title_optsopts.TitleOpts(title主标题, subtitle副标题), legend_optsopts.LegendOpts(textstyle_optsopts.TextStyleOpts(colorwhite) ) ) ) pie.render_notebook()玫瑰图# 玫瑰图 from pyecharts.charts import Pie from pyecharts import options as opts # 链式调用的方式创建饼图实例 pie ( Pie() .add( series_name商品占比, data_pair[(衬衫, 5), (羊毛衫, 20), (雪纺衫, 35), (裤子, 10), (高跟鞋, 75)], rosetypearea ) .set_global_opts( title_optsopts.TitleOpts(title主标题, subtitle副标题) ) ) pie.render_notebook()热力图 : HeatMapfrom pyecharts.charts import HeatMap from pyecharts import options as opts from pyecharts.faker import Faker from pyecharts.globals import ThemeType from random import randint # 生成图表中的具体数据 # value [[i, j, randint(-20, 40)] for i in range(24) for j in range(7)] value [] for i in range(22): # 20列 for j in range(7): # 每列7行 value.append([i,j,randint(-20,40)]) # print(value) # 绘制图表 hp ( HeatMap() .add_xaxis([xx区,xx市,x市,xx区,xx市,x市,xx区,xx市,x市,xx区,xx市,x市,xx区,xx市,x市,xx区,xx市,x市,x市,xx区,xx市,x市]) .add_yaxis(温度,[周一,周二,周三,周四,周五,周六,周日],value) ) # 渲染图表 hp.render_notebook()设置最大最小值# 热力图的绘制 from pyecharts.charts import HeatMap # 热力图的类 import pyecharts.options as opts # 导入全局配置 和系列配置相关的类 import pandas as pd from pyecharts.globals import ThemeType # 主题包 from random import randint # 准备一组数据 list1 [市1,市2,市3,市4,市5,市6,市7,市8,市9,市10,市11,市12,市13,市14,市15,市16,市17,市18,市19,市20,市21,市22] value [] for i in list1: # 模拟22个地区的名称 for j in range(7): # 模拟一周7天数据 周一 到周日 value.append([i,j,randint(9,30)]) # randint(9,30) 模拟的温度 # print(value) df pd.DataFrame(value,columns[区域名称,日期索引,温度值]) df[日期索引] df[日期索引].map({0:周一,1:周二,2:周三,3:周四,4:周五,5:周六,6:周七}) # df x1 df[区域名称].unique() print(x1.tolist()) y1 df[日期索引].unique() print(y1.tolist()) print(df.values.tolist()) # 开始绘制热力图 hp ( HeatMap() .add_xaxis(x1.tolist()) .add_yaxis(温度,y1.tolist(),df.values.tolist()) # .set_global_opts( visualmap_optsopts.VisualMapOpts(min_9,max_30) 最大最小 ) ) hp.render_notebook()涟漪特效图 : EffectScatterfrom pyecharts.charts import EffectScatter from pyecharts import options as opts from pyecharts.globals import ThemeType,SymbolType import random import calendar # 月份 month [一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月] # 生成对应的数据这里假设是模拟各地区每月的平均气温数据摄氏度 list1 [] for _ in range(12): # 模拟12个月的数据 list1.append(random.randint(-5, 30)) value1 [random.randint(-10,50) for _ in range(50)] # 生成和地区数量对应的随机数值列表 # 绘制图表 es ( EffectScatter(init_optsopts.InitOpts(width1000px, height600px,themeThemeType.VINTAGE)) .add_xaxis(month) # 使用月份名称缩写作为x轴数据 .add_yaxis(某地区1平均气温, list1) .add_yaxis(某地区2平均气温, value1,symbolSymbolType.DIAMOND,symbol_size20) .set_global_opts( xaxis_optsopts.AxisOpts( name月份, name_locationmiddle, name_textstyle_optsopts.TextStyleOpts(font_size12), axislabel_optsopts.LabelOpts(margin2) ), yaxis_optsopts.AxisOpts( name平均气温℃, # name_locationmiddle, # 开始的位置 # name_locationstart, # 居中 name_locationend, # 结束的位置 name_textstyle_optsopts.TextStyleOpts(font_size12), axislabel_optsopts.LabelOpts(margin2) ) ) ) # 渲染图表 es.render_notebook()K线图 : Kline用于股票交易, 直观看出一段时间内的开盘价 , 收盘价, 最高价 , 最低价from pyecharts.charts import EffectScatter from pyecharts import options as opts from pyecharts.globals import ThemeType,SymbolType import random import calendar # 月份 month [一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月] # 生成对应的数据这里假设是模拟各地区每月的平均气温数据摄氏度 list1 [] for _ in range(12): # 模拟12个月的数据 list1.append(random.randint(-5, 30)) value1 [random.randint(-10,50) for _ in range(50)] # 生成和地区数量对应的随机数值列表 # 绘制图表 es ( EffectScatter(init_optsopts.InitOpts(width1000px, height600px,themeThemeType.VINTAGE)) .add_xaxis(month) # 使用月份名称缩写作为x轴数据 .add_yaxis(某地区1平均气温, list1) .add_yaxis(某地区2平均气温, value1,symbolSymbolType.DIAMOND,symbol_size20) .set_global_opts( xaxis_optsopts.AxisOpts( name月份, name_locationmiddle, name_textstyle_optsopts.TextStyleOpts(font_size12), axislabel_optsopts.LabelOpts(margin2) ), yaxis_optsopts.AxisOpts( name平均气温℃, # name_locationmiddle, # 开始的位置 # name_locationstart, # 居中 name_locationend, # 结束的位置 name_textstyle_optsopts.TextStyleOpts(font_size12), axislabel_optsopts.LabelOpts(margin2) ) ) ) # 渲染图表 es.render_notebook()漏斗图 : Funnel漏斗图 , 展示数据在流程的各个阶段逐渐减少的情况from pyecharts.charts import Funnel from pyecharts import options as opts from pyecharts.globals import ThemeType # 假设这里每个需求层次对应的数量示例数据你可以根据实际情况替换 data [ (生理需求, 100), (安全需求, 80), (社交需求, 60), (尊重需求, 40), (自我实现需求, 20), ] funnel ( Funnel(init_optsopts.InitOpts(themeThemeType.VINTAGE)) .add( series_name需求层次, # 系列名称 data_pairdata, # 传入包含名称和对应数据量的数据对 gap3, # 漏斗图每一层之间的间隔距离 label_optsopts.LabelOpts(is_showTrue, positioninside), # 设置标签显示在内部 sort_ascending # 设置为降序排列实现倒立漏斗图效果 ) .set_global_opts( title_optsopts.TitleOpts(title马斯洛需求层次漏斗图), # 设置图表标题 ) ) funnel.render_notebook()倒立漏斗图from pyecharts.charts import Funnel from pyecharts import options as opts from pyecharts.globals import ThemeType # 假设这里每个需求层次对应的数量示例数据你可以根据实际情况替换 data [ (生理需求, 100), (安全需求, 80), (社交需求, 60), (尊重需求, 40), (自我实现需求, 20), ] funnel ( Funnel(init_optsopts.InitOpts(themeThemeType.VINTAGE)) .add( series_name需求层次, # 系列名称 data_pairdata, # 传入包含名称和对应数据量的数据对 gap3, # 漏斗图每一层之间的间隔距离 label_optsopts.LabelOpts(is_showTrue, positioninside), # 设置标签显示在内部 sort_descending # 设置为降序排列实现倒立漏斗图效果 ) .set_global_opts( title_optsopts.TitleOpts(title马斯洛需求层次倒立漏斗图), # 设置图表标题 ) ) funnel.render_notebook()词云图 : WordCloud一堆词语, 堆砌在一起组成的图from pyecharts.charts import WordCloud from pyecharts import options as opts # 准备数据 data [ [ThinkPad,15.7], [联想,14.5], [惠普,14.4], [华为,11.7], [华硕,8.2], [戴尔,8.1], [Acer 宏碁,4.5], [苹果,3.5], [神舟,3.2], [ROG,3.1], [机械革命,2.4], [msi 微星,1.8], [外星人,1.5], [微软,1.4], [荣耀,1.2], [雷神,1], [三星,0.7], [红米,0.6], [机械师,0.5], [小米,0.5], [炫龙,0.4], [雷蛇,0.2], [壹号本,0.1], [a 豆,0.1], [未来人类,0.1], [技嘉,0.1], [中柏,0.1], [VAIO,0.1], [火影,0.1], [LG,0.1], [松下,0], [麦本本,0], [吾空,0], [长城,0], [GPD,0], [清华同方,0], [神基,0], [爱尔轩,0], [酷比魔方,0], [海尔,0], [谷歌,0], [台电,0], [iru,0], [攀升 IPASON,0], [NEC,0], [夏普,0], [京东京造,0], [锡恩帝,0], [皓勤,0], [Intel,0]] list1 [] list2 [] for i in data: list1.append(i[0]) list2.append(i[1]) df pd.DataFrame( {名称:list1, 数量:list2 }) # 绘制图表 wd ( WordCloud(init_optsopts.InitOpts(themeThemeType.VINTAGE)) # 初始化词云图表 # .add(,data,shapestar) # 五角星 # .add(,data,shapeheart) # 心形 # .add(,data,shapecloud) # 云朵形 # .add(,data,shapecat) # 动物形状 # .add(,data,shapedog) # .add(,data,shapecircle) # 圆形 .add(,df.values.tolist(),shapetriangle) # 三角形 ) # 渲染图表 wd.render_notebook()雷达图 : Radarfrom pyecharts.charts import Radar #添加数据项 data1[[98,100,89,89,97]] data2 [[100,89,79,67,61]] #绘制雷达图 radar ( Radar() .add_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), ]) .add(小明,data1,colorpink) .add(大虎,data2,colorgreen) .set_series_opts(label_optsopts.LabelOpts(is_showFalse),linestyle_optsopts.LineStyleOpts(width3)) ) radar.render_notebook()组合图多种图组合在一起# 优化图表 # 柱状图 bar ( Bar(init_optsopts.InitOpts(themeThemeType.DARK)) .add_xaxis(xaxis_datax_value) # 设置x轴数据 .add_yaxis(蒸发,evaporation) .add_yaxis(降水,precipitation) .set_global_opts(title_optsopts.TitleOpts(组合图), yaxis_optsopts.AxisOpts(name水量,min_0,max_250, axislabel_optsopts.LabelOpts(formatter{value}ml))) # 这行代码很关键哦它是在原来的图表基础上追加了一个 y 轴呢专门用于展示温度数据 .extend_axis(yaxisopts.AxisOpts( name温度,min_0,max_25, axislabel_optsopts.LabelOpts(formatter{value}℃) )) # 追加y轴数据 ) # 折线图 line ( Line() .add_xaxis(xaxis_datax_value) .add_yaxis(温度,temperature,yaxis_index1) # yaxis_index指定第几个y轴内容 ) # 混合2个图表 bar.overlap(line) # 渲染图表 bar.render_notebook() 大屏报表from pyecharts.charts import Bar, Line, Grid from pyecharts import options as opts from pyecharts.globals import ThemeType import pandas as pd # 柱状图部分 # 初始化对象 bar Bar() # 准备x轴、y轴数据 bar.add_xaxis([衬衫, 羊毛衫, 雪纺衫, 裤子, 高跟鞋]) bar.add_yaxis(商家A, [5, 20, 35, 10, 75]) bar.add_yaxis(商家B, [15, 30, 35, 10, 75]) # 设置柱状图的全局配置可根据需求添加更多配置项 bar.set_global_opts( title_optsopts.TitleOpts(title商品销售柱状图, subtitle不同商家商品销量对比), yaxis_optsopts.AxisOpts(name销量) ) # 折线图部分 # 准备数据 data { 商品: [一月, 二月, 三月, 四月, 五月], 商家A: [5, 20, 35, 10, 75], 商家B: [15, 30, 35, 10, 75] } df pd.DataFrame(data) # 初始化并添加数据 line ( Line(init_optsopts.InitOpts(themeThemeType.DARK)) # 初始化设置暗色主题 .add_xaxis(df[商品].tolist()) # x轴数据 .add_yaxis(商家A, df[商家A].tolist()) .add_yaxis(商家B, df[商家B].tolist()) # 添加商家B的数据之前代码遗漏了这部分确保数据完整性 ) # 初始化并添加数据 line1 ( Line(init_optsopts.InitOpts(themeThemeType.DARK,width1500px,height2000px)) # 初始化设置暗色主题 .add_xaxis(df[商品].tolist()) # x轴数据 .add_yaxis(商家A, df[商家A].tolist()) .add_yaxis(商家B, df[商家B].tolist()) # 添加商家B的数据之前代码遗漏了这部分确保数据完整性 ) # 使用Grid进行左右布局 grid ( Grid(init_optsopts.InitOpts(themeThemeType.DARK,width1000px,height700px)) # 将柱状图添加到左边区域 .add(bar, grid_optsopts.GridOpts(pos_left5%, pos_right50%, pos_top15%, pos_bottom50%)) # 将折线图添加到右边区域 .add(line, grid_optsopts.GridOpts(pos_left55%, pos_right5%, pos_top15%, pos_bottom50%)) # 添加下面横向 .add(line1, grid_optsopts.GridOpts(pos_left5%, pos_right5%, pos_top55%, pos_bottom5%)) ) # 渲染整个布局 grid.render_notebook()