『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) 都是整数,意思是将画布 ...
随机推荐
- SQL 练习26
查询 1990 年出生的学生名单 --方式1 SELECT * FROM Student WHERE Sage BETWEEN '1990-01-01' AND '1990-12-31' --方式2 ...
- SQL 练习13
查询没学过"张三"老师讲授的任一门课程的学生姓名 SELECT * from Student WHERE SId not in ( SELECT SC.SId from Teach ...
- vue 报错http://eslint.org/docs/rules/xxxxx
vue 对语法的要求过于严格所以编译的时候报下面这个错误 解决办法: bulid文件夹 -> webpack.base.conf.js 找到下面的代码: module: { rules: [ / ...
- 干货!4大实验项目,深度解析Tag在可观测性领域的最佳实践!
Opentelemetry协议,是CNCF(Cloud Native Computing Foundation-云原生计算基金会)定义的最新一代的可观测规范(目前还在孵化中),该规范定义了可观测性的三 ...
- springboot与通用mapper的整合
找到springboot工程下的pom.xml文件,导入如下的依赖jar包 <!--配置通用Mapper start--> <dependency> <groupId&g ...
- 从元素抽取属性,文本和HTML
问题 在解析获得一个Document实例对象,并查找到一些元素之后,你希望取得在这些元素中的数据. 方法 要取得一个属性的值,可以使用Node.attr(String key) 方法 对于一个元素中的 ...
- 【java虚拟机】内存溢出解决思路
转自:https://blog.csdn.net/u013521220/article/details/79523633 内存溢出与数据库锁表的问题,可以说是开发人员的噩梦,一般的程序异常,总是可以知 ...
- Mysql主从复制、半同步复制、并行复制
MySQL之间数据复制的基础是二进制日志文件(binary log file).一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以"事件"的方 ...
- MySQL主主互备不同步的解决方法
MySQL主主互备不同步 首先在服务器上执行show slave satus;可以看到很多同步的参数: Master_Log_File: SLAVE中的I/O线程当前正在读取的主服务器二进制日志文件的 ...
- Install Docker Engine on CentOS 在CentOS 7 上安装Docker
Install Docker Engine on CentOS OS Requirements 系统要求 To install Docker Engine,you need a maintained ...