Matplotlib: temblar y hacer una imagen superpuesta, ¿cómo puedo configurar dos barras de colores?

Tengo una figura que consiste en una imagen mostrada por imshow() , un contorno y un campo vectorial establecido por quiver() . He coloreado el campo vectorial basado en otra cantidad escalar. A la derecha de mi figura, he hecho una colorbar() . Esta colorbar() representa los valores mostrados por imshow() (que pueden ser positivos y negativos en mi caso). Me gustaría saber cómo podría configurar otra barra de color que se basaría en los valores de la cantidad escalar en la que se basa el color de los vectores. ¿Alguien sabe cómo hacer eso?

Aquí hay un ejemplo de la imagen que he podido hacer. Observe que los colores de los vectores van del azul al rojo. Según la barra de colores actual, azul significa negativo. Sin embargo, sé que la cantidad representada por el color del vector es siempre positiva.

introduzca la descripción de la imagen aquí

Simplemente llame a la colorbar dos veces, justo después de cada llamada de trazado. Pylab creará una nueva barra de colores que coincidirá con la última ttwig. Tenga en cuenta que, como en su ejemplo, los valores de carcaj varían de 0,1 mientras que el imshow toma valores negativos. Para mayor claridad (no se muestra en este ejemplo), usaría diferentes mapas de colores para distinguir los dos tipos de gráficos.

 import numpy as np import pylab as plt # Create some sample data dx = np.linspace(0,1,20) X,Y = np.meshgrid(dx,dx) Z = X**2 - Y Z2 = X plt.imshow(Z) plt.colorbar() plt.quiver(X,Y,Z2,width=.01,linewidth=1) plt.colorbar() plt.show() 

introduzca la descripción de la imagen aquí

La ejecución de quiver no necesariamente devuelve el tipo de objeto asignable que requiere colorbar() . Creo que podría ser porque explícitamente “he coloreado el campo vectorial en base a otra cantidad escalar”, como Heimdall dice que hicieron. Por lo tanto, la respuesta de Hooked no funcionó para mí.

Tuve que crear mi propio mapeador para leer la barra de colores. Hice esto usando Normalize from matplotlib.colors en los datos que quería usar para colorear mis vectores de carcaj (que llamaré C , que es una matriz de la misma forma que X , Y , U y V ).

Mi llamada de carcaj se ve así:

 import matplotlib.pyplot as pl import matplotlib.cm as cm import matplotlib.colors as mcolors import matplotlib.colorbar as mcolorbar pl.figure() nz = mcolors.Normalize() nz.autoscale(C) pl.quiver(X, Y, U, V, color=cm.jet(nz(C))) cax,_ = mcolorbar.make_axes(pl.gca()) cb = mcolorbar.ColorbarBase(cax, cmap=cm.jet, norm=nz) cb.set_label('color data meaning') 

Dar cualquier otro argumento a la función de la barra de colores me dio una variedad de errores.

Mi ejemplo, donde el color del vector muestra el tercer eje de datos.