我努力通過不同的地塊保持相同的酒吧範圍。不同地塊的相同顏色的酒吧範圍 - Matplotlib
例如,我有這些可視化:
生產,與此代碼:
def plot_contour(x_dim, y_dim, x_steps, y_steps, scalar_field, file_path):
plt.figure()
x, y = numpy.mgrid[-x_dim:x_dim/:x_steps*1j, -y_dim:y_dim:y_steps*1j]
cs = plt.contourf(x, y, scalar_field, zorder=1, extent=[-x_dim, x_dim, -y_dim, y_dim])
plt.colorbar(cs)
plt.savefig(file_path + '.png', dpi=Vc.dpi)
plt.close()
我希望能夠比較這兩個領域,所以,我想爲它們使用相同的顏色映射。
我的第一種方法是使用參數v_min
和v_max
,使用數據的最小/最大值。
cs = plt.contourf(x, y, scalar_field, zorder=1, extent=[-x_dim, x_dim, -y_dim, y_dim], vmin=-1.00, vmax=1.05) # Manual setting to test
然後我得到了相同的顏色映射:
但我也想有在情節顯示相同的彩條的範圍。我試圖用
cb = plt.colorbar(cs)
cb.set_clim(vmin=-1.00, vmax=1.05)
沒有成功。
這個完整的示例產生相同的行爲:
import matplotlib
import numpy as numpy
import matplotlib.cm as cm
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
matplotlib.rcParams['xtick.direction'] = 'out'
matplotlib.rcParams['ytick.direction'] = 'out'
delta = 0.025
x = numpy.arange(-3.0, 3.0, delta)
y = numpy.arange(-2.0, 2.0, delta)
X, Y = numpy.meshgrid(x, y)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
# difference of Gaussians
Za = 10.0 * (Z2 - Z1)
Zb = 5.0 * (Z2 - Z1)
def bounds(scalar_fields):
"""
Get the bounds of a set of scalar_fields
:param scalar_fields : the scalar field set
:return: a set of normalized vector field components
"""
max_bound = -numpy.inf
min_bound = numpy.inf
for scalar_field in scalar_fields:
max_lim = numpy.max(scalar_field)
min_lim = numpy.min(scalar_field)
if max_lim > max_bound:
max_bound = max_lim
if min_lim < min_bound:
min_bound = min_lim
return min_bound, max_bound
def plot_contour(x_dim, y_dim, x_steps, y_steps, scalar_field, v_min, v_max, file_path):
plt.figure()
x, y = numpy.mgrid[-x_dim/2:x_dim/2:x_steps*1j, -y_dim/2:y_dim/2:y_steps*1j]
cs = plt.contourf(x, y, scalar_field, zorder=1, extent=[-x_dim/2.0, x_dim/2.0, -y_dim/2.0, y_dim/2.0],
vmin=v_min, vmax=v_max)
cb = plt.colorbar(cs)
plt.savefig(file_path + '.png')
plt.close()
v_min, v_max = bounds([Za, Zb])
x_dim = y_dim = 6
y_steps = x.shape[0]
x_steps = y.shape[0]
plot_contour(x_dim, y_dim, x_steps, y_steps, Za, v_min, v_max, 'Za')
plot_contour(x_dim, y_dim, x_steps, y_steps, Zb, v_min, v_max, 'Zb')
我怎麼能這樣做呢?
預先感謝您。
放在兩個呼叫的'vmin'和'vmax'?你在做什麼應該工作。您能否以完整的可調用示例(包括合成數據)重現此問題? – tacaswell 2014-09-26 18:46:25
是的,我把這個參數放在這兩個調用中,功能都是一樣的。我去做。 – pceccon 2014-09-26 18:49:11
,我認爲'set_clim'應該放在'cs'對象上,而不是顏色條上。 – tacaswell 2014-09-26 18:50:10