Colorbar не показывает значения при использовании LogNorm()

Я пытаюсь сделать контурный график с уровнями контура, масштабированными по журналу значений. Однако цветовая полоса не показывает достаточно значений рядом с цветами. Вот простой пример.

import numpy as N
import matplotlib as M
import matplotlib.pyplot as PLT

# Set up a simple function to plot 
values = N.empty((10,10))
for xi in range(10):
    for yi in range(10):
        values[xi,yi] = N.exp(xi*yi/10. - 1)

levels = N.logspace(-1, 4, 10)
log_norm = M.colors.LogNorm() 
# Currently not used - linear scaling
linear_norm = M.colors.Normalize()

# Plot the function using the indices as the x and y axes
PLT.contourf(values, norm=log_norm, levels=levels)
PLT.colorbar()

Если вы переключите log_norm на linear_norm в вызове контура, вы увидите, что цветная полоса имеет значения. Конечно, использование linear_norm означает, что цвета масштабируются линейно, а контуры для этой функции распределяются недостаточно хорошо.

Я использую python 2.7.2, расширенную версию, которая поставляется с matplotlib, в Mac OS 10.7.


person Brandt    schedule 08.12.2011    source источник


Ответы (1)


Добавьте формат к вызову PLT.colorbar:

import numpy as N
import matplotlib as M
import matplotlib.pyplot as PLT

# Set up a simple function to plot 
x,y = N.meshgrid(range(10),range(10))
values = N.exp(x*y/10. - 1)

levels = N.logspace(-1, 4, 10)
log_norm = M.colors.LogNorm() 
# Currently not used - linear scaling
linear_norm = M.colors.Normalize()
# Plot the function using the indices as the x and y axes
PLT.contourf(values, norm=log_norm, levels=levels)
PLT.colorbar(format='%.2f')
PLT.show()

введите здесь описание изображения

person unutbu    schedule 08.12.2011
comment
Благодарю вас! Это именно то, что я искал. - person Brandt; 09.12.2011