Matplotlib : Quiver And Imshow Superimposed, How Can I Set Two Colorbars?
Solution 1:
Simply call colorbar
twice, right after each plotting call. Pylab will create a new colorbar matching to the latest plot. Note that, as in your example, the quiver values range from 0,1 while the imshow takes negative values. For clarity (not shown in this example), I would use different colormaps to distinguish the two types of plots.
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()
Solution 2:
Running quiver doesn't necessarily return the type of mappable object that colorbar()
requires. I think it might be because I explicitly "have colored the vector field based on another scalar quantity" like Heimdall says they did. Therefore, Hooked's answer didn't work for me.
I had to create my own mappable for the color bar to read. I did this by using Normalize
from matplotlib.colors
on the data that I wanted to use to color my quiver vectors (which I'll call C
, which is an array of the same shape as X
, Y
, U
, and V
.)
My quiver call looks like this:
import matplotlib.pyplotas pl
import matplotlib.cmas cm
import matplotlib.colorsas mcolors
import matplotlib.colorbaras 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')
Giving any other arguments to the colorbar function gave me a variety of errors.
Post a Comment for "Matplotlib : Quiver And Imshow Superimposed, How Can I Set Two Colorbars?"