Python 如何在3d中可视化函数值?

Python 如何在3d中可视化函数值?,python,numpy,matplotlib,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')

假设我有一个函数,它将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)

曲面图的文档列出了选项
facecolors
。有一个示例可以在两种颜色之间交替,但可以传递任何matplotlib颜色,包括和RGB值数组

您需要自己进行从x、y、z到F(x、y、z)到“颜色”的映射,然后将F转换为RGB值

facecolors = plt.cm.Red(F(x,y,z))
应该这样做


请参见:

Matplotlib允许使用
facecolor
参数来
plot\u曲面
设置曲面中每个多边形的颜色。参数需要与输入数组具有相同的形状,并且必须由有效的颜色组成。获得这些颜色的一种方法是彩色贴图

有关详细信息,请参见

下面是一个工作示例代码

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()
导入matplotlib.pyplot作为plt
从matplotlib导入cm
从mpl_toolkits.mplot3d导入Axes3D
将numpy作为np导入
u=np.linspace(0,2*np.pi,180)
v=np.linspace(0,np.pi,90)
x=np.外部(np.cos(u),np.sin(v))
y=np.外部(np.sin(u),np.sin(v))
z=np.外部(np.尺寸(u)),np.外壳(v))
F=np.sin(x)*y+z
F=(F-F.min())/(F-F.min()).max()
#设置颜色和渲染
图=plt.图(图尺寸=(8,8))
图子批次调整(顶部=1,底部=0,左侧=0,右侧=1)
ax=图添加_子图(111,投影='3d')
#使用facecolors参数,提供与z形状相同的数组
#cm。()允许从数组中获取rgba颜色。
#数组必须在0和1之间规格化
ax.plot_曲面(
x、 y,z,rstride=1,cstride=1,facecolors=cm.jet(F),α=0.9,线宽=0.9)
ax.set_xlim([-1,1])
ax.set_ylim([-1,1])
ax.set_zlim([-1,1])
ax.设置相位(“相等”)
plt.savefig(_文件__+“.png”)
plt.show()

你有一个你想要的可视化的例子吗?@Gradipicus你看过matplotlib上的这个例子吗?@sacha cs这不是提问者想要的。他希望颜色根据某个函数
F(x,y,z)
来确定,而不是像示例中那样,仅作为
z
的函数。然而,这适用于每x,y只有一个z值的半球,这使得颜色映射非常容易。