(四)Matplotlib基础操作

目录

前言

1. 基本图表绘制

1.1 绘制折线图

1.2 绘制柱状图

1.3 绘制散点图 

1.4 绘制直方图 

2. 可视化常用技巧

2.1 添加文字说明

2.2 添加图例

2.3 设置双坐标轴

2.4 中文显示问题

2.5 绘制多图


 

前言

Matplotlib是Python数据可视化工具包。在机器学习领域中,我们经常需要把数据可视化,以便观察数据的模式。此外,在对算法性能进行评估时,也需要把模型相关的数据可视化,才能观察出模型里需要改进的地方。例如,我们把算法的准确度和训练数据集大小的变化曲线画出来,可以清晰地看出训练数据集大小与算法准确度的关系。这就是我们需要学习Matplotlib的原因。

1. 基本图表绘制

在绘制图表之前要先引入Matplotlib库,相应的代码通常写成“import matplotlib.pyplot as plt”,这是为了给库设置简称,之后使用plt作为前缀调用所需函数即可绘制图表。例如,plt.plot()函数用于绘制折线图,plt.bar()函数用于绘制柱形图,plt.pie()函数用于绘制饼图等。本文以折线图、柱形图、散点图和直方图为例讲解图表的基本绘制方法。

1.1 绘制折线图

使用plt.plot()函数可以绘制折线图,演示代码如下。

import matplotlib.pyplot as plt
x = [1, 2, 3]
y = [2, 4, 6]
#  color为颜色;linewidth为线宽,单位为像素;linestyle为线型,默认为实线,“--”表示虚线
plt.plot(x, y, color='red', linewidth=3, linestyle='--') # 绘制折线图
plt.show()  # 展示图形

注意最后要用plt.show()来展示绘制效果,运行结果如下图所示。

一个图画两条线:

import numpy as np
import matplotlib.pyplot as plt

x1 = np.array([1, 2, 3])

# 第1条线:y = x + 1
y1 = x1 + 1
plt.plot(x1, y1)  # 使用默认参数绘制

# 第2条线:y = x*2
y2 = x1*2
plt.plot(x1, y2, color='red', linewidth=3, linestyle='--')

plt.show()

运行结果如下图: 

1.2 绘制柱状图

import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [5, 4, 3, 2, 1]
plt.bar(x, y)
plt.show()

运行结果如下图:  

1.3 绘制散点图 

import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(10)
y = np.random.rand(10)
plt.scatter(x, y)
plt.show()

运行结果如下图:  

 

1.4 绘制直方图 

import matplotlib.pyplot as plt
import numpy as np

# 随机生成10000个服从标准正态分布的数据
data = np.random.randn(10000)

#  绘制频数直方图:bins为颗粒度,即直方图的柱形数量;edgecolor为柱形的边框颜色
plt.hist(data, bins=10, edgecolor='black')
plt.show()

运行结果如下图:  

2. 可视化常用技巧

2.1 添加文字说明

如下的代码我们可以添加标题和x,y轴:

import matplotlib.pyplot as plt
x = [1, 2, 3]
y = [2, 4, 6]
plt.plot(x, y)
plt.title('TITLE')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

运行结果如下图:  

2.2 添加图例

可以通过plt.legend()来加添加图例:

我们想改图例的位置只需要改单引号里面的字:

  • 锁定在左上角为loc=='upper left'   不写则默认为此位置
  • 锁定在右上角为loc=='upper right' 
  • 锁定在左下角为loc=='lower left'
  • 锁定在右下角为loc=='lower right'
import numpy as np
import matplotlib.pyplot as plt
# 第一条线, 设定标签lable为y = x + 1
x1 = np.array([1, 2, 3])
y1 = x1 + 1
plt.plot(x1, y1, label='y = x + 1') 
# 第二条线, 设定标签lable为y = x*2
y2 = x1*2
plt.plot(x1, y2, color='red', linestyle='--', label='y = x*2')
plt.legend(loc='upper right')
plt.show()

运行结果如下图:   

 

2.3 设置双坐标轴

接下来介绍何来画出两条y坐标轴, 要两条线之间的代码加上一行: plt.twinx()

# (3) 设置双坐标轴
import numpy as np
import matplotlib.pyplot as plt
# 第一条线, 设定标签lable为y = x
x1 = np.array([10, 20, 30])
y1 = x1
plt.plot(x1, y1, color='red', linestyle='--', label='y = x')
plt.legend(loc='upper left')
plt.twinx()
# 第二条线, 设定标签lable为y = x^2
y2 = x1*x1
plt.plot(x1, y2, label='y = x^2') 
plt.legend(loc='upper right')
plt.show()

运行结果如下图:    

2.4 中文显示问题

在使用matplotlib画图时,默认情况下是不支持中文显示的,通过如下代码可解决该问题。其中由于更改了字体导致显示不出负号,得将配署文件中axes.unicode minus设为False:

import matplotlib.pyplot as plt
#plt.rcParams['font.sans-serif'] = ['SimHei']
#plt.rcParams['axes.unicode_minus'] = False
x = [1, 2, 3]
y = [2, 4, 6]
plt.plot(x, y)
plt.title('中文标题')
plt.xlabel('中文X轴')
plt.ylabel('中文Y轴')
plt.show()

不加此代码运行结果如下:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = [1, 2, 3]
y = [2, 4, 6]
plt.plot(x, y)
plt.title('中文标题')
plt.xlabel('中文X轴')
plt.ylabel('中文Y轴')
plt.show()

加此代码运行结果如下:

2.5 绘制多图

有时我们需要在一张画布上输出多个图形,在Matplotlib库中有当前的图形(figure)以及当前轴(axes)概念,其对应的就是当前画布以及当前子图,在一张画布(figure)上可以绘制多个子图(axes)。绘制多图通常采用subplot()函数或subplots()函数。首先来讲解subplot()函数,如下图所示,它通常含有三个参数,子图的行数、列数以及第几个子图,例如subplot(221)表示的就是绘制2行2列的子图(共4个子图),并在第1个子图上进行绘图。演示如下:

import matplotlib.pyplot as plt
# 绘制第一个子图:折线图
ax1 = plt.subplot(221)  
ax1.plot([1, 2, 3], [2, 4, 6])
# 绘制第二个子图:柱状图
ax2 = plt.subplot(222)  
ax2.bar([1, 2, 3], [2, 4, 6])
# 绘制第三个子图:散点图
ax3 = plt.subplot(223)  
ax3.scatter([1, 3, 5], [2, 4, 6])
# 绘制第四个子图:直方图
ax4 = plt.subplot(224)  
ax4.hist([2, 2, 2, 3, 4])

运行结果如下:

在使用subplot()函数的时候,每次在新的子图上画图时,都得调用subplot()函数,例如第四个子图就得写成ax4 = plt.subplot(224),那有没有什么办法,一次性就生成多个子图呢?这时候就可以用到subplots()函数,代码如下:

import matplotlib.pyplot as plt
fig, axes = plt.subplots(2, 2)
ax1, ax2, ax3, ax4 = axes.flatten()
# 绘制第一个子图:折线图
ax1.plot([1, 2, 3], [2, 4, 6])
# 绘制第二个子图:柱状图
ax2.bar([1, 2, 3], [2, 4, 6])
# 绘制第三个子图:散点图
ax3.scatter([1, 3, 5], [2, 4, 6])
# 绘制第四个子图:直方图
ax4.hist([2, 2, 2, 3, 4])

运行结果如下:

此外,如果要在subplot()函数或者subplots()函数生成的子图中设置子图标题、X轴标签或Y轴标签,得通过:set_title()函数、set_xlabel()函数、set_ylabel()函数进行设置,演示代码如下: 

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
fig, axes = plt.subplots(2, 2, figsize=(10, 8))  #figsize=(10, 8)可以更改图片大小
ax1, ax2, ax3, ax4 = axes.flatten()
ax1.plot([1, 2, 3], [2, 4, 6])
ax1.set_title('子图1')   #设置子图1的标题
ax1.set_xlabel('日期')   #设置子图1的X轴标签
ax1.set_ylabel('分数')   #设置子图1的Y轴标签
ax2.bar([1, 2, 3], [2, 4, 6])
ax3.scatter([1, 3, 5], [2, 4, 6])
ax4.hist([2, 2, 2, 3, 4])

运行结果如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风影楼前

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值