matplotlib库 点线图,直方图,多子图与三维空间的可视化

目录

一.基础绘图

1.绘制点线图:

2.直方图:

3.多子图绘制

[二. 三维空间可视化](#二. 三维空间可视化)

1.数据准备

2.绘图实现

3.完整代码呈现


一.基础绘图

1.绘制点线图:

通过**plt.plot(x, y)** 传入X/Y轴数据,设置颜色(color)和标记形状(marker),添加标题(title)和轴标签(xlabel/ylabel)。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np
x=np.array([1,2,3,4,5])
y=np.array([10,20,30,40,50])
plt.plot(x,y,color='red',marker='o')#点线图
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.show()

2.直方图:

使用plt.hist()绘制单值条形图

python 复制代码
data = [1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 5, 5, 5, 5, 5]
plt.hist(data,color='red')
plt.show()

3.多子图绘制

通过plt.subplot()在同一画布上分区域绘制多个图形(如正弦、余弦函数),结合np.linspace()生成等间隔数据点。

使用 plt.subplot 创建两行两列的子图(共4个),图像大小为10x8(单位未明确)。

  • 子图通过矩阵(ndarray)管理,通过索引(如 ax[0,0])在指定位置添加数据:
    • 第0行第0列:绘制 Xy1(红色),标题为 X sinex
    • 第0行第1列:绘制 Xy2(绿色),标题为 cosinex
    • 第1行第0列:绘制 Xy3(蓝色)。
python 复制代码
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,10,100)
y1=np.sin(x)
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.数据准备

  • 数据datingTestSet2.txt包含三列特征(旅行路程、游戏时间百分比、零食重量百分比)和一列分类结果(1/2/3类),数据展示部分如下。

  • 需按分类结果筛选数据:类别1,爱学习(红色)、类别2,一般(蓝色)、类别3,爱玩(黄色)。

  • 利用numpy库读取txt文件数据

    python 复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    data = np.loadtxt('datingTestSet2.txt')
  • 将各类别的数据用代码分别划分出来

    python 复制代码
    data_1=data[data[:,-1]==1]
    data_2=data[data[:,-1]==2]
    data_3=data[data[:,-1]==3]

2.绘图实现

  • 工具选择 :使用 matplotlibscatter 函数绘制三维散点图。
  • 步骤
    • 创建三维画布:plt.figure().add_subplot(projection='3d')

      python 复制代码
      fig=plt.figure()
      ax=plt.axes(projection='3d')
    • 分三次添加数据点:分别筛选类别1、2、3的数据,传入对应特征列(X/Y/Z轴),并指定颜色和标记形状(圆形、三角形等)。

      python 复制代码
      ax.scatter(data_1[:,0],data_1[:,1],data_1[:,2],c='red',marker='o',label='1')
      ax.scatter(data_2[:,0],data_2[:,1],data_2[:,2],c='blue',marker='^',lable='2')
      ax.scatter(data_3[:,0],data_3[:,1],data_3[:,2],c='yellow',marker='+',label='3')
    • 设置坐标轴标签

      python 复制代码
      ax.set(xlabel='Xaxes',ylabel='Yaxes',zlabel='Zaxes')
      plt.show()

3.完整代码呈现

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
data = np.loadtxt('datingTestSet2.txt')

data_1=data[data[:,-1]==1]
data_2=data[data[:,-1]==2]
data_3=data[data[:,-1]==3]

fig=plt.figure()
ax=plt.axes(projection='3d')
ax.scatter(data_1[:,0],data_1[:,1],data_1[:,2],c='red',marker='o',label='1')
ax.scatter(data_2[:,0],data_2[:,1],data_2[:,2],c='blue',marker='^',label='2')
ax.scatter(data_3[:,0],data_3[:,1],data_3[:,2],c='yellow',marker='+',label='3')
ax.set(xlabel='Xaxes',ylabel='Yaxes',zlabel='Zaxes')
plt.show()