Python 数据可视化工具 Pyecharts 安装及应用


Posted in Python onApril 20, 2022

1. 安装Pyecharts

pip install pyecharts

2. 图表基础

2.1 主题风格

添加主题风格使用的是 InitOpts() 方法,

该方法的主要参数有:

参数 描述
width 画布宽度,要求字符串格式,如 width=“500px”
height 画布高度,要求字符串格式,如 width=“500px”
chart_id 图表ID,作为图表的唯一标识。有多个图表时用来区分不同的图表
page_title 网页标题,字符串格式
theme 图表主题。由ThemeType模块提供
bg_color 图表背景颜色,字符串格式

可以选择的风格有:

Python 数据可视化工具 Pyecharts 安装及应用

2.2 图表标题

给图表添加标题需要通过 set_global_options()方法 的 title_opts参数,

该参数的值通过opts模块的TitleOpts()方法生成,

且TitleOpts()方法主要参数语法如下:

Python 数据可视化工具 Pyecharts 安装及应用

2.3 图例

设置图例需要通过 set_global_opts()方法的 legend_opts参数,

该参数的参数值参考options模块的LegendOpts()方法。

LegendOpts() 方法的主要参数如下:

Python 数据可视化工具 Pyecharts 安装及应用

2.4 提示框

设置提示框主要是通过 set_global_opts()方法中的 tooltip_opts参数进行设置,

该参数的参数值参考options模块的TooltipOpts()方法。

TooltipOpts()方法的主要参数如下:

Python 数据可视化工具 Pyecharts 安装及应用

2.5 视觉映射

视觉映射通过 set_global_opts()方法中的 visualmap_opts参数进行设置,

该参数的取值参考options模块的VisualMapOpts()方法。

其主要参数如下:

Python 数据可视化工具 Pyecharts 安装及应用

2.6 工具箱

工具箱通过 set_global_opts()方法中的 toolbox_opts参数进行设置,

该参数的取值参考options模块的ToolboxOpts()方法。

其主要参数如下:

Python 数据可视化工具 Pyecharts 安装及应用

2.7 区域缩放

区域缩放通过 set_global_opts()方法中的 datazoom_opts参数进行设置,

该参数的取值参考options模块的DataZoomOpts()方法。

其主要参数如下:

Python 数据可视化工具 Pyecharts 安装及应用

3. 柱状图 Bar模块

绘制柱状图通过Bar模块来实现,

该模块的主要方法有:

主要方法 描述
add_xaxis() x轴数据
add_yaxis() y轴数据
reversal_axis() 翻转x、y轴数据
add_dataset() 原始数据

下边展示一个简单的示例,先不使用过多复杂的样式:

import numpy as np
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import ThemeType

# 生成数据
years = [2011, 2012, 2013, 2014, 2015]
y1 = [1, 3, 5, 7, 9]
y2 = [2, 4, 6, 4, 2]
y3 = [9, 7, 5, 3, 1]
y4 = list(np.random.randint(1, 10, 10))

bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
# 为柱状图添加x轴和y轴数据
bar.add_xaxis(years)
bar.add_yaxis('A型', y1)
bar.add_yaxis('B型', y2)
bar.add_yaxis('C型', y3)
bar.add_yaxis('D型', y4)
# 渲染图表到HTML文件,并保存在当前目录下
bar.render("bar.html")

生成图像效果如下:

Python 数据可视化工具 Pyecharts 安装及应用

这里有一个无法解释的细节,就是可以看到y4数据,即D型,在图像中没有显示出来。经过小啾的反复尝试,发现凡是使用随机数产生的数据再转化成列表,这部分随机数不会被写入到html文件中:

Python 数据可视化工具 Pyecharts 安装及应用

既然不会解释,那就避免。

4. 折线图/面积图 Line模块

Line模块的主要方法有add_xaxis() 和 add_yaxis(),分别用来添加x轴数据和y轴数据。

add_yaxis()的主要参数如下:

Python 数据可视化工具 Pyecharts 安装及应用

4.1 折线图

绘制折线图时,x轴的数据必须是字符串,图线方可正常显示。

from pyecharts.charts import Line
from pyecharts import options as opts
from pyecharts.globals import ThemeType

# 准备数据
x = [2011, 2012, 2013, 2014, 2015]
x_data = [str(i) for i in x]
y1 = [1, 3, 2, 5, 8]
y2 = [2, 6, 5, 6, 7]
y3 = [5, 7, 4, 3, 1]

line = Line(init_opts=opts.InitOpts(theme=ThemeType.ESSOS))
line.add_xaxis(xaxis_data=x_data)
line.add_yaxis(series_name="A类", y_axis=y1)
line.add_yaxis(series_name="B类", y_axis=y2)
line.add_yaxis(series_name="C类", y_axis=y3)
line.render("line.html")

生成图像效果如下:

Python 数据可视化工具 Pyecharts 安装及应用

4.2 面积图

绘制面积图时需要在add_yaxis()方法中指定areastyle_opts参数。其值由options模块的AreaStyleOpts()方法提供。

from pyecharts.charts import Line
from pyecharts import options as opts
from pyecharts.globals import ThemeType


x = [2011, 2012, 2013, 2014, 2015]
x_data = [str(i) for i in x]
y1 = [2, 5, 6, 8, 9]
y2 = [1, 4, 5, 4, 7]
y3 = [1, 3, 4, 6, 6]

line = Line(init_opts=opts.InitOpts(theme=ThemeType.WONDERLAND))

line.add_xaxis(xaxis_data=x_data)
line.add_yaxis(series_name="A类", y_axis=y1, areastyle_opts=opts.AreaStyleOpts(opacity=1))
line.add_yaxis(series_name="B类", y_axis=y2, areastyle_opts=opts.AreaStyleOpts(opacity=1))
line.add_yaxis(series_name="C类", y_axis=y3, areastyle_opts=opts.AreaStyleOpts(opacity=1))

line.render("line2.html")

图像效果如下:

Python 数据可视化工具 Pyecharts 安装及应用

5.饼形图

5.1 饼形图

绘制饼形图使用的是Pie模块,该模块中需要使用的主要方法是add()方法

该方法主要参数如下:

主要参数 描述
series_name 系列名称。用于提示文本和图例标签。
data_pair 数据项,格式为形如[(key1,value1),(key2,value2)]
color 系列标签的颜色。
radius 饼图的半径。默认设成百分比形式,默认是相对于容器的高和宽中较小的一方的一半
rosetype 是否展开为南丁格尔玫瑰图,可以取的值有radius货area,radius表示通过扇区圆心角展现数据的大小,即默认的扇形图;area表示所有扇区的圆心角的角度相同,通过半径来展现数据大小
from pyecharts.charts import Pie
from pyecharts import options as opts
from pyecharts.globals import ThemeType

x_data = ['AAA', 'BBB', 'CCC', 'DDD', 'EEE', 'FFF']
y_data = [200, 200, 100, 400, 500, 600]
# 将数据转换为目标格式
data = [list(z) for z in zip(x_data, y_data)]
# 数据排序
data.sort(key=lambda x: x[1])

pie = Pie(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))

pie.add(
        series_name="类别",    # 序列名称
        data_pair=data,     # 数据
    )
pie.set_global_opts(
        # 饼形图标题
        title_opts=opts.TitleOpts(
            title="各类别数量分析",
            pos_left="center"),
        # 不显示图例
        legend_opts=opts.LegendOpts(is_show=False),
    )
pie.set_series_opts(
        # 序列标签
        label_opts=opts.LabelOpts(),
    )

pie.render("pie.html")

图像效果如下:

Python 数据可视化工具 Pyecharts 安装及应用

5.2 南丁格尔玫瑰图

from pyecharts.charts import Pie
from pyecharts import options as opts
from pyecharts.globals import ThemeType


x_data = ['AAA', 'BBB', 'CCC', 'DDD', 'EEE', 'FFF', 'GGG', 'HHH', 'III', 'JJJ', 'KKK', 'LLL', 'MMM', 'NNN', 'OOO']
y_data = [200, 100, 400, 50, 600, 300, 500, 700, 800, 900, 1000, 1100, 1200, 1300, 1500]
# 将数据转换为目标格式
data = [list(z) for z in zip(x_data, y_data)]
# 数据排序
data.sort(key=lambda x: x[1])

# 创建饼形图并设置画布大小
pie = Pie(init_opts=opts.InitOpts(theme=ThemeType.ROMANTIC, width='300px', height='400px'))
# 为饼形图添加数据
pie.add(
        series_name="类别",
        data_pair=data,
        radius=["8%", "160%"],  # 内外半径
        center=["65%", "65%"],  # 位置
        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)       # 字体大小
    )

pie.render("pie2.html")

图像效果如下:

Python 数据可视化工具 Pyecharts 安装及应用

6. 箱线图 Boxplot模块

绘制箱线图使用的是Boxplot类。

这里有一个细节,准备y轴数据y_data时需要在列表外再套一层列表,否则图线不会被显示。

绘制箱线图使用的是Boxplot模块,

主要的方法有

add_xaxis()和add_yaxis()

from pyecharts.charts import Boxplot
from pyecharts.globals import ThemeType
from pyecharts import options as opts

y_data = [[5, 20, 22, 21, 23, 26, 25, 24, 28, 26, 29, 30, 50, 61]]

boxplot = Boxplot(init_opts=opts.InitOpts(theme=ThemeType.INFOGRAPHIC))

boxplot.add_xaxis([""])
boxplot.add_yaxis('', y_axis=boxplot.prepare_data(y_data))
boxplot.render("boxplot.html")

图像效果如下:

Python 数据可视化工具 Pyecharts 安装及应用

7. 涟漪特效散点图 EffectScatter模块

绘制涟漪图使用的是EffectScatter模块,代码示例如下:

from pyecharts.charts import EffectScatter
from pyecharts import options as opts
from pyecharts.globals import ThemeType


x = [2011, 2012, 2013, 2014, 2015]
x_data = [str(i) for i in x]
y1 = [1, 3, 2, 5, 8]
y2 = [2, 6, 5, 6, 7]
y3 = [5, 7, 4, 3, 1]

scatter = EffectScatter(init_opts=opts.InitOpts(theme=ThemeType.VINTAGE))
scatter.add_xaxis(x_data)
scatter.add_yaxis("", y1)
scatter.add_yaxis("", y2)
scatter.add_yaxis("", y3)
# 渲染图表到HTML文件,存放在程序所在目录下
scatter.render("EffectScatter.html")

图像效果如下:

Python 数据可视化工具 Pyecharts 安装及应用

8. 词云图 WordCloud模块

绘制词云图使用的是WordCloud模块,

主要的方法有add()方法。

add()方法的主要参数如下:

add()方法主要的参数有

Python 数据可视化工具 Pyecharts 安装及应用

准备一个txt文件(001.txt),文本内容以《兰亭集序》为例:

永和九年,岁在癸丑,暮春之初,会于会稽山阴之兰亭,修禊事也。群贤毕至,少长咸集。此地有崇山峻岭,茂林修竹,又有清流激湍,映带左右,引以为流觞曲水,列坐其次。虽无丝竹管弦之盛,一觞一咏,亦足以畅叙幽情。
是日也,天朗气清,惠风和畅。仰观宇宙之大,俯察品类之盛,所以游目骋怀,足以极视听之娱,信可乐也。
夫人之相与,俯仰一世。或取诸怀抱,悟言一室之内;或因寄所托,放浪形骸之外。虽趣舍万殊,静躁不同,当其欣于所遇,暂得于己,快然自足,不知老之将至;及其所之既倦,情随事迁,感慨系之矣。向之所欣,俯仰之间,已为陈迹,犹不能不以之兴怀,况修短随化,终期于尽!古人云:“死生亦大矣。”岂不痛哉!
每览昔人兴感之由,若合一契,未尝不临文嗟悼,不能喻之于怀。固知一死生为虚诞,齐彭殇为妄作。后之视今,亦犹今之视昔,悲夫!故列叙时人,录其所述,虽世殊事异,所以兴怀,其致一也。后之览者,亦将有感于斯文。

代码示例如下:

from pyecharts.charts import WordCloud
from jieba import analyse

# 基于TextRank算法从文本中提取关键词
textrank = analyse.textrank
text = open('001.txt', 'r', encoding='UTF-8').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')

词云图效果如下:

Python 数据可视化工具 Pyecharts 安装及应用

9. 热力图 HeatMap模块

绘制热力图使用的是HeatMap模块。

下边以双色球案例为例,数据使用生成的随机数,绘制出热力图:

import pyecharts.options as opts
from pyecharts.charts import HeatMap
import pandas as pd
import numpy as np

# 创建一个33行7列的DataFrame,数据使用随机数生成。每个数据表示该位置上该数字出现的次数
s1 = np.random.randint(0, 200, 33)
s2 = np.random.randint(0, 200, 33)
s3 = np.random.randint(0, 200, 33)
s4 = np.random.randint(0, 200, 33)
s5 = np.random.randint(0, 200, 33)
s6 = np.random.randint(0, 200, 33)
s7 = np.random.randint(0, 200, 33)
data = pd.DataFrame(
    {'位置一': s1,
     '位置二': s2,
     '位置三': s3,
     '位置四': s4,
     '位置五': s5,
     '位置六': s6,
     '位置七': s7
     },
    index=range(1, 34)
)

# 数据转换为HeatMap支持的列表格式
value1 = []
for i in range(7):
    for j in range(33):
        value1.append([i, j, int(data.iloc[j, i])])
# 绘制热力图
x = data.columns
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="双色球中奖号码热力图", 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")

热力图效果如下:

Python 数据可视化工具 Pyecharts 安装及应用

10. 水球图 Liquid模块

绘制水球图使用的是Liquid模块。

from pyecharts.charts import Liquid
liquid = Liquid()
liquid.add('', [0.39])
liquid.render("liquid.html")

水球图效果如下:

Python 数据可视化工具 Pyecharts 安装及应用

11. 日历图 Calendar模块

绘制日历图使用的是Calendar模块

主要使用的方法是add()方法

import pandas as pd
import numpy as np
from pyecharts import options as opts
from pyecharts.charts import Calendar
data = list(np.random.random(30))
# 求最大值和最小值
mymax = round(max(data), 2)
mymin = round(min(data), 2)
# 生成日期
index = pd.date_range('20220401', '20220430')
# 合并列表
data_list = list(zip(index, data))
# 生成日历图
calendar = Calendar()
calendar.add("",
             data_list,
             calendar_opts=opts.CalendarOpts(range_=['2022-04-01', '2022-04-30']))
calendar.set_global_opts(
        title_opts=opts.TitleOpts(title="2022年4月某指标情况", 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("calendar.html")

日历图效果如下:

Python 数据可视化工具 Pyecharts 安装及应用

以上就是Python数据可视化之Pyecharts使用详解的详细内容!

Python 相关文章推荐
python生成验证码图片代码分享
Jan 28 Python
浅谈终端直接执行py文件,不需要python命令
Jan 23 Python
对numpy数据写入文件的方法讲解
Jul 09 Python
在python中安装basemap的教程
Sep 20 Python
python矩阵/字典实现最短路径算法
Jan 17 Python
python整小时 整天时间戳获取算法示例
Feb 20 Python
Python时间和字符串转换操作实例分析
Mar 16 Python
python进程间通信Queue工作过程详解
Nov 01 Python
Python常用模块os.path之文件及路径操作方法
Dec 03 Python
Python Tensor FLow简单使用方法实例详解
Jan 14 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
Apr 02 Python
python datetime时间格式的相互转换问题
Jun 11 Python
python画条形图的具体代码
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
Apr 20 #Python
Pandas 数据编码的十种方法
Apr 20 #Python
Python读取和写入Excel数据
Python 的演示平台支持 WSGI 接口的应用
Apr 20 #Python
python​格式化字符串
Apr 20 #Python
Python编写冷笑话生成器
Apr 20 #Python
You might like
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
2014/05/10 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
JavaScript中的Location地址对象
2008/01/16 Javascript
基于JQuery的简单实现折叠菜单代码
2010/09/15 Javascript
js模仿html5 placeholder适应于不支持的浏览器
2013/01/13 Javascript
jQuery获取Radio,CheckBox选择的Value值(示例代码)
2013/12/12 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
2014/05/15 Javascript
js控制再次点击按钮之间的间隔时间可防止重复提交
2014/08/01 Javascript
JavaScript奇技淫巧44招【实用】
2016/12/11 Javascript
Bootstrap CSS组件之下拉菜单(dropdown)
2016/12/17 Javascript
vue使用drag与drop实现拖拽的示例代码
2017/09/07 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
2019/05/13 Javascript
vue quill editor 使用富文本添加上传音频功能
2020/01/14 Javascript
vue.js iview打包上线后字体图标不显示解决办法
2020/01/20 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
[00:09]DOTA2全国高校联赛 精彩活动引爆全场
2018/05/30 DOTA
零基础写python爬虫之HTTP异常处理
2014/11/05 Python
python 第三方库的安装及pip的使用详解
2017/05/11 Python
python实现动态创建类的方法分析
2019/06/25 Python
python中的decimal类型转换实例详解
2019/06/26 Python
python实现网站微信登录的示例代码
2019/09/18 Python
Django app配置多个数据库代码实例
2019/12/17 Python
flask利用flask-wtf验证上传的文件的方法
2020/01/17 Python
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
What's the difference between an interface and abstract class? (接口与抽象类有什么区别)
2012/10/29 面试题
HttpServlet类中的主要方法都有哪些?各自的作用是什么?
2014/03/16 面试题
房地产员工找工作的自我评价
2013/11/15 职场文书
个人三严三实对照检查材料
2014/09/25 职场文书
社区党建工作汇报材料
2014/10/27 职场文书
2014年园林绿化工作总结
2014/12/11 职场文书
先进基层党组织材料
2014/12/25 职场文书
2016春季小学开学寄语
2015/12/03 职场文书
Python数据分析之pandas函数详解
2021/04/21 Python
MySQL 视图(View)原理解析
2021/05/19 MySQL