Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么是Matlab的等价物';在matplotlib中的s冲浪(x,y,z,c)?_Python_Matlab_Matplotlib - Fatal编程技术网

Python 什么是Matlab的等价物';在matplotlib中的s冲浪(x,y,z,c)?

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,

我想在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, 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