2013-07-26 2 views
3

Я пытаюсь построить цветную панель в Python, используя библиотеки matplotlib. Сюжет хорошо работает, но цветная полоска не показывает концевые тики на цветовой полосе.End ticks in colorbar - matplotlib

Использование следующей команды приводит к правильной цветовой шкале, но у меня есть только галочки от -1,6 до +1,6 (верхние и нижние тики отсутствуют). Диапазон моих данных от -2 до +2.

fig.colorbar(surf, shrink=1, aspect=12) 

Это видно на следующем рисунке:

colorbar

Я попытался с помощью команды:

cbar.set_ticks([-2,-1,0,1,2]); 

Но это также не удалось получить правильный результат.

UPDATE:

Я попытался с помощью клещей = [- 2,0,2] параметр, но это не работает, как хорошо. Это фрагмент моего черчения кода:

from mpl_toolkits.mplot3d import Axes3D 
from matplotlib import cm 
from matplotlib.ticker import LinearLocator, FormatStrFormatter 
import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure() 
ax = fig.gca(projection='3d') 
CHI = np.linspace(-45, 45, 35); 
M = np.linspace(0, 1, 35) 
CHI, M = np.meshgrid(CHI, M) 
R = 2*M*np.sin( 2 * np.deg2rad(CHI)) 
surf = ax.plot_surface(CHI, M, R, rstride=1, cstride=1, cmap=cm.hsv,linewidth=0, antialiased=False) 
ax.set_xlim(-45,45) 
cbar = plt.colorbar(surf, shrink=1, aspect=12, ticks=[-2,-1,0,1,2]) 
plt.show() 

Это дает следующий сюжет: PLot wrong bar

Как видно, Colorbar не хватает конца клещей, а именно. -2 и 2

+0

Вы забыли называть 'plt.draw()' после 'set_ticks'? Большинство функций автоматически не запускают повторные розыгрыши. – tacaswell

+0

@unutbu - обновленный вопрос – shaunakde

ответ

3
from mpl_toolkits.mplot3d import Axes3D 
from matplotlib import cm 
from matplotlib.ticker import LinearLocator, FormatStrFormatter 
import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure() 
ax = fig.gca(projection='3d') 
CHI = np.linspace(-45, 45, 35); 
M = np.linspace(0, 1, 35) 
CHI, M = np.meshgrid(CHI, M) 
R = 2*M*np.sin( 2 * np.deg2rad(CHI)) 
surf = ax.plot_surface(CHI, M, R, rstride=1, cstride=1, cmap=cm.hsv,linewidth=0, antialiased=False) 
surf.set_clim([-2, 2]) # <- this is the important line 
ax.set_xlim(-45,45) 
cbar = plt.colorbar(surf, shrink=1, aspect=12, ticks=[-2,-1,0,1,2]) 
plt.show() 

Что-то не так с автоматическим масштабированием (я думаю вопросы с проверками равенства с плавающей точкой), если вы явно установили клик на [-2, 2], он работает.

+0

Большое вам спасибо. Для решения и для объяснения вероятной причины. – shaunakde

+0

@eternalDreamer Не могли бы вы представить это как сообщение об ошибке github? – tacaswell

+0

сделано - https://github.com/matplotlib/matplotlib/issues/2258 – shaunakde

3

Вы должны быть в состоянии установить параметр ticks при вызове plt.colorbar:

import matplotlib.pyplot as plt 
import numpy as np 

fig, ax = plt.subplots() 
cmap = plt.get_cmap('jet') 
data = np.random.randint(-2,3, size=(10,10)) 
im = ax.imshow(data, interpolation='nearest', cmap=cmap) 
cbar = plt.colorbar(im, ticks=[-2,-1,0,1,2]) 
plt.show() 

enter image description here

+0

Это не работает для меня. Даже если я использую это: 'cbar = plt.colorbar (surf, shrink = 1, aspect = 12, ticks = [- 2, -1,0,1,2])' верх и низ большинство ярлыков не отображается. (См. Обновленный вопрос) – shaunakde

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