在matplotlib中将图形拟合到colorbar

时间:2013-01-02 21:33:47

标签: matplotlib

我有一个imshow图表,显示数值的colobar。颜色条比图形大得多。有没有办法对它们进行缩放,使它们的大小相同,最好不影响图形的纵横比?

grid = np.ma.array(grid, mask=np.isnan(grid))
plot.imshow(grid, interpolation='nearest', aspect='equal', vmax = private.vmax, vmin = private.vmin)
plot.minorticks_off()
plot.set_xticks(range(len(placex)))        
plot.set_yticks(range(len(placey)))
plot.set_xticklabels(placex)        
plot.set_yticklabels(placey, rotation = 0)
plot.colorbar()
plot.show()

1 个答案:

答案 0 :(得分:4)

您可以通过matplotlib的任何内置方法指定axis-object,然后将其用于您的colorbar,例如:

import matplotlib.pyplot as plt
import numpy as np

ax2 = plt.subplot2grid((1,6), (0, 5), colspan=1)
ax1 = plt.subplot2grid((1,6), (0, 0), colspan=5)


plt.imshow(np.random.random((10,10)))
plt.colorbar(cax=ax2)

plt.show()

这将导致类似:

Plot of sample code

但是,如果你的imshow-axis变得非常扁平(由于aspect =“相等”,这可能会发生),这无济于事。

如果您想处理此类案件,可以

  1. 将数字大小调整为网格的宽高比,例如

    fig = figure(figsize = grid.shape [1] * 1.5 / dpi,grid.shape [0] / dpi)

  2. 在绘制后读取ax1的坐标,然后使用适当变换的坐标创建ax2,然后使用ax2作为颜色条。当您调整窗口大小时,这种行为不会很好,但如果您只是自动将图形创建为图像文件,则可能会有效。

  3. 如果你需要的是2.我可以为此添加一个例子,但如果你确定这是你想要的,我只会做这项工作。

    问候, 的Thorsten