保持不同绘图的颜色缩放相同 - Python

时间:2015-09-02 13:07:57

标签: python matplotlib plot colors scaling

我正在使用Python和matplotlib。 我正在连续绘制一些来自频谱分析仪的数据。因此,在循环的每一个新步骤中,我的情节都会添加一个新的部分。

但我刚才意识到颜色缩放不会保持不变。因此,有时如果数据有点不同,则会进行全新的缩放:

enter image description here

你可以在中间的大红圈中识别它。红色圆圈的条目值均为零。所以通常它应该在每次新迭代时都具有相同的颜色。但正如你所看到的,如果仔细观察,情况并非如此。有时红色有点暗。

我已将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()

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

1 个答案:

答案 0 :(得分:1)

您可以指定固定的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)

enter image description here