sha*_*kde 5 python numpy matplotlib scipy enthought
我正在尝试使用matplotlib库在Python中绘制颜色条。绘图效果很好,但是颜色栏不会在颜色栏上显示结束标记。
使用以下命令可以正确绘制颜色条,但我的刻度线范围从-1.6到+1.6(顶部和底部刻度线不存在)。我的数据范围是从-2到+2。
fig.colorbar(surf, shrink=1, aspect=12)
Run Code Online (Sandbox Code Playgroud)
在下图中可以看到:

我尝试使用以下命令:
cbar.set_ticks([-2,-1,0,1,2]);
Run Code Online (Sandbox Code Playgroud)
但这也未能获得正确的结果。
更新:
我尝试使用ticks = [-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()
Run Code Online (Sandbox Code Playgroud)
这将产生以下图:

如图所示,颜色条缺少末端刻度线,即。-2和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)
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()
Run Code Online (Sandbox Code Playgroud)
如果您明确将clim设置为有效,[-2, 2]则自动缩放会出现问题(我猜是浮点相等性测试的问题)。
您应该能够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()
Run Code Online (Sandbox Code Playgroud)
