【Matplotlib】绘制图形

文章目录

  • 前言
  • 一、简介
    • 1.1 数据可视化
    • 1.2 什么是Matplotlib
  • 二、使用步骤
    • 2.1 设置图片大小
    • 2.2 保存图片
    • 2.3 设置X|Y轴的刻度
    • 2.4 显示中文
    • 2.5 设置坐标轴标签和标题
  • 三、绘制图形
    • 3.1 双轴图
    • 3.2 柱状图
    • 3.3 直方图
    • 3.4 饼状图
    • 3.5 折线图
    • 3.6 散点图
  • 总结


前言

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

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

个人主页:初心%个人主页
个人简介:大家好,我是初心,一名正在努力的双非二本院校计算机专业学生
座右铭:理想主义的花,终究会盛开在浪漫主义的土壤里!
欢迎大家:这里是CSDN,我记录知识的地方,喜欢的话请三连,有问题请私信


一、简介

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

【Matplotlib】绘制图形_第1张图片
【Matplotlib】绘制图形_第2张图片

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

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 样式以及面向对象的绘图方法中,该函数返回值是一个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()

【Matplotlib】绘制图形_第3张图片

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()

【Matplotlib】绘制图形_第4张图片

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()

【Matplotlib】绘制图形_第5张图片

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()

【Matplotlib】绘制图形_第6张图片

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()

【Matplotlib】绘制图形_第7张图片

总结

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

好啦,这就是今天要分享给大家的全部内容了,我们下期再见!
本文由初心原创,首发于CSDN博客
欲戴皇冠,必承其重,喜欢的话记得点赞收藏哦!

你可能感兴趣的:(大数据,matplotlib,python,数据分析)