Python 什么是Matlab的等价物';在matplotlib中的s冲浪(x,y,z,c)?
我想在matlab中实现像Python 什么是Matlab的等价物';在matplotlib中的s冲浪(x,y,z,c)?,python,matlab,matplotlib,Python,Matlab,Matplotlib,我想在matlab中实现像surf(x,y,z,c)这样的函数,这里x,y和z是坐标,c是一个变量值,我可以使用c来定义颜色。我不知道如何使用matplotlib实现它,我使用了类似这样的代码(请参阅): 您需要创建标量映射,该映射将存储在数组“C”中的值转换为颜色值: from matplotlib.colors import Normalize from matplotlib import cm import matplotlib.pyplot as plt # assuming X,
surf(x,y,z,c)
这样的函数,这里x
,y
和z
是坐标,c
是一个变量值,我可以使用c
来定义颜色。我不知道如何使用matplotlib
实现它,我使用了类似这样的代码(请参阅):
您需要创建标量映射,该映射将存储在数组“C”中的值转换为颜色值:
from matplotlib.colors import Normalize
from matplotlib import cm
import matplotlib.pyplot as plt
# assuming X, Y, Z, C are given in correct format
# Z and C have same dimensions
min = C.min()
max = C.max()
# choose any colormap e.g. cm.jet, cm.coolwarm, etc.
color_map = cm.RdYlGn # reverse the colormap: cm.RdYlGn_r
scalarMap = cm.ScalarMappable(norm=Normalize(vmin=min, vmax=max), cmap=color_map)
# outputs an array where each C value is replaced with a corresponding color value
C_colored = scalarMap.to_rgba(C)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors=C_colored, antialiased=True)
这是一个结合了其他两个答案(and)的方便函数,它允许您传入单个参数(光栅Z,如imshow)和颜色贴图,并计算X、Y和C(或允许您传入Z、颜色贴图以及一些X、Y和C):
你可以看看这个教程,我在matplotlib教程中没有找到像surf(x,y,z,c)这样的函数,但这确实不完全符合SO标准;包括您尝试过的内容以及为什么不起作用等,然后我们可以从那里开始帮助您。即使你说我读了这些文档,只是不理解它们,你也在做得更好,而不是仅仅要求其他人做你的家庭作业。
from matplotlib.colors import Normalize
from matplotlib import cm
import matplotlib.pyplot as plt
# assuming X, Y, Z, C are given in correct format
# Z and C have same dimensions
min = C.min()
max = C.max()
# choose any colormap e.g. cm.jet, cm.coolwarm, etc.
color_map = cm.RdYlGn # reverse the colormap: cm.RdYlGn_r
scalarMap = cm.ScalarMappable(norm=Normalize(vmin=min, vmax=max), cmap=color_map)
# outputs an array where each C value is replaced with a corresponding color value
C_colored = scalarMap.to_rgba(C)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors=C_colored, antialiased=True)
def surf(Z, colormap, X=None, Y=None, C=None, shade=None):
if X is None and Y is None:
X, Y = meshgrid_of(Z)
elif X is None:
X, _ = meshgrid_of(Z)
elif Y is None:
_, Y = meshgrid_of(Z)
if C is None:
C = Z
scalarMap = cm.ScalarMappable(norm=Normalize(vmin=C.min(), vmax=C.max()), cmap=colormap)
# outputs an array where each C value is replaced with a corresponding color value
C_colored = scalarMap.to_rgba(C)
ax = gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors=C_colored, shade=shade)
return surf
def meshgrid_of(A):
xx, yy = meshgrid(range(shape(A)[1]), range(shape(A)[0]))
return xx, yy