我正在使用Python和matplotlib。 我正在连续绘制一些来自频谱分析仪的数据。因此,在循环的每一个新步骤中,我的情节都会添加一个新的部分。
但我刚才意识到颜色缩放不会保持不变。因此,有时如果数据有点不同,则会进行全新的缩放:
你可以在中间的大红圈中识别它。红色圆圈的条目值均为零。所以通常它应该在每次新迭代时都具有相同的颜色。但正如你所看到的,如果仔细观察,情况并非如此。有时红色有点暗。
我已将vmin
设置为-100,将vmax
设置为0:
while True:
... #some code
a = np.linspace( (i*np.pi/8-np.pi/16)%(np.pi*2) ,( i*np.pi/8+np.pi/16)%(np.pi*2) , 2)#Angle, circle is divided into 16 pieces
b = np.linspace(start -scaleplot, stop,801) #points of the frequency + 200 more points to gain the inner circle
A, B = np.meshgrid(a, longzeroarray)
ax.contourf(a, b, B , cmap=cm.jet, vmin=-100, vmax=0)
plt.draw()
我希望你有一些有用的想法。
答案 0 :(得分:1)
您可以指定固定的levels
,例如(从doc修改):
您不能将vmax
和vmin
与levels
一起使用,因为前者会覆盖后者。为了绕过它,你可以使用蒙面数组:
import numpy as np
import matplotlib.pyplot as plt
origin = 'lower'
#origin = 'upper'
delta = 0.025
x = y = np.arange(-3.0, 3.01, delta)
X, Y = np.meshgrid(x, y)
Z1 = plt.mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = plt.mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
Z = 10 * (Z1 - Z2)
levels = np.linspace(-3,2,50)
Vmin = -1.
Vmax = 1.
M = np.ma.array(Z, mask=((Z<Vmin)|(Z>Vmax)))
#levels = np.hstack(([Vmin], levels, [Vmax]))
f, (ax1, cax1, ax2, cax2) = plt.subplots(1,4,gridspec_kw={'width_ratios':[9,1,9,1]})
cf1 = ax1.contourf(X, Y, M, levels=levels)
plt.colorbar(cf1, cax=cax1)
cf2 = ax2.contourf(X, Y, M*0.5, levels=levels)
plt.colorbar(cf2, cax=cax2)