Python matplotlib contour tracé logarithmique échelle de couleurs
J'ai des problèmes avec le contour de la parcelle à l'aide logarithmique de la couleur de mise à l'échelle. Je tiens à spécifier les niveaux à la main. Matplotlib, cependant, tire la barre de couleur dans une façon étrange, les étiquettes ne sont pas bien placés et une seule couleur s'affiche. L'idée est basée sur
http://adversus.110mb.com/?cat=8
Est qu'il ya quelqu'un qui peut m'aider?
J'utilise la dernière git-référentiel matplotlib version v1.1.0 (2011-04-21)
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.mlab import bivariate_normal
from matplotlib.colors import LogNorm
from matplotlib.backends.backend_pdf import PdfPages
delta = 0.5
x = np.arange(-3.0, 4.001, delta)
y = np.arange(-4.0, 3.001, delta)
X, Y = np.meshgrid(x, y)
Z = bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
#axim = ax.imshow(Z, norm = LogNorm())
axim = ax.contourf(X,Y,Z,levels=[1e0,1e-1,1e-2,1e-3],cmap=plt.cm.jet,norm = LogNorm())
cb = fig.colorbar(axim)
pp = PdfPages('fig.pdf')
pp.savefig()
pp.close()
plt.show()
Merci beaucoup pour votre aide! Il fonctionne parfaitement, comme vous l'avez suggéré...
Cependant, j'ai une autre question: Pourquoi ne matplotlib me permet pas de sélectionner le nombre de lignes de niveaux dans le mode logarithmique:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.mlab import bivariate_normal
from matplotlib.colors import LogNorm
from matplotlib.backends.backend_pdf import PdfPages
delta = 0.5
x = np.arange(-3.0, 4.001, delta)
y = np.arange(-4.0, 3.001, delta)
X, Y = np.meshgrid(x, y)
Z = bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
#axim = ax.imshow(Z, norm = LogNorm())
#axim = ax.contourf(X,Y,Z,levels=[1e-3,1e-2,1e-1,1e0],cmap=plt.cm.jet,norm = LogNorm())
axim = ax.contourf(X,Y,Z,20,cmap=plt.cm.jet,norm = LogNorm())
cb = fig.colorbar(axim)
pp = PdfPages('fig.pdf')
pp.savefig()
pp.close()
plt.show()
http://i.stack.imgur.com/VeVFQ.png
C'était mon premier problème...
OriginalL'auteur 7asd23hasd | 2011-04-21
Vous devez vous connecter pour publier un commentaire.
Il est donc facilement résolus, votre commande de niveaux signifie que le niveau le plus bas pénètre dernier et, par conséquent, tout couvert!
Essayez:
au lieu de cela et vous devriez obtenir le résultat souhaité.
Il semble que l'espacement sur le LogNorm paramètre est défini sur la base de 10 dans les niveaux - que les données ne descend ~1e-8 en fin de compte vous vous retrouvez avec ~8 niveaux. Vous pouvez contourner ce problème en modifiant la base de vous-même. E. g.
lev2 = np.arange(np.floor(np.log2(Z.min())-1), np.ceil(np.log2(Z.max())+1)
suivie parlevs = np.power(2, lev_exp)
vous donnera la base de 2 espacés de niveaux que vous pouvez ensuite passer dans lelevels
argument. Mais pour obtenir exactement, disons de 20 niveaux, vous devez utiliser un non-standard de base.Chers mutzmatron, Merci pour enquêter sur cette! Donc, il est probablement plus facile de simplement fournir une liste de niveaux qui je veux... Donc, je considère à la fois les questions comme résolu!
OriginalL'auteur jmetz
Il ressemble
levels
prévoit l'augmentation des valeurs. Essayez de les changer:levels=[1e-3, 1e-2, 1e-1, 1e0]
et voir si cela résout votre problème.OriginalL'auteur Paul