这里简要介绍几种统计图形的绘制方法,其他更多图形可以去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. SQL 练习21

    查询每门课程被选修的学生数 SELECT cid,COUNT(cid) 选修人数 from sc GROUP BY cid

  2. SQL 练习17

    查询各科成绩最高分.最低分和平均分: 以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率 , 及格为>=60,中等为:70-80,优良为:80-9 ...

  3. SpringBoot和mybatis整合报错:Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 152; columnNumber: 10; 元素类型为 "mapper"

    很明显,报错是xml有问题,于是去检查,发现: 由于粗心,保存的时候,按的太频繁,多按了个s在里面,导致启动报错!

  4. spring cloud 知识总结

    ### 单体应用存在的问题 - 随着业务的发展,开发变得越来越复杂.- 修改.新增某个功能,需要对整个系统进行测试.重新部署.- 一个模块出现问题,很可能导致整个系统崩溃.- 多个开发团队同时对数据进 ...

  5. sql 中的with 语句使用

    一直以来都很少使用sql中的with语句,但是看到了一篇文章中关于with的使用,它的确蛮好用,希望以后记得使用这个语句.一.with 的用法With alias_name as (select1)[ ...

  6. 使用volatile的条件

    使用volatile的值不能依赖于它之前的值: volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果. ...

  7. delta源码阅读

    阅读思路: 1.源码编译 2.功能如何使用 3.实现原理 4.源码阅读(通读+记录+分析) 源码结构 源码分析 元数据 位置:org.apache.spark.sql.delta.actions下的a ...

  8. 修改python import模块中的变量

    可以直接通过 模块名.变量名=xx 的方式修改模块中的全局变量,测试代码如下 模块:test_model.py x = 111 def inc_x(): global x x = x + 1 测试脚本 ...

  9. MySQL的几种锁机制的使用介绍

    锁 在日常的开发过程中,为了控制线程的并发肯定会用到锁机制.对于数据库而言,锁机制就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则.当然MySQL也不例外,根据不同 ...

  10. 基于Linux系统下Apache服务器的安装部署

    企业中常用的web服务,用来提供http://(超文本传输协议). web系统是客户端/服务器模式的,所以应该有服务器和客户端里两个部分.常用的服务器程序时Apache,常用的客户端程序是浏览器.ww ...