Wechseln zu einem einfachen Arbeitsbeispiel:
import numpy
import matplotlib.pyplot as plt
#------------------Get some data------------------
X = numpy.arange(100)
Y = numpy.arange(100)
Z = numpy.arange(100**2).reshape((100,100))
levels=numpy.arange(0,100**2,1000)
ltop=levels[::2] # labels appear on top
lbot=levels[1:][::2] # labels appear at bottom
#-----------------------Plot-----------------------
f = plt.figure()
ax = f.gca()
cf = ax.contourf(X,Y,Z,100)
cbar=plt.colorbar(cf,orientation='horizontal',ticks=lbot,drawedges=True)
vmin=cbar.norm.vmin
vmax=cbar.norm.vmax
#-------------Print bottom tick labels-------------
cbar.ax.set_xticklabels(lbot)
#--------------Print top tick labels--------------
for ii in ltop:
cbar.ax.text((ii-vmin)/(vmax-vmin), 1.5, str(ii), transform=cbar.ax.transAxes, va='bottom', ha='center')
plt.show(block=False)
Grundsätzlich sind die unteren Etiketten aufgetragen sind cbar.ax.set_xticklabels(lbot)
das Standardverfahren. Für die oberen Etiketten habe ich sie manuell mit cbar.ax.text()
hinzugefügt.
Das Grundstück sieht wie folgt aus: 
EDIT: WICHTIG UPDATE ZU MEINER ANTWORT:
Wenn die colorbar hat ausfahren/Überlauf, ein Dreieck auf dem jeweiligen Ende verwendet wird Wertüberlauf, um anzuzeigen, . In solchen Fällen müssen die oberen Hilfsstrichbeschriftungen angepasst werden, um sie korrekt an den Farbbalkenabschnitten auszurichten.
Standardmäßig ist die Dreiecksgröße 5% der Farbbalkenachse, dies wird verwendet, um den korrekten Offset und die Skalierung zum Ausrichten der Beschriftungen zu erhalten.
Siehe unten ein Beispiel, das sich an beiden Enden erstreckt. Unter Verwendung meiner früheren Verfahren, sieht das Ergebnis wie folgt aus:

Die 2 Endnummern am oberen Zeile sind mit der Spitze der Dreiecke ausgerichtet ist. Wenn nur ein Ende verlängert ist und die Anzahl der Konturniveaus groß ist (> = 10 oder so), wird die Fehlausrichtung schlechter.
Die Handlung nach der Korrektur: 
Und das ist der Code die richtige Handlung zu generieren:
import numpy
import matplotlib.pyplot as plt
#------------------Get some data------------------
X = numpy.linspace(-1,1,100)
Y = numpy.linspace(-1,1,100)
X,Y=numpy.meshgrid(X,Y)
Z=numpy.sin(X**2)
levels=numpy.linspace(-0.8,0.8,9)
ltop=levels[::2] # labels appear on top
lbot=levels[1:][::2] # labels appear at bottom
#-----------------------Plot-----------------------
f = plt.figure()
ax = f.gca()
cf = ax.contourf(X,Y,Z,levels,extend='both')
cbar=plt.colorbar(cf,orientation='horizontal',ticks=lbot,drawedges=True)
#------------Compute top tick label locations------------
vmin=cbar.norm.vmin
vmax=cbar.norm.vmax
if cbar.extend=='min':
shift_l=0.05
scaling=0.95
elif cbar.extend=='max':
shift_l=0.
scaling=0.95
elif cbar.extend=='both':
shift_l=0.05
scaling=0.9
else:
shift_l=0.
scaling=1.0
#-------------Print bottom tick labels-------------
cbar.ax.set_xticklabels(lbot)
#--------------Print top tick labels--------------
for ii in ltop:
cbar.ax.text(shift_l + scaling*(ii-vmin)/(vmax-vmin),
1.5, str(ii), transform=cbar.ax.transAxes,
va='bottom', ha='center')
plt.show(block=False)