『Python』matplotlib常用图表
这里简要介绍几种统计图形的绘制方法,其他更多图形可以去matplotlib找examples魔改
1. 柱状图
柱状图主要是应用在定性数据的可视化场景中,或是离散数据类型的分布展示。例如,一个本科班级的学生籍贯分布,出国旅游人士的职业分布以及下载一款App产品的操作系统的分布。
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['font.serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串
x = [1, 2, 3, 4, 5]
y = [6, 10, 4, 5, 1]
plt.bar(x, y, align="center", color="b", tick_label=["A", "B", "C", "D", "E"], alpha=0.6)
plt.xlabel("测试难度")
plt.ylabel("试卷分数")
plt.grid(True, axis="y", ls=":", color="r", alpha=0.3)
plt.show()
x
:柱状图中的柱体标签值y
:柱状图中的柱体高度align
:柱体对齐方式,可选center
或edge
color
:柱体颜色tick_label
:刻度标签值alpha
:柱体透明度
2. 条形图
其实就是把柱状图转置过来
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['font.serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串
x = [1, 2, 3, 4, 5]
y = [6, 10, 4, 5, 1]
plt.barh(x, y, align="center", color="c", tick_label=["A", "B", "C", "D", "E"], alpha=0.6)
plt.ylabel("测试难度")
plt.xlabel("试卷份数")
plt.grid(True, axis="x", ls=":", color="r", alpha=0.3)
plt.show()
3. 多数据并列柱状图
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['font.serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串
x = np.arange(5)
y = [6, 10, 4, 5, 1]
y1 = [2, 6, 3, 8, 5]
bar_width = 0.35
tick_label = ["A", "B", "C", "D", "E"]
plt.bar(x, y, bar_width, color="c", align="center", label="班级A", alpha=0.5)
plt.bar(x + bar_width, y1, bar_width, color="b", align="center", label="班级B", alpha=0.5)
plt.xlabel("测试难度")
plt.ylabel("试卷份数")
plt.xticks(x + bar_width / 2, tick_label)
plt.legend()
plt.show()
4. 多数据平行条形图
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['font.serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串
x = np.arange(5)
y = [6, 10, 4, 5, 1]
y1 = [2, 6, 3, 8, 5]
bar_width = 0.35
tick_label = ["A", "B", "C", "D", "E"]
plt.barh(x, y, bar_width, color="c", align="center", label="班级A", alpha=0.5)
plt.barh(x + bar_width, y1, bar_width, color="b", align="center", label="班级B", alpha=0.5)
plt.ylabel("测试难度")
plt.xlabel("试卷份数")
plt.yticks(x + bar_width / 2, tick_label)
plt.legend()
plt.show()
5. 参数探索
如果想在柱体上绘制装饰线或装饰图,也就是说,设置柱体填充样式,我们可以用关键字参数hatch
,其可能取值为:/
,\
, |
, -
, +
, x
, o
, O
, .
, *
每种符号数量越多,填充样式越密集,如
///
柱状图还有其他关键字参数,如描边
- 边缘颜色(包括填充样式颜色,会一起变):
edgecolor
(ec
) - 边缘样式:
linestyle
(ls
) - 边缘粗细:
linwwidth
(lw
)
6. 堆积折线图
堆积折线图是通过绘制不同数据集的折线图而生成的。
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
x = np.arange(1, 6, 1)
y = [0, 4, 3, 5, 6]
y1 = [1, 3, 4, 2, 7]
y2 = [3, 4, 1, 6, 5]
labels = ["BluePlanet", "BrownPlanet", "GreenPlanet"]
colors = ["#8da0cb", "#fc8d62", "#66c2a5"]
plt.stackplot(x, y, y1, y2, labels=labels, colors=colors)
plt.legend(loc="upper left")
plt.show()
7. 间断条形图
主要用来可视化定性数据的相同指标在时间维度上的指标值的变化情况,实现定性数据的相同指标的变化情况的有效直观比较
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['font.serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串
plt.broken_barh([(30, 100), (180, 50), (260, 70)], (20, 8), facecolors="#1f78b4")
plt.broken_barh([(60, 90), (190, 20), (230, 30), (280, 60)], (10, 8),
facecolors=("#7fc97f", "#beaed4", "#fdc086", "#ffff99"))
plt.xlim(0, 360)
plt.ylim(5, 35)
plt.xlabel("演出时间")
plt.xticks(np.arange(0, 361, 60))
plt.yticks([15, 25], ["歌剧院A", "歌剧院B"])
plt.grid(ls="-", lw=1, color="gray")
plt.title("不同地区的歌剧院的演出时间比较")
plt.show()
针对
plt.broken_barh([(60, 90), (190, 20), (230, 30), (280, 60)], (10, 8),facecolors=("#7fc97f", "#beaed4", "#fdc086", "#ffff99"))
来讲解使用方法:列表
[(60, 90), (190, 20), (230, 30), (280, 60)]
的元组表示从起点是x轴的数值为60的位置起,沿x轴正方向移动90个单位。其他元组类似。参数
(10, 8)
表示从起点是y轴的数值为10的位置起,沿y轴正方向移动8个单位,这就是每个柱体的高度和垂直起始位置。关键字参数
facecolors
表示每个柱体的填充颜色,这里使用HEX模式的颜色表示方法
8. 阶梯图
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.use('Qt5Agg')
x = np.linspace(1, 10, 10)
y = np.sin(x)
plt.step(x, y, color="#8dd3c7", where="pre", lw=2)
plt.xlim(0, 11)
plt.xticks(np.arange(1, 11, 1))
plt.ylim(-1.2, 1.2)
plt.show()
step()
方法参数和plot()
类似,主要是关键字参数where
,默认值是pre
,表示数据点向右对齐,,还可以设为post
,表示数据点向左对齐,如下图。
9. 饼图
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.use('Qt5Agg')
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['font.serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串
labels = "A", "B", "C", "D"
students = [0.35, 0.15, 0.20, 0.30]
colors = ['#377eb8', '#4daf4a', '#984ea3', '#ff7f00']
explode = (0.1, 0.1, 0.1, 0.1)
wedges, texts, autotexts = plt.pie(students, explode=explode,
autopct="%3.1f%%", startangle=45,
shadow=True, colors=colors)
plt.legend(wedges, labels, fontsize=12, title="难度等级",
loc="right", bbox_to_anchor=(.95, 0, 0.3, 1))
plt.setp(autotexts, size=15, weight="bold")
plt.setp(texts, size=12)
plt.title("选择不同难度测试试卷的学生占比")
colLabels = ["A", "B", "C", "D"]
rowLabels = ["学生选择试卷人数"]
studentValues = [[350, 150, 200, 300]]
colColors = ["#377eb8", "#e41a1c", "#4daf4a", "#984ea3"]
plt.table(cellText=studentValues,
cellLoc="center",
colWidths=[0.1] * 4,
colLabels=colLabels,
colColours=colColors,
rowLabels=rowLabels,
rowLoc="center",
loc="bottom")
plt.show()
解释一下上面画图的函数的参数:
- students:饼片代表的百分比
- explode:饼片边缘偏离半径的百分比
- labels:标记每份饼片的文本标签内容
- autopct:饼片文本标签内容对应的数值百分比样式
- startangle:从x轴作为起始位置,第一个饼片的起始位置(逆时针),单位度
- shadow:是否绘制饼片的阴影
- colors:饼片的颜色
10. 箱线图
关于箱线图的组成部分有:箱体、箱须和离群值,其中,箱体主要由第一四分位数、中位数和第三四分位数,箱须又分为上箱须和下箱须。上箱须和下箱须长度的确定方法是绘制箱线图的原始数据集Data中分贝寻找不大于\(Q_3+whis\times IQR\)的最大值\(value_{\max}\)和不小于\(Q_1 - whis \times IQR\)的最小值\(value_{\min}\),其中\(Q_1\)和\(Q_3\)分别是第一四分位数和第三四分位数,whis
是关键字参数whis
的值,IQR是四分位差,计算方法是\(IQR=Q_3-Q_1\)。离群值\(Outlier\)的判断标准是 \(value \lt (Q_1-whis \times IQR)\)或者\(value \gt(Q_3+whis\times IQR)\),其中\(value\)是Data中的数据点。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.use('Qt5Agg')
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['font.serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串
testA = np.random.randn(5000)
testB = np.random.randn(5000)
testList = [testA, testB]
labels = ["随机数生成器AlphaRM", "随机数生成器BetaRM"]
colors = ["#1b9e77", "#d95f02"]
whis = 1.6
width = 0.35
bplot = plt.boxplot(testList, whis=whis, widths=width, sym="o", labels=labels, patch_artist=True)
for patch, color in zip(bplot["boxes"], colors):
patch.set_facecolor(color)
plt.ylabel("随机数值")
plt.title("生成器抗干扰能力的稳定性比较")
plt.grid(axis="y", ls=":", lw=1, color="gray", alpha=0.4)
plt.show()
一样说下函数参数含义:
- testList:绘制箱线图的输入数据
- whis:四分位间距的倍数,用来确定箱须包含数据范围的大小
- widths:设置箱体的宽度,可以统一设为一个值,或者分别赋值宽度
- sym:离群值的标记样式
- labels:绘制每一个数据集的刻度标签
- patch_artist:是否给箱体添加颜色
『Python』matplotlib常用图表的更多相关文章
- 『Python』matplotlib常用函数
1. 绘制图表组成元素的主要函数 1.1 plot()--展现量的变化趋势 import numpy as np import matplotlib.pyplot as plt import matp ...
- python 数据分析 Matplotlib常用图表
Matplotlib绘图一般用于数据可视化 常用的图表有: 折线图 散点图/气泡图 条形图/柱状图 饼图 直方图 箱线图 热力图 需要学习的不只是如何绘图,更要知道什么样的数据用什么图表展示效果最好 ...
- 『Python』pycharm常用设置
学习一下pycharm的快捷操作,提升速度,也提升舒适度,笑. 常用快捷键 ctrl + d :复制粘贴本行到下一行 ctrl + y :删除本行 ctrl + 鼠标点击 :跳转 ctrl + / : ...
- 『Python』matplotlib的imshow用法
热力图是一种数据的图形化表示,具体而言,就是将二维数组中的元素用颜色表示.热力图之所以非常有用,是因为它能够从整体视角上展示数据,更确切的说是数值型数据. 使用imshow()函数可以非常容易地制作热 ...
- 『Python』matplotlib实现GUI效果
1. 类RadioButtons的使用方法 类似单选框 import numpy as np import matplotlib.pyplot as plt import matplotlib as ...
- 『Python』matplotlib实现动画效果
一般而言,在绘制复杂动画时,主要借助模块animation来完成 import numpy as np import matplotlib.pyplot as plt import matplotli ...
- 『Python』matplotlib坐标轴应用
1. 设置坐标轴的位置和展示形式 import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl mpl.use ...
- 『Python』matplotlib共享绘图区域坐标轴
1. 共享单一绘图区域的坐标轴 有时候,我们想将多张图形放在同一个绘图区域,不想在每个绘图区域只绘制一幅图形.这时候,就可以借助共享坐标轴的方法实现在一个绘图区域绘制多幅图形的目的. import n ...
- 『Python』matplotlib划分画布的主要函数
1. subplot() 绘制网格区域中几何形状相同的子区布局 函数签名有两种: subplot(numRows, numCols, plotNum) subplot(CRN) 都是整数,意思是将画布 ...
随机推荐
- 攻防世界PWN简单题 level2
攻防世界PWN简单题 level2 此题考验的是对ROP链攻击的基础 万事开头PWN第一步checksec 一下 32位的小端程序,扔进IDA 进入函数,找出栈溢出漏洞. 又是这个位置的栈溢出,rea ...
- 获取访问者真实ip地址?我觉得不可能
我们真的能通过请求来获取用户真实的ip地址嘛? 答案是不能,如果能,肯定是我学的不够深入,欢迎交流指正. 那么写这篇文章的意义是什么?我们接着往下看. IP地址相当于电脑在网络上的身份证,但事实上IP ...
- vue 报错http://eslint.org/docs/rules/xxxxx
vue 对语法的要求过于严格所以编译的时候报下面这个错误 解决办法: bulid文件夹 -> webpack.base.conf.js 找到下面的代码: module: { rules: [ / ...
- MongoDB学习笔记一(MongoDB介绍 + 基本指令 + 查询语句)
什么是MongoDB MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用提供可扩 ...
- 刷题-力扣-63. 不同路径 II
63. 不同路径 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/unique-paths-ii/ 著作权归领扣网络所有.商业转 ...
- Go版本依赖--伪版本
目录 1.简介 2. 什么是伪版本 3. 伪版本风格 4. 如何获取伪版本 1.简介 在go.mod中通常使用语义化版本来标记依赖,比如v1.2.3.v0.1.5等.因为go.mod文件通常是go命令 ...
- WSL(Ubuntu)下安装Redis
一.安装 输入命令安装redis-server sudo apt-get install redis-server 安装完成后打开redis.conf文件,找到bind 127.0.0.1,更改为bi ...
- servlet处理跨域请求
前言 我们要做的是让在一个不在当前项目文件夹的前端页面发送Ajax请求,由一个远程servlet处理 代码 创建一个web工程 导入所需的jar-> servlet-api.jar fastjs ...
- Heartbeat+HAProxy+MySQL半复制高可用架构
目录 一 基础环境 二 架构设计 三 安装MySQL 3.1 安装MySQL 3.2 初始化MySQL 四 配置MySQL半同步 4.1 加载插件 4.2 配置半同步复制 4.3 master创建账号 ...
- Docker私有镜像仓库Harbor
一.安装Harbor(离线安装包的方式安装) 1.解压离线包 2.进入harbor目录中编辑harbor.yml 3.安装docker-compose yum -y install docker-co ...