4

我有一个 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()
4

1 回答 1

4

您可以通过 matplotlib 的任何内置方法指定一个轴对象,然后将其用于您的颜色条,例如:

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()

这将导致类似:

示例代码图

但是,如果您的 imshow-axes 变得非常平坦,这将无济于事(由于aspect="equal",这可能会发生)。

如果您想处理此类情况,您可以

  1. 将图形大小调整为网格的方面,例如

     fig = figure(figsize=grid.shape[1]*1.5/dpi, grid.shape[0]/dpi)
    
  2. 在绘图后读取 ax1 的坐标,然后使用适当转换的坐标创建 ax2,然后将 ax2 用于颜色条。当您调整窗口大小时,这表现不佳,但如果您只是自动将绘图创建为图像文件,则可能会奏效。

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

问候,托尔斯滕

于 2013-01-03T09:22:44.593 回答