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

  • 本文来自《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 ThemeType

bar =(
    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 Bar

bar=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 Bar

bar=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 Bar

bar=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还有很多功能,由于篇幅有限不能一一介绍,希望读者在学习过程中嫩巩固举一反三,绘制出更多精彩的数据分析图表。
  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值