大家好,我是初心,这篇文章主要讲解Python数据分析三剑客之一——Matplotlib的绘图使用,收录于初心的《大数据》专栏。
作者水平有限,不足之处,还请大佬不吝赐教。
个人主页:初心%个人主页
个人简介:大家好,我是初心,一名正在努力的双非二本院校计算机专业学生
座右铭:理想主义的花,终究会盛开在浪漫主义的土壤里!
欢迎大家:这里是CSDN,我记录知识的地方,喜欢的话请三连,有问题请私信
如果将文本数据与图表数据相比较,人类的思维模式更适合于理解后者,它对于人类视觉的冲击更强,这种使用图表来表示数据的方法被叫做 数据可视化
。使用不同种类的图表对原始数据进行可视化处理,会使得复杂的数据更容易理解与使用。
Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件
。它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。比如说通过Python语言调用Matplotlib库绘制折线图、矩形图、柱状图等。Matplotlib 通常与 NumPy、Pandas 一起使用,是数据分析中不可或缺的重要工具之一
。
Matplotlib 由三个不同的层次结构组成,分别是脚本层、美工层和后端层。
Matplotlib 生成的图形主要由以下几个部分构成:
下面是使用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()
通过调用 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)
通过调用 pyplot 模块中 savefig() 函数来保存图片到本地。参数fname是路径名和路径。
plt.savefig("../images/test2.svg")
plt.savefig("F:\\Codes\\2022-2023-2\\Python\\jupyter notebook\\test2.png")
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)
当不对 Matplotlib 进行设置,而直接使用中文时,绘制的图像会出现中文乱码。可以使用 rc() 函数设置中文字体。
font = {'family': 'Microsoft YaHei', 'weight': 'bold', 'size': '10'}
matplotlib.rc('font', **font)
可以通过 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')
Matplotlib 提供的 twinx() 和 twiny() 函数
,除了可以实现绘制双轴的功能外,还可以使用不同的单位来绘制曲线,比如一个轴绘制对函数,另外一个轴绘制指数函数。这里需要区分是双线图和双轴图
,请看图片示例:
下面是绘制两条折线的双轴图,供大家参考。
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()
柱状图是一种用矩形柱来表示数据分类的图表,柱状图可以垂直绘制,也可以水平绘制,它的高度与其所表示的数值成正比关系。Matplotlib 提供了 bar() 函数
来绘制柱状图,当它与 axes 对象(子图对象)一起使用时,它可以应用在 MATLAB 样式以及面向对象的绘图方法中,该函数返回值是一个Matplotlib对象
。
参数 | 说明 |
---|---|
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()
直方图(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()
饼状图显示一个数据系列中各项目的占项目总和的百分比。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()
折线图可以直观的反映数据的变化趋势,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()
散点图用于在水平轴和垂直轴上绘制数据点,它表示了因变量随自变量变化的趋势,每个散点值都由该点在图表中的坐标位置表示。可以使用 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()
以上就是今天要讲的全部内容了,本文简单介绍了 Matplotlib的 使用,通过这篇文章的学习我们能大致掌握使用 Matplotlib 绘制图形的技巧。
好啦,这就是今天要分享给大家的全部内容了,我们下期再见!
本文由初心原创,首发于CSDN博客
欲戴皇冠,必承其重,喜欢的话记得点赞收藏哦!