web-dev-qa-db-fra.com

La barre de couleur Matplotlib coche sur le côté gauche / opposé

On pourrait générer une barre de couleur verticale comme ça (simplifiée):

import matplotlib.pyplot as plt
import matplotlib as mpl

plt.figure()
c_ax=plt.subplot(111)
cb = mpl.colorbar.ColorbarBase(c_ax,orientation='vertical')
plt.savefig('my_colorbar.png')

Il en résulte quelque chose comme ça (tourné pour des raisons d'espace): enter image description here

Est-il possible d'obtenir les étiquettes des tiques du côté opposé?

17
M.T

Vous pouvez changer la position des ticks en utilisant c_ax.yaxis.set_ticks_position()

Donc pour votre exemple:

import matplotlib.pyplot as plt
import matplotlib as mpl

plt.viridis()

fig=plt.figure()
c_ax=plt.subplot(199)

cb = mpl.colorbar.ColorbarBase(c_ax,orientation='vertical')

c_ax.yaxis.set_ticks_position('left')

plt.savefig('my_colorbar.png')

enter image description here

Notez que vous pouvez également déplacer l'étiquette de la barre de couleurs de la même manière:

c_ax.yaxis.set_label_position('left')

Et enfin, si vous avez une barre de couleur horizontale et que vous souhaitez déplacer les graduations et les étiquettes vers le haut, vous pouvez utiliser la fonction équivalente sur le xaxis:

c_ax.xaxis.set_label_position('top')
c_ax.xaxis.set_ticks_position('top')
25
tmdavison

J'avais le même problème. Cette situation se produit probablement lorsque vous définissez explicitement les axes de la barre de couleurs. Dans ce cas, vous pouvez facilement spécifier de quel côté de ces axes vous obtenez les graduations et les étiquettes. Par exemple, si vous avez créé une image en utilisant imshow

fig = plt.figure()
ax = plt.subplot(1, 1, 1)
im = ax.imshow(data)

Vous pouvez définir l'axe de la barre de couleurs, dans cet exemple en utilisant inset_axes:

from mpl_toolkits.axes_grid1.inset_locator import inset_axes
cbaxes = inset_axes(ax, width="7%", height="20%", loc=4)

puis ajoutez votre barre de couleur

cb = fig.colorbar(im, cax=cbaxes, ticks=[vmin, vmax], orientation='vertical')

puis contrôler la position des ticks, etc ...

cbaxes.yaxis.tick_left()
0
Paco Lopez Dekker