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