📜  Matplotlib-变换(1)

📅  最后修改于: 2023-12-03 15:17:35.651000             🧑  作者: Mango

Matplotlib 变换

简介

Matplotlib 是一个Python绘图库,广泛用于数据可视化和科学计算,在各类数据分析领域得到广泛的应用。变换是数据可视化的重要组成部分之一,Matplotlib 提供了多种变换方式,可以很方便地将图像进行各种变换、旋转、缩放等操作。

常见的变换

Matplotlib 中的变换包括了平移、旋转、缩放等基本变换,也包括了投影变换、仿射变换、透视变换等高级变换。以下是其中几种常见的变换:

平移变换

平移变换可以在平面上移动坐标轴或数据点。它维持了点之间的相对距离,只是将它们移到了新的位置。

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()
x = np.linspace(0, 10, 100)
y = np.sin(x)
ax.plot(x, y, label='Original')
ax.plot(x+2, y, label='Shifted')
ax.legend()
plt.show()

Shifted

旋转变换

旋转变换可以将坐标轴或数据点按一定的角度旋转。旋转变换也维持了点之间的相对距离。

fig, ax = plt.subplots()
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.exp(-X**2 - Y**2)
ax.contourf(X, Y, Z, cmap='coolwarm')
ax.set_aspect('equal')
T = np.array([[np.cos(np.pi/4), -np.sin(np.pi/4)],
              [np.sin(np.pi/4), np.cos(np.pi/4)]])
X, Y = T.dot(np.array([X.flatten(), Y.flatten()]))
ax.contourf(X.reshape(100, 100), Y.reshape(100, 100), Z, cmap='coolwarm')
plt.show()

Rotated

缩放变换

缩放变换可以将坐标轴或数据点放大或缩小。缩放变换同样维持了点之间的相对距离。

fig, ax = plt.subplots()
x = np.logspace(1, 3, 100)
y = np.log10(x)
ax.plot(x, y, label='Original')
ax.plot(x*0.1, y*0.5, label='Scaled')
ax.legend()
plt.show()

Scaled

投影变换

投影变换可以将三维空间中的数据点投影到二维平面上,这是可视化高维数据常用的手段。Matplotlib 中提供了多种常用的投影方式。

from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = y = np.linspace(-1, 1, 50)
X, Y = np.meshgrid(x, y)
Z = np.exp(-(X**2 + Y**2)/2)
ax.plot_surface(X, Y, Z, cmap='coolwarm')
ax.set_axis_off()
ax.view_init(elev=30, azim=-80)

fig2 = plt.figure()
ax2 = fig2.add_subplot(111)
ax2.contourf(X, Y, Z, cmap='coolwarm')
ax2.set_aspect('equal')
ax2.set_axis_off()
ax2.set_xlim([-1.2, 1.2])
ax2.set_ylim([-1.2, 1.2])
M = np.array([[1, 1], [-1, 1]])
X, Y = M.dot(np.array([X.flatten(), Y.flatten()]))
Z = Z.flatten()
ax2.scatter(X, Y, c=Z, cmap='coolwarm')
plt.show()

Projection

总结

通过以上几个例子,我们可以看到 Matplotlib 中的变换能够很方便地实现各种图形的变化。这在数据可视化和科学计算中是非常重要的一个功能,可以让我们更好地展示和理解数据。