Python轮子:matpotlib-3d绘图(3)

原文链接:http://www.juzicode.com/python-module-matplotlib-3d-plotting-3

本文介绍几种matplotlib的三维表面绘图。

应用场景

  • 科学计算与数学可视化
  • 工程与物理模拟
  • 教育与演示
  • 经济学与金融
  • 机器学习与数据科学

安装与导入

import matplotlib.pyplot as plt

三维表面绘图方法

1)3D表面纯色图

演示使用纯色的3D 曲面的基本绘图。

# juzicode.com/VX公众号:juzicode
import numpy as np
import matplotlib.pyplot as plt 
plt.rcParams['font.family'] =  ['YouYuan']   
plt.rcParams['axes.unicode_minus'] = False  

fig = plt.figure()
ax = fig.add_subplot(projection='3d')

# Make data
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
Z = np.cos(np.sqrt(X**2 + Y**2))

# Plot the surface
ax.plot_surface(X, Y, Z)

plt.show()

2)3D表面颜色着色图

演示如何绘制使用 coolwarm 颜色图着色的 3D 表面。 通过使用 使表面变得不透明

# juzicode.com/VX公众号:juzicode
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family'] =  ['YouYuan']   
plt.rcParams['axes.unicode_minus'] = False  
from matplotlib import cm
from matplotlib.ticker import LinearLocator

fig, ax = plt.subplots(subplot_kw={"projection": "3d"})

X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
Z = np.cos(np.sqrt(X**2 + Y**2))

surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,
                       linewidth=0, antialiased=False)

ax.set_zlim(-1.01, 1.01)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter('{x:.02f}')

fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()

3)3D表面棋盘图

绘制以棋盘格图案着色的 3D 曲面,自定义颜色网格,突出曲面结构。

# juzicode.com/VX公众号:juzicode
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family'] =  ['YouYuan']   
plt.rcParams['axes.unicode_minus'] = False  
from matplotlib.ticker import LinearLocator

ax = plt.figure().add_subplot(projection='3d')
X = np.arange(-5, 5, 0.25)
xlen = len(X)
Y = np.arange(-5, 5, 0.25)
ylen = len(Y)
X, Y = np.meshgrid(X, Y)
Z = np.cos(np.sqrt(X**2 + Y**2))
 
colortuple = ('y', 'b')
colors = np.empty(X.shape, dtype=str)
for y in range(ylen):
    for x in range(xlen):
        colors[y, x] = colortuple[(x + y) % len(colortuple)]

surf = ax.plot_surface(X, Y, Z, facecolors=colors, linewidth=0)
ax.set_zlim(-1, 1)
ax.zaxis.set_major_locator(LinearLocator(6))

plt.show()
       

4)黄绿蓝渐变图

使用YlGnBu_r着色3d表面,制作黄绿蓝的渐变图。

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family'] =  ['YouYuan']   
plt.rcParams['axes.unicode_minus'] = False  
from matplotlib.ticker import LinearLocator

ax = plt.figure().add_subplot(projection='3d')

X = np.arange(-5, 5, 0.25)
xlen = len(X)
Y = np.arange(-5, 5, 0.25)
ylen = len(Y)
X, Y = np.meshgrid(X, Y)
Z = np.cos(np.sqrt(X**2 + Y**2))

ax.plot_surface(X, Y, Z, cmap=plt.cm.YlGnBu_r)
ax.set_zlim(-1, 1)
ax.zaxis.set_major_locator(LinearLocator(6))

plt.show()

5)单色渐变图

使用cm.Blues生成渐变蓝色图,呈现数据层次。

# juzicode.com/VX公众号:juzicode
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family'] =  ['YouYuan']   
plt.rcParams['axes.unicode_minus'] = False  
from matplotlib import cm
plt.style.use('_mpl-gallery')

X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
Z = np.cos(np.sqrt(X**2 + Y**2))

fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
ax.plot_surface(X, Y, Z,  cmap=cm.Blues)

ax.set(xticklabels=[],
       yticklabels=[],
       zticklabels=[])
plt.show()

这篇文章详细介绍了使用 Matplotlib 进行 3D 表面绘图 的多种方法,适合初学者快速上手 Matplotlib 3D 绘图,同时也展示了颜色映射、透明度调整等进阶技巧,帮助用户更灵活地呈现三维数据。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注