这里简要介绍几种统计图形的绘制方法,其他更多图形可以去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:柱体对齐方式,可选centeredge
  • 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常用图表的更多相关文章

  1. 『Python』matplotlib常用函数

    1. 绘制图表组成元素的主要函数 1.1 plot()--展现量的变化趋势 import numpy as np import matplotlib.pyplot as plt import matp ...

  2. python 数据分析 Matplotlib常用图表

    Matplotlib绘图一般用于数据可视化 常用的图表有: 折线图 散点图/气泡图 条形图/柱状图 饼图 直方图 箱线图 热力图 需要学习的不只是如何绘图,更要知道什么样的数据用什么图表展示效果最好 ...

  3. 『Python』pycharm常用设置

    学习一下pycharm的快捷操作,提升速度,也提升舒适度,笑. 常用快捷键 ctrl + d :复制粘贴本行到下一行 ctrl + y :删除本行 ctrl + 鼠标点击 :跳转 ctrl + / : ...

  4. 『Python』matplotlib的imshow用法

    热力图是一种数据的图形化表示,具体而言,就是将二维数组中的元素用颜色表示.热力图之所以非常有用,是因为它能够从整体视角上展示数据,更确切的说是数值型数据. 使用imshow()函数可以非常容易地制作热 ...

  5. 『Python』matplotlib实现GUI效果

    1. 类RadioButtons的使用方法 类似单选框 import numpy as np import matplotlib.pyplot as plt import matplotlib as ...

  6. 『Python』matplotlib实现动画效果

    一般而言,在绘制复杂动画时,主要借助模块animation来完成 import numpy as np import matplotlib.pyplot as plt import matplotli ...

  7. 『Python』matplotlib坐标轴应用

    1. 设置坐标轴的位置和展示形式 import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl mpl.use ...

  8. 『Python』matplotlib共享绘图区域坐标轴

    1. 共享单一绘图区域的坐标轴 有时候,我们想将多张图形放在同一个绘图区域,不想在每个绘图区域只绘制一幅图形.这时候,就可以借助共享坐标轴的方法实现在一个绘图区域绘制多幅图形的目的. import n ...

  9. 『Python』matplotlib划分画布的主要函数

    1. subplot() 绘制网格区域中几何形状相同的子区布局 函数签名有两种: subplot(numRows, numCols, plotNum) subplot(CRN) 都是整数,意思是将画布 ...

随机推荐

  1. SpringBoot开启异步方法

    在启动类上加入@EnableAsync 异步方法 /** * 简单文本邮件 * @param to 收件人 * @param subject 主题 * @param content 内容 */ @As ...

  2. zabbix监控rabbitmq队列消费状态

    使用rabbitmqctl 管理 mq -n 指定节点 [root@logging-master zabbix]# rabbitmqctl -n rabbit@localhost list_queue ...

  3. C#基础知识---Linq操作XML文件

    概述 Linq也就是Language Integrated Query的缩写,即语言集成查询,是微软在.Net 3.5中提出的一项新技术. Linq主要包含4个组件---Linq to Objects ...

  4. Qt 中的属性系统(Property System)

    21 人赞同了该文章 本节内容主要讲解我对 Qt 属性系统的理解.官方文档参考 The Property System. 如何理解"属性系统"这个概念? 一般我们说一个类有什么属性 ...

  5. numpy、pandas、scipy、matplotlib、jieba、 openpyxl、pillow的安装

    cmd环境下进入python安装包里的Script文件夹 安装numpy 安装pandas 安装scipy 安装matplotlib 安装jieba(应该是之前装的库安装依赖时下载了) 安装openp ...

  6. Mybatis简单应用

    Mybatis的核心组件: SqlSeeeionFactoryBuilder (构建器):它会根据配置或者代码来生成SqlSessionFactory,采用的是分布构建的Builder模式: SqlS ...

  7. java8 lambda表达式和函数式编程

    什么是函数式接口(Functional Interface) 其实之前在讲Lambda表达式的时候提到过,所谓的函数式接口,当然首先是一个接口,然后就是在这个接口里面只能有一个抽象方法 (可以有def ...

  8. HTTP状态码:3XX

    3XX状态码 含义:表明浏览器需要执行某些特殊的处理以正确的处理请求,大部分都需要进行重定向.这类状态码代表需要客户端采取进一步的操作才能完成请求.通常,这些状态码用来重定向,后续的请求地址(重定向目 ...

  9. Redis-技术专区-帮从底层彻底吃透AOF技术原理

    AOF持久化方式 AOF持久化方式是将redis的操作日志以追加的方式写入磁盘文件中.AOF持久化是以日志的形式记录服务器所处理的每一个写.删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看 ...

  10. 矩阵BFS

    leetcode 1091矩阵BFS 在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1). 一条从左上角到右下角.长度为 k 的畅通路径,由满足下述条件的单元格 C_1, ...