这里简要介绍几种统计图形的绘制方法,其他更多图形可以去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. 基于Vue2和Node.js的反欺诈系统设计与实现

    最近包工头喊农民工小郑搬砖,小郑搬完砖后沉思片刻,决定写篇小作文分享下,作为一个初学者的全栈项目,去学习它的搭建,到落地,再到部署维护,是非常好的. ​ ------题记 写在前面 通过本文的学习,你 ...

  2. 剑指 Offer 68 - II. 二叉树的最近公共祖先

    剑指 Offer 68 - II. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近 ...

  3. 浅谈模拟彩票代码,html,javascript

    今天简单介绍一下用html,javascript来模拟双色球彩票选择器. 双色球彩票规则:由6个红球和1个蓝球组成,其中6个红球是从1-33中随机选出的不重复的6个数,从小到大一次排列:蓝球是1-16 ...

  4. C#---OleDbHelper

    /// <summary> /// OleDbServer数据访问帮助类 /// </summary> public sealed class OleDbHelper { pu ...

  5. WPF 中的形状和基本绘图概述

    本主题概述如何使用 Shape 对象绘图. Shape 是一种允许您在屏幕中绘制形状的 UIElement 类型. 由于它们是 UI 元素,因此 Shape 对象可以在 Panel 元素和大多数控件中 ...

  6. Linux第一个动态库

    动态库一般以.so结尾,就是shared object的意思. 其基本生成步骤为   ⑴编写函数代码   ⑵编译生成动态库文件,要加上 -shared 和 -fpic 选项 ,     库文件名以li ...

  7. Mybatis出现错误org.apache.ibatis.executor.ExecutorException: No constructor found in

    错误显示没有发现构造器. 其实就是重写了构造器后,忘了补写一个默认的空参构造器了.此类的错误还经常出现在spring等这种大量使用反射的框架中.因为这些框架在调用反射的类后会默认调用默认的构造器 解决 ...

  8. java包装类注意点

    Integer one = new Integer(100); Integer two = new Integer(100); Integer three = 100; Integer fore = ...

  9. Java String 综述(上篇)

    摘要: Java 中的 String类 是我们日常开发中使用最为频繁的一个类,但要想真正掌握的这个类却不是一件容易的事情.笔者为了还原String类的真实全貌,先分为上.下两篇博文来综述Java中的S ...

  10. Spark消费Kafka如何实现精准一次性消费?

    1.定义 精确一次消费(Exactly-once) 是指消息一定会被处理且只会被处理一次.不多不少就一次处理. 如果达不到精确一次消费,可能会达到另外两种情况: 至少一次消费(at least onc ...