2013-07-26 215 views
3

我想绘制一个使用matplotlib库的Python中的颜色条。情节运作良好,但颜色栏不会在颜色栏上显示结束刻度。颜色条中的末尾刻度 - 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

正如所见,彩条没有结束蜱,即-2和2

+0

你记得在'set_ticks'之后调用'plt.draw()'吗?大多数功能不会自动触发重新绘制。 – 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

调用plt.colorbar时,你应该能够设置ticks参数:

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