【Matplotlib】绘制图形

简介: 【Matplotlib】绘制图形

前言


大家好,我是初心,这篇文章主要讲解Python数据分析三剑客之一——Matplotlib的绘图使用,收录于初心的《大数据》专栏。

作者水平有限,不足之处,还请大佬不吝赐教👏👏。


一、简介


1.1 数据可视化


如果将文本数据与图表数据相比较,人类的思维模式更适合于理解后者,它对于人类视觉的冲击更强,这种使用图表来表示数据的方法被叫做 数据可视化 。使用不同种类的图表对原始数据进行可视化处理,会使得复杂的数据更容易理解与使用。


1.2 什么是Matplotlib


Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。比如说通过Python语言调用Matplotlib库绘制折线图、矩形图、柱状图等。Matplotlib 通常与 NumPy、Pandas 一起使用,是数据分析中不可或缺的重要工具之一。


Matplotlib 由三个不同的层次结构组成,分别是脚本层、美工层和后端层。


Matplotlib 生成的图形主要由以下几个部分构成:


Figure:指整个图形,可以理解成一张画布,它包括了所有的元素,比如标题、轴线等;

Axes:绘制 2D 图像的实际区域,也称为轴域区,或者绘图区;

Axis:指坐标系中的垂直轴与水平轴,包含轴的长度大小(图中轴长为 7)、轴标签(指 x 轴,y轴)和刻度标签;

Artist:在画布上看到的所有元素都属于 Artist 对象,比如文本对象(title、xlabel、ylabel)、Line2D 对象(用于绘制2D图像)等。


二、使用步骤


下面是使用Matplotlib绘制2D图的最简单示例:

from matplotlib import pyplot as plt
x = range(2,26,2)
y = [12,23,24,23,23,25,36,36,35,30,25,20]
plt.plot(x,y)
plt.show()



2.1 设置图片大小


通过调用 pyplot 模块中 figure() 函数来实例化 figure 对象。


参数 说明
figsize 指定画布的大小,(宽度,高度),单位为英寸。
dpi 指定绘图对象的分辨率,即每英寸多少个像素,默认值为80。
facecolor 背景颜色,取值可以是16进制,字符串
dgecolor 边框颜色
frameon 是否显示边框,取值为True/False


plt.figure(figsize=(14,6),dpi=200,facecolor='#00ff00',edgecolor='#ff00ff',frameon=True)


2.2 保存图片

通过调用 pyplot 模块中 savefig() 函数来保存图片到本地。参数fname是路径名和路径。

plt.savefig("../images/test2.svg")
plt.savefig("F:\\Codes\\2022-2023-2\\Python\\jupyter notebook\\test2.png")


2.3 设置X|Y轴的刻度

xticks() 和 yticks() 函数接受一个列表对象作为参数,列表中的元素表示对应数轴上要显示的刻度。

# 设置x的刻度
step = [i / 2 for i in range(4, 49, 1)]
print(step[::20])
plt.xticks(step)
# 设置y的刻度
step_y = range(min(y), max(y),2)
plt.yticks(step_y)


2.4 显示中文

当不对 Matplotlib 进行设置,而直接使用中文时,绘制的图像会出现中文乱码。可以使用 rc() 函数设置中文字体。

font = {'family': 'Microsoft YaHei', 'weight': 'bold', 'size': '10'}
matplotlib.rc('font', **font)


2.5 设置坐标轴标签和标题


可以通过 xlabel() 函数和 ylabel() 函数进行坐标轴标签设置。


plt.xlabel("时间")
plt.ylabel("温度")


如果要设置线条的含义,在传递 x y 轴时也传入label。

y1 = [random.randint(20,40) for i in range(1,11)]
plt.plot(x,y1,label='随机数1',color='blue')
y2 = [random.randint(40,60) for i in range(1,11)]
plt.plot(x,y2,label='随机数2',color='red')


三、绘制图形

3.1 双轴图


Matplotlib 提供的 twinx() 和 twiny() 函数,除了可以实现绘制双轴的功能外,还可以使用不同的单位来绘制曲线,比如一个轴绘制对函数,另外一个轴绘制指数函数。这里需要区分是双线图和双轴图,请看图片示例:

211770d7f1f34fd7a6996da523f33257.png



bdd631e05b064908a7d199c848439c99.png


下面是绘制两条折线的双轴图,供大家参考。

from matplotlib import pyplot as plt
import matplotlib
import numpy as np
import random
%matplotlib inline
# 绘制双轴图
# 设置中文字体
font = {'family': 'Microsoft YaHei', 'weight': 'bold', 'size': '8'}
matplotlib.rc('font',**font)
# 设置图片大小和清晰度,并创建图形对象
fig = plt.figure(figsize=(14,6),dpi=300,edgecolor='#ff00ff',frameon=True)
# 添加子图区域
a1 = fig.add_axes([0,0,1,1])
# 设置x轴
x = [ i for i in range(1,11)]
# 设置y1轴(生成10个随机数)
y1 = [random.randint(20,40) for i in range(1,11)]
a1.plot(x,y1)
a1.set_xlabel('随机时间')
a1.set_ylabel('随机数1')
# 添加双轴
a2 = a1.twinx()
# 设置y2轴(生成10个随机数)
y2 = [random.randint(40,60) for i in range(1,11)]
a2.plot(x,y2)
a2.set_ylabel('随机数2')
# 设置X、Y轴的标签
# 展示线条的含义
fig.legend(labels=('exp','log'),loc='upper left')
plt.show()


3.2 柱状图


柱状图是一种用矩形柱来表示数据分类的图表,柱状图可以垂直绘制,也可以水平绘制,它的高度与其所表示的数值成正比关系。Matplotlib 提供了 bar() 函数来绘制柱状图,当它与 axes 对象(子图对象)一起使用时,它可以应用在 MATLAB 样式以及面向


参数 说明
x 一个序列,代表柱状图的x坐标,默认x取值是每个柱状图所在的中点位置,也可以是柱状图左侧边缘位置
height 一个序列,柱状图的数据(高度)
width 柱状图的默认宽度值为 0.8
bottom 柱状图的y坐标默认为None
algin 有两个可选项 {“center”,“edge”},默认为 ‘center’,该参数决定 x 值位于柱状图的位置

下面是绘制一个双柱状图的代码,供大家参考。


from matplotlib import pyplot as plt
%matplotlib inline
import numpy as np
# 准备数据
man_data = [20,34,30,35,27]
woman_data = [25,32,34,20,25]
labels = ['G1','G2','G3','G4','G5']
# 创建图形对象
fig = plt.figure(figsize=(14,6),dpi=200)
# 添加子图区域
ax = fig.add_axes([0,0,1,1])
# x位置
x = np.arange(5)
ax.bar(x,man_data,width=0.25)
ax.bar(x+0.25,woman_data,width=0.25)
# 设置标题
ax.set_title("Scores by group and gender")
# 设置Y标签
ax.set_ylabel('Scores')
ax.set_xlabel('G等级')
# 设置柱状图的含义
ax.legend(labels=('Men','Women'),loc='upper left')
# 展示图形
fig.show()

de7ff1b3c99a4930b4ddbdfb21804f7e.png


3.3 直方图


直方图(Histogram),又称质量分布图,它是一种条形图的一种,由一系列高度不等的纵向线段来表示数据分布的情况。直方图用于概率分布,它显示了一组数值序列在给定的数值范围内出现的概率;而柱状图则用于展示各个类别的频数。可以使用 matplotlib.pyplot.hist()函数 来绘制直方图。


参数 说明
x 必填参数,数组或者数组序列
bins 可选参数,整数或者序列,bins 表示区间(长条的数目),默认会生成10个间隔
range 指定全局间隔的下限与上限值 (min,max),元组类型


下面是绘制直方图的代码实例,供大家参考。subplots() 函数 既创建了一个包含子图区域的画布,又创建了一个 figure 图形对象。

from matplotlib import pyplot as plt
%matplotlib inline
import random
import numpy as np
# 创建图形和轴对象
fig,ax = plt.subplots()
# 创建数据100个
data = [random.randint(0,800) for i in range(0,100)]
print(data)
bin = [0,100,200,300,400,500,600,700,800]
# 绘制直方图
ax.hist(data,bin)
# 设置x、y的含义
ax.set_xlabel('数据')
ax.set_ylabel('频数/频率')
ax.set_title('频数/频率分布直方图')
ax.set_xticks([0,100,200,300,400,500,600,700,800])
plt.show()


73f1f67ccf56466d88cfabd7908c2970.png

3.4 饼状图


饼状图显示一个数据系列中各项目的占项目总和的百分比。Matplotlib 提供了一个 pie() 函数,该函数可以生成数组中数据的饼状图,可使用 x/sum(x) 来计算各个扇形区域占饼图总和的百分比。


参数 说明
X 数组序列,数组元素对应扇形区域的数量大小
labels 列表字符串序列,为每个扇形区域备注一个标签名字
color 为每个扇形区域设置颜色
autopct 格式化字符串"fmt%pct",使用百分比的格式设置每个扇形区的标签,并将其放置在扇形区内


下面是绘制饼状图的代码示例,供大家参考。

from matplotlib import pyplot as plt
%matplotlib inline
import numpy as np
# 创建图形对象
fig = plt.figure()
# 创建子图
ax = fig.add_axes([0,0,1,1])
# 让饼状图变成圆形
ax.axis('equal')
# 准备数据
labels = ['Hogs','Frogs','Logs','Dogs']
num_data = [23,32,10,52]
# 饼状图之间的间隙大小
explode = (0.02,0.03,0.02,0.01)
# 画饼
ax.pie(num_data,labels=labels,autopct='%1.1f%%',explode=explode)
plt.show()



a74ccb971c2c491abafb6c02a1ee755c.png



3.5 折线图

折线图可以直观的反映数据的变化趋势,Matplotlib 并没有直接提供绘制折线图的函数。

下面是绘制折线图的示例,供大家参考。

from matplotlib import pyplot as plt
%matplotlib inline
import numpy as np
import random
# 创建图形对象
fig = plt.figure()
# 创建子图
ax = fig.add_axes([0,0,1,1])
# 日期
date = [i for i in range(10,21)]
print(date)
# 投篮数量
number_1 = [random.randint(30,50) for i in range(10,21)]
number_2 = [random.randint(30,50) for i in range(10,21)]
# 绘制曲线
plt.plot(date,number_1,'r',marker='*',markersize=10)
plt.plot(date,number_2,'g',marker='*',markersize=10)
# 设置含义
plt.xlabel('日期')
plt.ylabel('投篮数量')
plt.title('2020年2月3日两人投篮数据')
# 设置刻度
plt.xticks(date)
plt.yticks([i for i in range(30,50)])
# 对折线的解释和在图中的位置
plt.legend(['小王','小黑子'],loc='upper right')
plt.show()



16033929755f489c966a83c3003d65d1.png

3.6 散点图


散点图用于在水平轴和垂直轴上绘制数据点,它表示了因变量随自变量变化的趋势,每个散点值都由该点在图表中的坐标位置表示。可以使用 pyplot 中的 scatter() 函数 来绘制散点图。

from matplotlib import pyplot as plt
%matplotlib inline
import numpy as np
import random
# 数据范围
data_range = [1,2,3,4,5,6,7,8]
# 8个数据
datas = [[random.randint(0,30) for i in range(0,8)]]
# 定义点的大小
sizes = np.array([20,50,30,200,500,1000,60,90])
# 定义点的颜色
colors = np.array(["red","green","black","orange","purple","beige","cyan","magenta"])
# 创建图形对象
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.scatter(data_range,datas,label='数量',s=sizes,c=colors)
plt.xlabel('天数')
plt.ylabel('数量')
plt.title('数量随时间变化')
plt.legend(loc='upper left')
plt.show()



a4ec7752e51440d4b712c7b3928a6fef.png


总结


以上就是今天要讲的全部内容了,本文简单介绍了 Matplotlib的 使用,通过这篇文章的学习我们能大致掌握使用 Matplotlib 绘制图形的技巧。💞


😊 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!

😍 本文由初心原创,首发于CSDN博客

😊 欲戴皇冠,必承其重,喜欢的话记得点赞收藏哦!💞

相关文章
|
1月前
|
存储 编解码 数据可视化
【Matplotlib】figure方法之图形的保存
【Matplotlib】figure方法之图形的保存
52 1
|
2月前
|
数据可视化 Python
GEE Colab——如何利用Matplotlib在colab中进行图形制作
GEE Colab——如何利用Matplotlib在colab中进行图形制作
52 3
|
1月前
|
编解码 数据可视化 索引
【Matplotlib】Figure图形中的图表元素怎么获取,你掌握了吗!?
【Matplotlib】Figure图形中的图表元素怎么获取,你掌握了吗!?
20 1
|
3月前
|
Python
Matplotlib figure图形对象
Matplotlib figure图形对象
52 1
|
8月前
|
Python
Python-matplotlib | 绘制双y轴图形(图例设置)
Python-matplotlib | 绘制双y轴图形(图例设置)
|
9月前
|
数据可视化 API Python
高级 Matplotlib:3D 图形和交互性
Matplotlib 是 Python 中最重要的数据可视化库之一。在之前的文章中,我们讨论了如何使用基础和中级功能来创建各种图形。在本文中,我们将深入研究 Matplotlib 的高级特性,特别是如何创建 3D 图形和交互式图形。
|
数据可视化 前端开发 UED
matplotlib图形整合之多个子图一起绘制
matplotlib图形整合之多个子图一起绘制
582 0
matplotlib图形整合之多个子图一起绘制
|
开发者 Python
matplotlib画折线图、直方图、饼图、散点图等常见图形
matplotlib画折线图、直方图、饼图、散点图等常见图形
207 0
matplotlib画折线图、直方图、饼图、散点图等常见图形
|
数据可视化 Python
Python--Matplotlib库与数据可视化②--常见图形的绘制(柱状图,直方图,饼图,箱线图)
Python--Matplotlib库与数据可视化②--常见图形的绘制(柱状图,直方图,饼图,箱线图)
387 0
Python--Matplotlib库与数据可视化②--常见图形的绘制(柱状图,直方图,饼图,箱线图)
|
存储 数据可视化 算法
Matplotlib更多实用图形的绘制
我们已经学习了一系列统计图来描绘两个变量间的基本关系,但是,仅仅使用这些图形并不足以应对所有场景。例如,需要显示降雨在各个地区的分布情况。因此,我们需要更多的实用图形来表达现实世界的复杂关系。
1185 0
Matplotlib更多实用图形的绘制