2013-07-30 3 views
5

Я пытаюсь сделать контурный график с определенными уровнями и нормой журнала. Ниже приведен пример:matplotlib контурный график с уровнем lognorm - colorbar

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 Мои вопросы:
уровни должны быть записаны в формате: '1x10^-4', '1.6x10^-4', ... Как я сделайте это, не указывая каждый уровень вручную?

Я использую Python 2.7.3 с Matplotlib 1.1.1 на ОС Windows 7.

+0

Попробуйте найти [здесь] (http://stackoverflow.com/questions/5748076/python-matplotlib-contour-plot-logarithmic-color-scale) или [здесь] (http: //matplotlib.1069221.n5. nabble.com/logarithmic-scale-of-colorbar-with-ticks-and-custom-labels-td21663.html). – wflynny

+0

в зависимости от того, как вы хотите, чтобы уровни были помечены, отметьте [этот ответ] (http://stackoverflow.com/questions/16529038/matplotlib-tick-axis-notation-with-superscript/16530841#16530841) – Schorsch

+0

Спасибо за ответы. Это решило бы вопрос 1. У вас также есть идея для вопроса 2? – user2145054

ответ

7

От here я нашел подход, который, кажется, подходит ваш вопрос:

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

который даст:

enter image description here

отмечают, что расстояние между клещами действительно в логарифмическом масштабе ...

Смежные вопросы