Python Matplotlib:未对齐的颜色条刻度?

Python Matplotlib:未对齐的颜色条刻度?,python,matplotlib,colorbar,Python,Matplotlib,Colorbar,我试图用定制的彩色地图绘制0-69范围内的数据。以下是一个例子: import matplotlib.pyplot as plt import numpy as np from matplotlib.colors import LinearSegmentedColormap colors = [(0.9, 0.9, 0.9), # Value = 0 (0.3, 0.3, 0.3), # Value = 9 (1.0, 0.4, 0.4),

我试图用定制的彩色地图绘制0-69范围内的数据。以下是一个例子:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LinearSegmentedColormap

colors = [(0.9, 0.9, 0.9),    # Value = 0
          (0.3, 0.3, 0.3),    # Value = 9
          (1.0, 0.4, 0.4),    # Value = 10
          (0.4, 0.0, 0.0),    # Value = 19
          (0.0, 0.7, 1.0),    # Value = 20
          (0.0, 0.1, 0.3),    # Value = 29
          (1.0, 1.0, 0.4),    # Value = 30
          (0.4, 0.4, 0.0),    # Value = 39
          (1.0, 0.4, 1.0),    # Value = 40
          (0.4, 0.0, 0.4),    # Value = 49
          (0.4, 1.0, 0.4),    # Value = 50
          (0.0, 0.4, 0.0),    # Value = 59
          (1.0, 0.3, 0.0),    # Value = 60
          (1.0, 0.8, 0.6)]    # Value = 69

# Create the values specified above
max_val = 69
values = [n for n in range(max_val + 1) if n % 10 == 0 or n % 10 == 9]

# Create colormap, first normalise values
values = [v / float(max_val) for v in values]
values_and_colors = [(v, c) for v, c in zip(values, colors)]
cmap = LinearSegmentedColormap.from_list('my_cmap', values_and_colors,
                                         N=max_val + 1)

# Create sample data in range 0-69
data = np.round(np.random.random((20, 20)) * max_val)

ax = plt.imshow(data, cmap=cmap, interpolation='nearest')
cb = plt.colorbar(ticks=range(0, max_val, 10))
plt.show()

我完全搞不懂为什么颜色条刻度不与颜色渐变之间的明显分离对齐(每个渐变有10种颜色)

我尝试将数据和视图间隔从[0,69]设置为[0,70]:

cb.locator.axis.set_view_interval(0, 70)
cb.locator.axis.set_data_interval(0, 70)
cb.update_ticks()
但这似乎没有任何作用


请有人提供建议?

解决我的问题的最简单方法是在可映射的定义中设置
vmax

ax = plt.imshow(data, cmap=cmap, interpolation='nearest', vmax=max_val + 1)
它被设置为
max\u val
,因为Colorbar类在其
初始化中具有调用
mappable.autoscale\u None()
,该调用将
vmax
设置为
data.max()
,即69

我想我只是以错误的方式使用
LinearSegmentedColormap
的受害者。我希望将离散值指定给特定的颜色,但与
LinearSegmentedColormap
关联的颜色条的显示采用连续数据,因此默认设置未指定的限制为
data.min()
data.max()
,即在本例中为0和69