保持不同绘图的颜色比例相同 - Python

Keeping the color scaling the same for different plots - Python

我正在使用 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()

我希望你有一些有用的想法。

您可以指定一个固定的 levels,例如(从 doc 修改而来):

您不能将 vmaxvminlevels 一起使用,因为前者会覆盖后者。要绕过它,您可以使用掩码数组:

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)