• 本文来自《Python数据分析从入门到精通》_明日科技编著。
  • Echarts是一个由百度开源的数据可视化工具,而Python是一门适用于数据处理和数据分析的语言,为了适应Python的需求,Pyecharts诞生了。

7.1 Pyecharts概述

7.1.1 Pyecharts简介

  • Pytharts是一个用于生成Echarts图表的类库。Echarts是百度开源的一个数据可视化JS库。用Echarts生成的图可视化效果非常好,而Pytharts则是专门为了与Python衔接,方便在Python中直接使用的可视化图表。使用Pyecharts可以生成独立的网页格式的图表,还可以在flask、django中直接使用,非常方便。
  • Pyecharts的图表类型非常多且效果非常漂亮(柱形图/条形图)、Funnel(漏斗图)、Gauge(仪表盘)、HeatMap(热力图)、Line(折线图/面积图)、Line3D(3D折线图)、Liquid(水球图)、Map(地图)、Parallel(平行坐标系)、Pie(饼图)、Polar(极坐标系)、Radar(雷达图)、Scatter(散点图)和WordCloud(词云图)等。

7.1.2 按照Pyecharts

pip install pyecharts==1.7.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 由于Pyecharts各个版本的相关代码有一些区别,因此这里建议安装与笔者相同的版本,以免造成不必要的麻烦。

7.1.3 绘制第一张图表

绘制简单的柱形图(01)

from pyecharts.charts import Bar  # 从Pyecharts模块导入Bar对象bar = Bar()  # 创建一个空的Bar(柱状图)对象
# 定义x轴和y轴数据
bar.add_xaxis(["1月", "2月", "3月", "4月", "5月", "6月"])
bar.add_yaxis("零基础学Python", [2567, 1888, 1359, 3400, 4050, 5500])
bar.add_yaxis("Python趣味案例编程", [1567, 988, 2270,3900, 2750, 3600])
# 渲染图表到HTML文件,存放在程序所在目录下
bar.render("mycharts.html")
  • 运行程序,在程序所在路径下生成一个名为mycharts.html的HTML文件,效果如下:

7.2 Pyecharts图表的组成

  • Pyecharts不仅具备Matplotlib图表的一些常用功能,而且还提供了独有的、别具特色的功能。主要包括主题风格的设置、提示框、视觉映射、工具箱和区域缩放等,如图7.6所示。这些功能使得Pyecharts能够绘制出各种各样、超乎想象的图表。

7.2.1 主题风格

  • Pyecharts内置了15中不同的主题风格,并提供了便捷的定制主题的方法。主要使用Pyecharts库的options模块,通过该模块的ImitOpts()方法设置图表的主题风格,下面介绍InitOpts()方法的几个关键参数。
  • 参数说明:
  • width:字符型,图表画布宽度,以像素位单位,例如width=‘500px’
  • height:字符型,图表画布高度,以像素为单位,例如height=‘300px’
  • chart_id:图表的ID,图表的唯一标识,主要用于多张图表时以区分每张图表。
  • page_title:字符型,网页标题。
  • theme:图表主题,其参数值主要由ThemeType模块提供。
  • bg_color:字符型,图表背景颜色,例如bg_color=‘black’或bg_color=’#fff’。
  • 下面详细介绍以下ThemeType模块提供的15种图表主题风格,如表7.1所示。

为图表更换主题(02)

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.globals import ThemeTypebar =(Bar(init_opts=opts.InitOpts(width='500px',height='300px',  # 设置画布大小theme=ThemeType.LIGHT,  # 设置主题#theme=ThemeType.PURPLE_PASSION,  # 紫色bg_color='#fff'))       # 设置图表背景颜色# x轴和y轴数据.add_xaxis(["1月", "2月", "3月", "4月", "5月", "6月"]).add_yaxis("零基础学Python", [2567, 1888, 1359, 3400, 4050, 5500]).add_yaxis("Python趣味案例编程", [1567, 988, 2270,3900, 2750, 3600]))
bar.render("mycharts1.html") # 渲染图表到HTML文件

7.2.2 图表标题

  • 图表标题主要通过set_global_options()方法的title_opts参数进行设置,该参数参考options模块的TitleOpts()方法,该方法可以实现主标题、副标题、距离设置以及文字样式等。TitleOpts()方法主要参数说明如下:
title_texstyle_opts=opts.TextStyleOpts(color='red',font_size=18)
  • subtitle_textstyle_opts:副标题文字样式配置项。同上。

为图表设置标题(03)

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.globals import ThemeType
bar =(Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))  # 主题风格# x轴和y轴数据.add_xaxis(["1月", "2月", "3月", "4月", "5月", "6月"]).add_yaxis("零基础学Python", [2567, 1888, 1359, 3400, 4050, 5500]).add_yaxis("Python趣味案例编程", [1567, 988, 2270,3900, 2750, 3600])# 设置图表标题.set_global_opts(title_opts=opts.TitleOpts("热门图书销量分析",   # 主标题padding=[10,4,5,90],  # 标题内边距subtitle='www.mingrisoft.com',  # 副标题item_gap=5,         # 主标题与副标题之间的间距# 主标题字体颜色和大小title_textstyle_opts=opts.TextStyleOpts(color='red',font_size=18))))
bar.render("mycharts2.html")

7.2.3 图例

  • 设置图例主要通过set_global_opts参数进行设置,该参数值参考options模块的LegendOpts()方法。LegendOpts()方法主要参数说明如下:

为图表设置图例(04)

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.globals import ThemeType
bar =(Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))  # 主题风格# x轴和y轴数据.add_xaxis(["1月", "2月", "3月", "4月", "5月", "6月"]).add_yaxis("零基础学Python", [2567, 1888, 1359, 3400, 4050, 5500]).add_yaxis("Python趣味案例编程", [1567, 988, 2270,3900, 2750, 3600])# 设置图表标题.set_global_opts(title_opts=opts.TitleOpts("热门图书销量分析",   # 主标题padding=[10,4,5,90],  # 标题内边距subtitle='www.mingrisoft.com',  # 副标题item_gap=5,         # 主标题与副标题之间的间距# 主标题字体颜色和大小title_textstyle_opts=opts.TextStyleOpts(color='red',font_size=18)),
# 设置图例
legend_opts=opts.LegendOpts(pos_right=50,   # 图例离容器左侧的距离item_width=45, # 图例标记的宽度legend_icon='circle'))  # 图例标记的样式为圆形)
bar.render("mycharts3.html")

7.2.4 提示框

  • 提示框的设置主要通过set_global_opts()方法的tooltip_opts参数进行设置,该参数值参考options模块的Tooltip()方法。TooltipOpts()方法主要参数说明如下:
  • is_show:布尔值,是否显示提示框。
  • trigger:提示框触发的类型,可选参数。item数据图形触发,主要在散点图和饼图等无类目轴的图表中使用。axis坐标轴触发,主要在柱状图和折线图等使用类目轴的图表中使用。None不触发,无提示框。

为图表设置提示框。(05)

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.globals import ThemeType
bar =(Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))  # 主题风格# x轴和y轴数据.add_xaxis(["1月", "2月", "3月", "4月", "5月", "6月"]).add_yaxis("零基础学Python", [2567, 1888, 1359, 3400, 4050, 5500]).add_yaxis("Python趣味案例编程", [1567, 988, 2270,3900, 2750, 3600])# 设置图表标题.set_global_opts(title_opts=opts.TitleOpts("热门图书销量分析",   # 主标题padding=[10,4,5,90],  # 标题内边距subtitle='www.mingrisoft.com',  # 副标题item_gap=5,         # 主标题与副标题之间的间距# 主标题字体颜色和大小title_textstyle_opts=opts.TextStyleOpts(color='red',font_size=18)),# 设置图例legend_opts=opts.LegendOpts(pos_right=50,   # 图例离容器右侧的距离item_width=45, # 图例标记的宽度legend_icon='circle'),  # 图例标记的样式为圆形# 提示框tooltip_opts=opts.TooltipOpts(trigger="axis", # 坐标轴触发trigger_on='click', # 鼠标点击时触发axis_pointer_type='cross',  # 十字线指示器background_color='blue',  # 背景色为蓝色border_width=2,      # 边框宽度border_color='red')  # 边框颜色为红色))
bar.render("mycharts5.html")        # 生成图表

7.2.5 视觉映射


为图表添加视觉映射(06)

from pyecharts import options as opts
from pyecharts.charts import Barbar=Bar()# 为柱状图添加数据
bar.add_dataset(source=[["val", "销量","月份"],[24, 10009, "1月"],[57, 19988, "2月"],[74, 39870, "3月"],[50, 12345, "4月"],[99, 50145, "5月"],[68, 29146, "6月"]])
bar.add_yaxis(series_name="销量",   # 系列名称yaxis_data=[],       # 系列数据encode={"x": "销量", "y": "月份"},   # 对x轴y轴数据进行编码label_opts=opts.LabelOpts(is_show=False)  #不显示标签文本)
bar.set_global_opts(title_opts=opts.TitleOpts("线上图书月销量分析", # 主标题subtitle='www.mingrisoft.com'), # 副标题xaxis_opts=opts.AxisOpts(name="销量"),        # x轴坐标轴名称yaxis_opts=opts.AxisOpts(type_="category"),   # y轴坐标轴类型为“类目”# 视觉映射visualmap_opts=opts.VisualMapOpts(orient="horizontal",                      # 水平放置颜色条pos_left="center",                        # 居中min_=10,                                  # 颜色条最小值max_=100,                                 # 颜色条最大值range_text=["High", "Low"],               # 颜色条两端的文本dimension=0,                              # 颜色条映射的维度range_color=["#FFF0F5", "#8B008B"]        # 颜色范围))
bar.render("mycharts6.html")                          # 生成图表

7.2.6 工具箱

为图表添加工具箱(可下载保存图片)(07)

from pyecharts import options as opts
from pyecharts.charts import Barbar=Bar()
# 为柱状图添加数据
bar.add_dataset(source=[["val", "销量","月份"],[24, 10009, "1月"],[57, 19988, "2月"],[74, 39870, "3月"],[50, 12345, "4月"],[99, 50145, "5月"],[68, 29146, "6月"]])
bar.add_yaxis(series_name="销量",   # 系列名称yaxis_data=[],       # 系列数据encode={"x": "销量", "y": "月份"},   # 对x轴y轴数据进行编码label_opts=opts.LabelOpts(is_show=False)  #不显示标签文本)
bar.set_global_opts(title_opts=opts.TitleOpts("线上图书月销量分析", # 主标题subtitle='www.mingrisoft.com'), # 副标题xaxis_opts=opts.AxisOpts(name="销量"),        # x轴坐标轴名称yaxis_opts=opts.AxisOpts(type_="category"),   # y轴坐标轴类型为“类目”# 视觉映射visualmap_opts=opts.VisualMapOpts(orient="horizontal",                      # 水平放置颜色条pos_left="center",                        # 居中min_=10,                                  # 颜色条最小值max_=100,                                 # 颜色条最大值range_text=["High", "Low"],               # 颜色条两端的文本dimension=0,                              # 颜色条映射的维度range_color=["#FFF0F5", "#8B008B"]        # 颜色范围),# 工具箱toolbox_opts=opts.ToolboxOpts(is_show=True,   # 显示工具箱pos_left=700)   # 工具箱离容器左侧的距离)
bar.render("mycharts7.html")                          # 生成图表

7.2.7 区域缩放

为图表添加区域缩放(08)

from pyecharts import options as opts
from pyecharts.charts import Barbar=Bar()
# 为柱状图添加数据
bar.add_dataset(source=[["val", "销量","月份"],[24, 10009, "1月"],[57, 19988, "2月"],[74, 39870, "3月"],[50, 12345, "4月"],[99, 50145, "5月"],[68, 29146, "6月"]])
bar.add_yaxis(series_name="销量",   # 系列名称yaxis_data=[],       # 系列数据encode={"x": "销量", "y": "月份"},   # 对x轴y轴数据进行编码label_opts=opts.LabelOpts(is_show=False)  #不显示标签文本)
bar.set_global_opts(title_opts=opts.TitleOpts("线上图书月销量分析", # 主标题subtitle='www.mingrisoft.com'), # 副标题xaxis_opts=opts.AxisOpts(name="销量"),        # x轴坐标轴名称yaxis_opts=opts.AxisOpts(type_="category"),   # y轴坐标轴类型为“类目”# 视觉映射visualmap_opts=opts.VisualMapOpts(orient="vertical",                        # 竖直放置颜色条pos_right=20,                             # 离容器右侧的距离pos_top=100,                              # 离容器顶端的距离min_=10,                                  # 颜色条最小值max_=100,                                 # 颜色条最大值range_text=["High", "Low"],               # 颜色条两端的文本dimension=0,                              # 颜色条映射的维度range_color=["#FFF0F5", "#8B008B"]        # 颜色范围),# 工具箱toolbox_opts=opts.ToolboxOpts(is_show=True,   # 显示工具箱pos_left=700),   # 工具箱离容器左侧的距离# 区域缩放工具条datazoom_opts=opts.DataZoomOpts())
bar.render("mycharts8.html")                          # 生成图表

7.3 柱状图——Bar模块

  • 绘制柱状图条形图主要使用Bar模块实现,主要方法介绍如下。
  • add_xaxis():x轴数据。
  • add_yaxis():y轴数据。
  • reversal_axis():翻转x、y轴数据。
  • add_dataset():原始数据。一般来说,原始数据表达的是二维表。

绘制多柱形图(09)

  • 上述内容简单介绍了柱状图的绘制,下面通过Pandas导入Excel文件中的数据,然后绘制多柱状图,分析近7年各个电商平台的销量情况,具体步骤如下所示。
import pandas as pd
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import ThemeType# 导入Excel文件
df = pd.read_excel('books.xlsx',sheet_name='Sheet2')
# x轴和y轴数据
x=list(df['年份'])
y1=list(df['京东'])
y2=list(df['天猫'])
y3=list(df['自营'])
bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))  # 创建柱状图并设置主题
# 为柱状图添加x轴和y轴数据
bar.add_xaxis(x)
bar.add_yaxis('京东',y1)
bar.add_yaxis('天猫',y2)
bar.add_yaxis('自营',y3)
# 渲染图表到HTML文件,存放在程序所在目录下
bar.render("mybar1.html")

7.3.2 折线/面积图——Line模块

  • AreaStypleOpts()方法,例如areastyle_opts=opts.AreaStyleOpts(opacity=1)。

绘制折线图(10)

import pandas as pd
from pyecharts.charts import Line# 导入Excel文件
df = pd.read_excel('books.xlsx',sheet_name='Sheet2')
x=list(df['年份'])
y1=list(df['京东'])
y2=list(df['天猫'])
y3=list(df['自营'])
line=Line()  # 创建折线图
# 为折线图添加x轴和y轴数据
line.add_xaxis(xaxis_data=x)
line.add_yaxis(series_name="京东",y_axis=y1)
line.add_yaxis(series_name="天猫",y_axis=y2)
line.add_yaxis(series_name="自营",y_axis=y3)
# 渲染图表到HTML文件,存放在程序所在目录下
line.render("myline1.html")

绘制面积图(11)

  • 使用Line模块还可以绘制面积图,主要通过在add_yaxis()方法中指定areastyle_opts参数,该参数值由options模块的AreaStyleOpts()方法提供。下面绘制面积图,具体步骤如下所示。
import pandas as pd
from pyecharts.charts import Line
from pyecharts import options as opts# 导入Excel文件
df = pd.read_excel('books.xlsx',sheet_name='Sheet2')
x=list(df['年份'])
y1=list(df['京东'])
y2=list(df['天猫'])
y3=list(df['自营'])
line=Line()  # 创建面积图
# 为面积图添加x轴和y轴数据
line.add_xaxis(xaxis_data=x)
line.add_yaxis(series_name="自营",y_axis=y3,areastyle_opts=opts.AreaStyleOpts(opacity=1))
line.add_yaxis(series_name="京东",y_axis=y1,areastyle_opts=opts.AreaStyleOpts(opacity=1))
line.add_yaxis(series_name="天猫",y_axis=y2,areastyle_opts=opts.AreaStyleOpts(opacity=1))
# 渲染图表到HTML文件,存放在程序所在目录下
line.render("myline2.html")

7.3.3 饼形图——Pie模块

  • 绘制饼形图主要使用Pie模块的add()方法实现。下面介绍add()方法的几个主要参数。

饼形图分析各地区销量占比情况(12)

import pandas as pd
from pyecharts.charts import Pie
from pyecharts import options as opts# 导入Excel文件
df = pd.read_excel('data2.xls')
x_data=df['地区']
y_data=df['销量']
# 将数据转换为列表加元组的格式([(key1, value1), (key2, value2)])
data=[list(z) for z in zip(x_data, y_data)]
data

7.3.4 箱形图——Boxplot模块

绘制简单的箱形图(13)

import pandas as pd
from pyecharts.charts import Boxplot# 导入Excel文件
df = pd.read_excel('Tips.xlsx')
y_data=[list(df['总消费'])]boxplot=Boxplot()   #创建箱形图
# 为箱形图添加数据
boxplot.add_xaxis([""])
boxplot.add_yaxis('',y_axis=boxplot.prepare_data(y_data))
# 渲染图表到HTML文件,存放在程序所在目录下
boxplot.render("myboxplot.html")

7.3.5 涟漪特效散点图——EffectScatter模块

绘制简单的散点图(14)

  • 绘制涟漪特效散点图主要使用EffectScatter模块的add_xaxis()方法和add_yaxis()方法实现。下面绘制一个简单的涟漪特效散点图,程序代码如下:
import pandas as pd
from pyecharts.charts import EffectScatter# 导入Excel文件
df = pd.read_excel('books.xlsx',sheet_name='Sheet2')
# x轴和y轴数据
x=list(df['年份'])
y1=list(df['京东'])
y2=list(df['天猫'])
y3=list(df['自营'])
# 绘制涟漪散点图
scatter=EffectScatter()
scatter.add_xaxis(x)
scatter.add_yaxis("",y1)
scatter.add_yaxis("",y2)
scatter.add_yaxis("",y3)
# 渲染图表到HTML文件,存放在程序所在目录下
scatter.render("myscatter.html")

7.3.6 词云图——WordCloud模块

  • 绘制词云图主要使用WordCloud模块的add()方法实现。下面介绍add()方法的几个主要参数。
  • series_name:系列名称。用于提示文本和图例标签。
  • data_pair:数据项。格式为[(word1,count1),(word2,count2)]。可使用zip()函数将可迭代对象打包成元组,然后再转换成列表。
  • shape:字符型,词云图的轮廓。其值为circle、cardioid、diamond、triangle-forward、triangle、pentagon或star。
  • mask_image:自定义图片(支持的图片格式为jpg、jpeg、png和ico)。该参数支持base64(一种基于64个可打印字符来表示二进制的方法)和本地文件路径(相对或者绝对路径都可以)。
  • word_gap:单词间隔。
  • word_size_range:单词字体大小范围。
  • rotate_step:旋转单词角度。
  • pos_left:距离左侧的距离。
  • pos_top:距离顶部的距离。
  • pos_right:距离右侧的距离。
  • pos_bottom:距离顶部的距离。
  • width:词云图的宽度。
  • height:词云图的高度。
  • 实现词云图首先需要通过jieba模块的TextRank算法从文本中提取关键词。TextRank是一种文本排序算法,是基于著名的网页排序算法PageRank改动而来。TextRank不仅能进行关键词提取,也能做自动文摘。
  • 根据某个词所连接的所有词汇的权重(权重是指某一因素相对于某一事物的重要程度,这里指某个词在整段文字中的重要程度),重新计算该词汇的权重,然后把重新计算的权重传递下去,知道这种变化达到均衡态,权重数值不再发生改变。根据最后的权重值,取其中排列靠前的词汇作为关键词。

绘制词云图分析用户评论内容。(15)

from pyecharts.charts import WordCloud
from jieba import analyse# 基于TextRank算法从文本中提取关键词
textrank = analyse.textrank
text = open('111.txt','r',encoding='gbk').read()
keywords = textrank(text,topK=30)
list1=[]
tup1=()# 关键词列表
for keyword, weight in textrank(text,topK=30, withWeight=True):print('%s %s' % (keyword, weight))tup1=(keyword,weight)  #关键词权重list1.append(tup1)     #添加到列表中
# 绘制词云图
mywordcloud=WordCloud()
mywordcloud.add('',list1,word_size_range=[20,100])
mywordcloud.render('wordclound.html')

7.3.7 热力图——HeatMap模块

热力图统计双色求中奖号码出现次数(16)

import pyecharts.options as opts
from pyecharts.charts import HeatMap
import pandas as pd# 导入Excel文件
df=pd.read_csv('data.csv',encoding='gb2312')
series=df['中奖号码'].str.split('  ',expand=True) # 提取中奖号码
# 统计每一位中奖号码出现的次数
df1=df.groupby(series[0]).size()
df2=df.groupby(series[1]).size()
df3=df.groupby(series[2]).size()
df4=df.groupby(series[3]).size()
df5=df.groupby(series[4]).size()
df6=df.groupby(series[5]).size()
df7=df.groupby(series[6]).size()
#横向表合并(行对齐)
data = pd.concat([df1,df2,df3,df4,df5,df6,df7], axis=1,sort=True)
data=data.fillna(0)   #空值NaN替换为0
data=data.round(0).astype(int)#浮点数转换为整数
# 数据转换为HeatMap支持的列表格式
value1=[]
for i in range(7):for j in range(33):value1.append([i,j,int(data.iloc[j,i])])
# 绘制热力图
x=['第1位','第2位','第3位','第4位','第5位','第6位','第7位']
heatmap=HeatMap(init_opts=opts.InitOpts(width='600px',height='650px'))
heatmap.add_xaxis(x)
heatmap.add_yaxis("aa",list(data.index),value=value1,  # y轴数据# y轴标签label_opts=opts.LabelOpts(is_show=True,color='white',position="center"))
heatmap.set_global_opts(title_opts=opts.TitleOpts(title="统计2014~2019年双色球中奖号码出现的次数",pos_left="center"),legend_opts=opts.LegendOpts(is_show=False),# 不显示图例xaxis_opts=opts.AxisOpts( # 坐标轴配置项type_="category",  # 类目轴splitarea_opts=opts.SplitAreaOpts( # 分隔区域配置项is_show=True,# 区域填充样式areastyle_opts=opts.AreaStyleOpts(opacity=1)),),yaxis_opts=opts.AxisOpts( # 坐标轴配置项type_="category", # 类目轴splitarea_opts=opts.SplitAreaOpts( # 分隔区域配置项is_show=True,# 区域填充样式areastyle_opts=opts.AreaStyleOpts(opacity=1)),),# 视觉映射配置项visualmap_opts=opts.VisualMapOpts(is_piecewise=True,   # 分段显示min_=1,max_=170,     # 最小值、最大值orient='horizontal', # 水平方向pos_left="center")   # 居中)
heatmap.render("heatmap.html")

7.3.8 水球图——Liquid模块

绘制水球图(17)

  • 绘制水球图主要使用Liquid模块的add()方法。下面绘制一个简单的涟漪特效散点图,程序代码如下:
from pyecharts.charts import Liquid
# 绘制水球图
liquid=Liquid()
liquid.add('',[0.7])
liquid.render("myliquid.html")

7.3.9 日历图——Calendar模块

绘制加班日历图(18)

  • 绘制日历图主要使用Calendar模块的add()方法实现。下面绘制一个简单的日历图,通过该日历图分析6月份加班情况,程序代码如下:
  • 原始数据如下:
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Calendar
# 导入Excel文件
df=pd.read_excel('202001.xls')
data=df.stack()  # 行列转换
data

# 求最大值和最小值
mymax=round(max(data),2)
mymin=round(min(data),2)
# 生成日期
index=pd.date_range('20200601','20200630')
# 合并列表
data_list=list(zip(index,data))
# 生成日历图
calendar=Calendar()
calendar.add("",data_list,calendar_opts=opts.CalendarOpts(range_=['2020-06-01','2020-06-30']))
calendar.set_global_opts(title_opts=opts.TitleOpts(title="2020年6月加班情况",pos_left='center'),visualmap_opts=opts.VisualMapOpts(max_=mymax,min_=mymin+0.1,orient="horizontal",is_piecewise=True,pos_top="230px",pos_left="70px",),)
calendar.render("mycalendar.html")

7.4 综合应用

7.4.1 南丁格尔玫瑰图

  • 下面使用Pie模块绘制南丁格尔玫瑰图:
  • 南丁格尔玫瑰图主要通过绘制饼图实现,其中一个关键点是设置rosetype参数为area,具体实现步骤如下所示。

(1)导入相关包

import pandas as pd
from pyecharts.charts import Pie
from pyecharts import options as opts

(2)导入Excel文件

# 导入Excel文件
df = pd.read_excel('data2.xls')
x_data=df['地区']
y_data=df['累计']
# 将数据转换为列表加元组的格式([(key1, value1), (key2, value2)])
data=[list(z) for z in zip(x_data, y_data)]
# 数据排序
data.sort(key=lambda x: x[1])

(3)绘制男丁格尔玫瑰图

# 创建饼形图并设置画布大小
pie=Pie(init_opts=opts.InitOpts(width='800px',height='400px'))
# 为饼形图添加数据
pie.add(series_name="地区",   # 序列名称data_pair=data,       # 数据radius=["8%","160%"], #内外半径center=["60%","80%"], # 位置rosetype='area',      # 玫瑰图color='auto'          # 颜色自动渐变)
pie.set_global_opts(# 不显示图例legend_opts=opts.LegendOpts(is_show=False),# 视觉映射visualmap_opts=opts.VisualMapOpts(is_show=False,min_=100,    # 颜色条最小值max_=450000, # 颜色条最大值)
)
pie.set_series_opts(# 序列标签label_opts=opts.LabelOpts(position='inside',  # 标签位置rotate=45,font_size=8)       # 字体大小#formatter="{b}: {c}") # 标签格式)
# 渲染图表到HTML文件,存放在程序所在目录下
pie.render("mypie1.html")

7.4.2 双y轴可视化数据分析图表的实现(柱形图+折线图)

  • 双y轴顾名思义就是两个y轴,下面实现柱形图+折线图双y轴图表的绘制,其中柱形图y表示月销量,折线图y轴表示3个平台的月销售平均量,效果如下:
import pyecharts.options as opts
from pyecharts.charts import Bar, Line
import pandas as pd
import numpy
# 导入Excel文件
df=pd.read_excel('books.xlsx')
x_data =list(df['月份'])
y1=list(df['京东'])
y2=list(df['天猫'])
y3=list(df['自营'])
# 颜色列表
colors = ["#5793f3", "#FFD700", "#675bba"]
# 求平均值并保留整数位
y_average=list(((df['京东']+df['天猫']+df['自营'])/3).apply(numpy.round))
# 绘制柱形图
legend_list =["京东","天猫","自营"]
bar = (Bar(init_opts=opts.InitOpts(width="1000px", height="500px")).add_xaxis(xaxis_data=x_data).add_yaxis(series_name="京东",yaxis_data=y1,color=colors[0],yaxis_index=0,).add_yaxis(series_name="天猫",yaxis_data=y2,color=colors[1]).add_yaxis(series_name="自营",yaxis_data=y3,color=colors[2]).extend_axis(yaxis=opts.AxisOpts())
)
# 绘制折线图
line =Line()
line.add_xaxis(xaxis_data=x_data)
line.add_yaxis(series_name="平均销量",y_axis=y_average,     # y轴平均值color='red',yaxis_index=1,)
# 渲染图表到HTML文件,存放在程序所在目录下
bar.overlap(line).render("barline.html")

  • 实现双y轴可视化数据分析图表的两个关键点:一是使用Bar模块的extend_axis()方法扩展y轴;二是对add_yaxis()方法的yaxis_index参数进行设置,该参数用于指定y轴的索引值,从0开始。双y轴索引值分别为0和1。

7.4.3 饼形图与环形图组合图表的实现

  • 饼形图和环形图组合,其中饼形图展示“北上广”三大主要城市的销量情况,环形图展示其他省份的销量情况:
import pyecharts.options as opts
from pyecharts.charts import Pie# 饼形图数据
x1 = ["北京", "上海", "广州"]
y1 = [1168, 890,578]
data1 = [list(z) for z in zip(x1,y1)]
# 环形图数据
x2 = ["北京", "上海", "河南省", "广州", "湖南省", "四川省", "湖北省", "河北省", "江苏省", "浙江省"]
y2 = [1168, 890, 234, 578, 345, 225, 188, 101,999,1300]
data2 = [list(z) for z in zip(x2,y2)]
# 饼形图与环形图组合
(Pie(init_opts=opts.InitOpts(width="1000px", height="600px"))# 饼形图.add(series_name="销售地区",data_pair=data1,radius=[0, "30%"],label_opts=opts.LabelOpts(position="inner"), # 饼形图标签)# 环形图.add(series_name="销售地区",radius=["40%", "55%"],data_pair=data2,# 环形图标签label_opts=opts.LabelOpts(position="outside", # 标签位置# 标签格式化formatter="{a|{a}}{bg|}\n{hr|}\n {b|{b}: }{c}  {per|{d}%}  ",background_color="#FAFAD2",  # 背景色border_color="#FFA500", # 边框颜色border_width=1,  # 边框宽度border_radius=4, # 边框半径# 利用富文本样式,定义标签效果rich={"a": {"color": "black", "lineHeight": 22, "align": "center"},"bg": {"backgroundColor": "#FFA500","width": "100%","align": "right","height": 22,"borderRadius": [4, 4, 0, 0],},"hr": {"borderColor": "#aaa","width": "100%","borderWidth": 0.5,"height": 0,},"b": {"fontSize": 14, "lineHeight": 33},"per": {"color": "#eee","backgroundColor": "#334455","padding": [2, 4],"borderRadius": 2,},},),).set_global_opts(legend_opts=opts.LegendOpts(pos_left="left", orient="vertical")).set_series_opts(tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)")).render("mypies.html")
)

  • 绘制饼形图与环形图组合图表的一个关键点就是创建两个饼形图,并设置不同的半径(radius参数),具体实现步骤如下所示。

7.5 小节

  • 相比Matplotlib和Searnborn Pyecharts绘制出的图表更加令人惊叹,其动感效果更是Matplotlib和Searnborn无法比拟的,但也存在不足之处。其生成的图表为网页格式,不能够随时查看,需要打开文件进行浏览。Pyecharts更适合Web程序。
  • Pyecharts还有很多功能,由于篇幅有限不能一一介绍,希望读者在学习过程中嫩巩固举一反三,绘制出更多精彩的数据分析图表。

第三方可视化数据分析图表Pyecharts(下载保存图片(生成的html图片)、zip函数(将数据转换为列表加元组的格式)、南丁格尔玫瑰图、双y轴可视化、饼形图和环形图)相关推荐

  1. 【Python数据分析——使用matplotlib制作南丁格尔玫瑰图】

    目录 一.介绍 二.相关库 三.数据准备 四.pyecahrts代码实现 五.matplotlib代码实现 一.介绍 玫瑰图是弗罗伦斯·南丁格尔所发明的.又名为极坐标面积图,是一种圆形的直方图. 南丁 ...

  2. staruml顺序图生成协作图_一个工具箱 之 南丁格尔玫瑰图生成器

    南丁格尔玫瑰图是一种圆形的直方图,由弗罗伦斯·南丁格尔所发明,又名为极区图.出于对资料统计的结果会不受人重视的忧虑,她发展出一种色彩缤纷的图表形式,让数据能够更加让人印象深刻. 南丁格尔玫瑰图将柱图转 ...

  3. 【Python绘图】pyecharts绘制南丁格尔玫瑰图

    from pyecharts.charts import Pie from pyecharts import options as opts import random# 随机颜色生成 def ran ...

  4. echarts绘制嵌套环形图(南丁格尔玫瑰图)

    根据专业总人数和学院总人数绘制嵌套环形图 首先,echarts的基本步骤 引入js,准备容器,初始化实例, <script src="lib/echarts.min.js"& ...

  5. tableau实战系列(三十九)-教你如何优雅的做图表展示-南丁格尔玫瑰图

    前言 饼图是常用的分析图表之一,但当分析的数据类别过多时,饼图就会因为分区密集,大大降低其可视化效果(如下图). 遇到这种情况,可以考虑使用南丁格尔玫瑰图.事实上,它的可视化呈现很不错. 如果觉得玫瑰 ...

  6. 南丁格尔玫瑰图 | 集才华和美貌于一身的数据图表

    南丁格尔玫瑰图将柱图转化为更美观的饼图形式,是极坐标化的柱图,其夸大了数据之间差异的视觉效果,适合展示数据原本差异小的数据. 1.玫瑰图的前世今生 长得像饼图又不是饼图,这种有着极坐标的统计图有着一个 ...

  7. 教你做超惊艳的南丁格尔玫瑰图

    其实早在今年初,疫情还很严重的时候,人民日报发布的这个图就吸引了广大数据分析者的注意. 今天我们就把这个图的前因后果以及怎么做一次性讲清楚. 玫瑰图的前世今生 这个图学名:南丁格尔玫瑰图,是弗罗伦斯· ...

  8. Python数据可视化之南丁格尔玫瑰图(亲测)

    文章目录 1. 什么是南丁格尔玫瑰图 2. 南丁格尔玫瑰图的绘制 1. 什么是南丁格尔玫瑰图 央视新闻用来展示疫情0增长天数的图就是南丁格尔玫瑰图. 南丁格尔玫瑰图(Nightingale rose ...

  9. python画玫瑰图_央视都在用的“南丁格尔玫瑰图”,原来Python也可以画

    前一阵子,我看到央视新闻中,有一张比较好看数据图,如下: 后来才知道这叫"南丁格尔玫瑰图",是南丁格尔护士在克里米亚战争期间提交的一份关于士兵死伤报告时发明的一种图表. 我心想能不 ...

  10. Python数据可视化之南丁格尔玫瑰图

    文章目录 1. 什么是南丁格尔玫瑰图 2. 南丁格尔玫瑰图的绘制 1. 什么是南丁格尔玫瑰图 央视新闻用来展示疫情0增长天数的图就是南丁格尔玫瑰图. 南丁格尔玫瑰图(Nightingale rose ...

最新文章

  1. 如何计算并测量ABAP及Java代码的环复杂度Cyclomatic complexity
  2. 常见电容器图片_各种电容器图片大集合
  3. java依赖_java 依赖、组合、聚合与继承
  4. codeforces 41A-C语言解题报告
  5. 10万码农五年的C语言笔记!你现在知道别人为什么这么优秀了吗?
  6. LeetCode——二叉树的最近公共祖先
  7. 次世代的会话管理项目 Spring Session
  8. 深入学习卷积神经网络中卷积层和池化层的意义(转)
  9. ReultSet有什么作用和使用
  10. HTTP1.1与HTTP1.0
  11. 台湾大学林轩田机器学习基石课程学习笔记9 -- Linear Regression
  12. Win10安装net framework 3.5失败,错误代码0x8024402c
  13. 国内三大常见核心期刊体系简介——CSSCI、CSCD与中文核心期【转】刊
  14. 华为注册“鸿蒙”商标为自研操作系统铺路,或已经用于华为设备中。
  15. RFID不是一个赚快钱的行业,需要沉下心来
  16. 一文深度剖析ConcurrentHashMap
  17. day16re模块和面向对象
  18. Golang中import 导入包的几种方式:点,别名与下划线
  19. VHDL 语言学习笔记(1)
  20. 定制RLC防孤岛测试负载

热门文章

  1. HDUOJ---携程员工运动会场地问题
  2. 【实习日报】2019年4月下半月 前端开发实习工作日报汇总
  3. 扇贝单词英语版_产品分析报告
  4. Saltstack_使用指南11_配置管理-状态之间依赖关系
  5. 圣诞节礼物送什么有新意?高颜值蓝牙耳机可表心意
  6. 手机共享计算机网络连接,电脑和手机网络的相互共享
  7. 聚类——K均值简介及Python实现
  8. 中国工程院院士倪光南:拥抱开源 与世界协同创新
  9. matlab分簇教程,分簇算法matlab
  10. java分解因式_Java将一个整数因式分解