python - 如何以 3d 形式可视化函数值?

标签 python numpy matplotlib

假设我有一些函数,它将 3 个坐标 (x,y,z) 映射到某个实数。

如何可视化球体等表面上的函数值?

理想情况下,我会将函数的值映射到颜色,然后相应地为球体着色。

这是我生成球体的代码:

from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt

%matplotlib inline

fig = plt.figure()
ax = fig.gca(projection='3d')
ax.set_aspect("equal")

u = np.linspace(0, 2 * np.pi, 250)
v = np.linspace(0, np.pi, 250)

x =  np.outer(np.cos(u), np.sin(v))
y =  np.outer(np.sin(u), np.sin(v))
z =  np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z, color="w")

如何编辑我的代码以根据某些函数为其着色 F(x,y,z)

最佳答案

Matplotlib 允许使用 plot_surfacefacecolor 参数来设置表面中每个多边形的颜色。参数需要与输入数组具有相同的形状,并且必须包含有效的颜色。获取这些颜色的一种方法是颜色图。

另请参阅this question了解详情。

下面是一个工作示例代码。

import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
import numpy as np


u = np.linspace(0, 2 * np.pi, 180)
v = np.linspace(0, np.pi, 90)

x =  np.outer(np.cos(u), np.sin(v))
y =  np.outer(np.sin(u), np.sin(v))
z =  np.outer(np.ones(np.size(u)), np.cos(v))

F = np.sin(x)*y + z
F = (F-F.min())/(F-F.min()).max()
#Set colours and render
fig = plt.figure(figsize=(8, 8))
fig.subplots_adjust(top=1, bottom=0, left=0, right=1)
ax = fig.add_subplot(111, projection='3d')
#use facecolors argument, provide array of same shape as z
# cm.<cmapname>() allows to get rgba color from array.
# array must be normalized between 0 and 1
ax.plot_surface(
    x,y,z,  rstride=1, cstride=1, facecolors=cm.jet(F), alpha=0.9, linewidth=0.9) 
ax.set_xlim([-1,1])
ax.set_ylim([-1,1])
ax.set_zlim([-1,1])
ax.set_aspect("equal")

plt.savefig(__file__+".png")
plt.show()

enter image description here

关于python - 如何以 3d 形式可视化函数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41230512/

相关文章:

python - Pyaudio - 将声音数据转换为字符串的算法

Python 不提交 MySQL 事务

python - 使用 Numpy 生成 ASCII 内核

Python 使用给定窗口运行累积和

python - 阻止 matplotlib 绘图关闭

python - 在 12 个月轴上逐年绘制

python - 为什么这个 Python Borg/Singleton 模式有效

python - 使用 seaborn 为数据框绘制直方图

python - 导入错误 : cannot import name NUMPY_MKL

python - matplotlib/ basemap 没有河流的世界地图?