Mayavi中一致的数据/颜色条范围

时间:2019-07-04 14:02:04

标签: python matplotlib mayavi mayavi.mlab

我正在尝试在Mayavi中复制以下内容:

import numpy as np
import matplotlib.pyplot as plt

def gauss_2d(x,y,sx,sy,mx,my,rho):
    a = 1./(2*np.pi*sx*sy*np.sqrt(1-rho**2))
    b = 1./(2*(1-rho**2))
    c = (x-mx)**2/sx**2
    d = (y-my)**2/sy**2
    e = (2*rho*(x-mx)*(y-my))/(sx*sy)
    return a*np.exp(-b*(c+d-e))

plt.figure(figsize=(7,5))
x,y = np.meshgrid(np.linspace(0,10,1000),np.linspace(0,5,1000))
Z1 = gauss_2d(x,y,2,1,3,4,.25)
Z2 = 2*gauss_2d(x,y,2,4,10,1,.1)
Z = 10*(Z1-Z2)

cs = plt.imshow(Z, vmin=-1,vmax=1, cmap = plt.cm.tab20c)
plt.colorbar(cs)
plt.show()

得出以下数字: matplotlib construction

对于Mayavi,类似代码应为:

from mayavi import mlab
import numpy as np

cs_obj = mlab.imshow(Z, colormap = 'Vega20c', vmin=-1, vmax=1)
cb = mlab.colorbar(cs_obj, orientation='vertical', nb_labels=5)
#cb.data_range =(-1,1)

mlab.show()

但是,实际上是这样呈现的:

mayavi construction

显然歪曲了原始数据数组。

mayavi的vmin的{​​{1}}和vmax关键字似乎只是将数据归一化为这些限制,而不是将色彩映射归一化为限制(如在matplotlib中一样)。使用mayavi颜色条的imshow属性具有相似的效果。有什么想法可以解决这个问题吗?

0 个答案:

没有答案