一、matplotlib库
matplotlib.pyplot 是 Python 中用于数据可视化的核心库,提供类似 MATLAB 的绘图接口。通过简单的函数调用,可以生成线图、散点图、直方图等常见图表。
基本功能
1、绘制图形
绘制线图:通过 plt.plot(x, y) 绘制二维数据。
散点图:使用 plt.scatter(x, y) 展示离散数据点。
条形图:调用 plt.bar(x, y) 生成垂直条形图。
标题:通过 plt.title(), plt.xlabel(), plt.ylabel() 设置图表信息。
python
import matplotlib.pyplot as plt
import numpy as np
# 1. 线图 (Line plot)
x = np.linspace(0, 10, 100)
ax=plt.plot(x, np.sin(x), 'r-')
plt.title('Line plot')
# 2. 散点图 (Scatter plot)
x = np.random.randn(100)
y = np.random.randn(100)
plt.scatter(x, y, c='blue')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Scatter plot')
# 3. 条形图 (Bar chart)
categories = ['A', 'B', 'C', 'D']
values = [23, 45, 56, 78]
plt.bar(categories, values)
plt.title('Bar chart')
plt.show()



注:标题不能是中文
2、创建多个子图
1)plt.subplot(参数1,参数2,参数3)
功能:创建多个子图
第一个参数 2:表示总行数为 2
第二个参数 3:表示总列数为 3
第三个参数 2:表示当前要操作的子图位置索引(从1开始计数)
例如:plt.subplot(2,3,1)

python
import matplotlib.pyplot as plt
import numpy as np
# 1. 线图 (Line plot)
plt.subplot(2, 3, 1)
x = np.linspace(0, 10, 100)
ax=plt.plot(x, np.sin(x), 'r-')
plt.title('Line plot')
# 2. 散点图 (Scatter plot)
plt.subplot(2, 3, 2)
x = np.random.randn(100)
y = np.random.randn(100)
plt.scatter(x, y, c='blue')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Scatter plot')
# 3. 条形图 (Bar chart)
plt.subplot(2, 3, 3)
categories = ['A', 'B', 'C', 'D']
values = [23, 45, 56, 78]
plt.bar(categories, values)
plt.title('Bar chart')
plt.show()
2)plt.subplots()
这里在对子图位置进行索引时,从0开始计数,一维的就是0、1......,二维就是[0,0],[0,1],......
python
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,10,10000)#xy都是矩阵,数据具有计算的功能
y1 = np.sin(x)#不能用math的sin等功能
y2 = np.cos(x)
y3 = np.tan(x)
y4 = np.sin(x ** 2)
fig,axs =plt.subplots(2,2,figsize=(10,8))
axs[0,0].plot(x,y1,'r')
axs[0,0].set_title('sin(x)')
axs[0,1].plot(x,y2,'g')
axs[0,1].set_title('cos(x)')
axs[1,0].plot(x,y3,'b')
axs[1,0].set_title('tan(x)')
axs[1,1].plot(x,y4,'m')
axs[1,1].set_title('sin(x^2)')
plt.show()
代码解释:
1.x=np.linspace(0,10,10000)是使用 NumPy 库生成一个从 0 到 10 的等间隔数值数组的代码。该数组包含 10000 个均匀分布的点。
参数说明:
第一个参数 0 是数组的起始值。
第二个参数 10 是数组的结束值。
第三个参数 10000 是生成的样本数量。
2.fig,axs =plt.subplots(2,2,figsize=(10,8))表示创建多个子图,其中子图行列数为2×2,子图的大小为长10宽8
3.axs是一个numpy数组,通过axs[i,j]访问第 i 行,第 j 列的子图(索引从0开始)
注意:要写plt.show()否则代码结果无法显示出来
结果如下图所示:

3、from pylab import matplotlib
前面使用matplotlib.pyplot时,有说到标题不能时中文,而导入pylab后,标题就可以使用中文


二、案例
现已存在一个数据文件datingTestSet2.txt ,为历年大学生的调查问卷表
将类别为同一类的放在一起,并使用散点图表示出来
python
import matplotlib.pyplot as plt
import numpy as np
data=np.loadtxt('datingTestSet2.txt',delimiter="\t")
a=data[data[:,-1]==1]
b=data[data[:,-1]==2]
c=data[data[:,-1]==3]
fig=plt.figure()
ax=plt.axes(projection="3d")
ax.scatter(a[:,0],a[:,1],a[:,2],c='r',marker="o")
ax.scatter(b[:,0],b[:,1],b[:,2],c='g',marker="^")
ax.scatter(c[:,0],c[:,1],c[:,2],c='b',marker="+")
ax.set(xlabel="x",ylabel="y",zlabel="z")
plt.show()
