8 votes

matplotlib contour plot with lognorm - colorbar levels

J'essaie de créer un graphique en courbes de niveau avec des niveaux définis et une norme logarithmique. Voici un exemple :

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LogNorm
delta = 0.025

x = y = np.arange(0, 3.01, delta)
X, Y = np.meshgrid(x, y)
Z1 = plt.mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = plt.mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
Z = 10 * (Z1* Z2)

fig=plt.figure()
ax1 = fig.add_subplot(111)
lvls = np.logspace(-4,0,20)
CF = ax1.contourf(X,Y,Z,
         norm = LogNorm(),
         levels = lvls
        )
CS = ax1.contour(X,Y,Z,
         norm = LogNorm(),
         colors = 'k',
         levels = lvls
        )
cbar = plt.colorbar(CF, ticks=lvls, format='%.4f')
plt.show()

enter image description here Mes questions sont les suivantes :
Les niveaux doivent être écrits dans le format : '1x10^-4', '1.6x10^-4', ... Comment faire, sans spécifier chaque niveau manuellement ?

J'utilise python 2.7.3 avec matplotlib 1.1.1 sur Windows 7.

8voto

Saullo Castro Points 12260

De aquí J'ai trouvé une approche qui semble répondre à votre question :

from matplotlib.ticker import LogFormatter
l_f = LogFormatter(10, labelOnlyBase=False)
cbar = plt.colorbar(CF, ticks=lvls, format=l_f)

qui donnera :

enter image description here

Notez que l'espacement entre les tics est bien en échelle logarithmique...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X