I am trying to add a Colorbar to a spectrogram. I tried every example and question that I found on the Internet and no one solved this problem.
Note that "spl1" (data splicing 1) is a trace of ObsPy.
My code is:
fig = plt.figure() ax1 = fig.add_axes([0.1, 0.75, 0.7, 0.2]) #[left bottom width height] ax2 = fig.add_axes([0.1, 0.1, 0.7, 0.60], sharex=ax1) ax3 = fig.add_axes([0.83, 0.1, 0.03, 0.6]) t = np.arange(spl1[0].stats.npts) / spl1[0].stats.sampling_rate ax1.plot(t, spl1[0].data, 'k') ax,spec = spectrogram(spl1[0].data,spl1[0].stats.sampling_rate, show=False, axes=ax2) ax2.set_ylim(0.1, 15) fig.colorbar(spec, cax=ax3)
An error is issued:
Traceback (most recent call last): File "<ipython-input-18-61226ccd2d85>", line 14, in <module> ax,spec = spectrogram(spl1[0].data,spl1[0].stats.sampling_rate, show=False, axes=ax2) TypeError: 'Axes' object is not iterable
Best result:
Replacing the last 3 lines above:
ax = spectrogram(spl1[0].data,spl1[0].stats.sampling_rate, show=False, axes=ax2) ax2.set_ylim(0.1, 15) fig.colorbar(ax,cax=ax3)
Produces the following: 
and this error is for colorbar:
axes object has no attribute 'autoscale_None'
I can't seem to find a way to get the color bar to the right of the job.
Solutions?
One of the solutions I saw is that you need to create an “image” of your data using imshow (), but I do not get the output for this from Spectrogram (), only “ax”. I have seen places try using the output of "ax, spec" from spectrogram (), but this raises a TypeError.
I hope someone can give a hand with this - I work on it all day!