麻烦的传说

时间:2015-04-21 10:47:55

标签: python matplotlib subplot

看看下面的情节:

enter image description here

我使用以下代码生成了它:

        fig, axes = plt.subplots(1,2)
        axes[0].set_title("$K = " + str(K) + " , \sigma = " + str(sigma) + "$")
        heatmap1 = axes[0].imshow(X1, interpolation='none', cmap=plt.get_cmap("seismic"))
        fig.colorbar(heatmap1)
        axes[1].set_title(r"$K = " + str(K) + ", \sigma = " + str(sigma) + "$")
        heatmap2 = axes[1].imshow(X2, interpolation='none', cmap=plt.get_cmap("seismic"))
        fig.colorbar(heatmap2)

        plt.subplots_adjust(left=None, bottom=None, right=None, top=None,
                            wspace=0.4, hspace=.4)
        plt.show()

但是,我想纠正以下事项:

  1. 我希望第二张图与第一张图相同。
  2. 左侧的图例只应出现一次
  3. 图例应与两个子图的y轴大小相同
  4. 有人可以帮我解决这些要求吗?

1 个答案:

答案 0 :(得分:2)

以下是对您的代码的一些编辑,它可以执行您想要的操作(我认为)。

我没有两次调用色彩图,而是将两个图中的色阶限制设置为相同(使用vminvmax)。然后,为了使颜色条与图形具有相同的高度,您需要在保存图形后获取其中一个子图的y位置,并使用它们为颜色条创建单独的轴(否则它们将从,缩小,你的一个子图。)

您可能需要使用subplots_adjust中的值来使事情合适。

import matplotlib.pyplot as plt
import numpy as np

X1=np.random.rand(10,10)
X2=np.random.rand(10,10)
K,sigma=10,1.5

vmin = np.minimum(X1,X2).min()
vmax = np.maximum(X1,X2).max()

fig, axes = plt.subplots(1,2)

axes[0].set_title("$K = " + str(K) + " , \sigma = " + str(sigma) + "$")
heatmap1 = axes[0].imshow(X1, interpolation='none',  cmap=plt.get_cmap("seismic"),
                          vmin=vmin,vmax=vmax)


axes[1].set_title(r"$K = " + str(K) + ", \sigma = " + str(sigma) + "$")
heatmap2 = axes[1].imshow(X2, interpolation='none',   cmap=plt.get_cmap("seismic"),
                          vmin=vmin,vmax=vmax)

plt.subplots_adjust(left=None, bottom=None, right=0.8, top=None,
                    wspace=0.4, hspace=.4)

fig.savefig('test.png')
cpos = [axes[0].get_position().bounds[1],
        axes[0].get_position().bounds[3]]

cax = fig.add_axes([0.9,cpos[0],0.01,cpos[1]])

fig.colorbar(heatmap1,cax=cax)

fig.savefig('test.png')

enter image description here