Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 matplotlib子地块排列_Python 2.7_Matplotlib - Fatal编程技术网

Python 2.7 matplotlib子地块排列

Python 2.7 matplotlib子地块排列,python-2.7,matplotlib,Python 2.7,Matplotlib,我对调整子地块之间的间距有一些问题。虽然有很多关于类似问题的问题,但我找不到合适的解决方案 下面是一个简单的示例,其中一个图中有一个随机值图和两个带色条的图像: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.axes_grid1 import make_axes_locatable fig, (ax1, ax2, ax3) = plt.subplots(figsize=(5, 8), nrows=3,

我对调整子地块之间的间距有一些问题。虽然有很多关于类似问题的问题,但我找不到合适的解决方案

下面是一个简单的示例,其中一个图中有一个随机值图和两个带色条的图像:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable

fig, (ax1, ax2, ax3) = plt.subplots(figsize=(5, 8), nrows=3, ncols=1)

ax1.plot(np.random.rand(100))
ax1.set_ylabel('y-label')
ax1.set_xlabel('x-label')

im2 = ax2.imshow(np.random.random(size=(50, 100)))
ax2.axes.get_xaxis().set_ticks([])
ax2.axes.get_yaxis().set_ticks([])
divider2 = make_axes_locatable(ax2)
cax2 = divider2.append_axes("right", "5%", pad="3%")
cbar2 = plt.colorbar(im2, cax=cax2, orientation='vertical')

im3 = ax3.imshow(np.random.random(size=(50, 100)))
ax3.axes.get_xaxis().set_ticks([])
ax3.axes.get_yaxis().set_ticks([])
divider3 = make_axes_locatable(ax3)
cax3 = divider3.append_axes("right", "5%", pad="3%")
cbar3 = plt.colorbar(im3, cax=cax3, orientation='vertical')

plt.tight_layout()

我怎样才能:

  • 减少两个较低图像之间的间距,类似于绘图和第一个图像之间的距离
  • 将两个图像向左移动,使其与绘图的y标签对齐

您可以使用gridspec布局来放置子地块。然后,棘手的一点是获得正确的参数。这需要一点测试

这里的想法是创建一个包含4行2列的gridspec。下两个子地块将跨越两列,而上两个子地块仅跨越最后一列。还将有一个空行来说明上部绘图的x标签所需的额外空间

当然,您不应该调用
tight_layout
,因为这会再次扰乱所有精心设置的参数

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
from matplotlib.gridspec import GridSpec

fig = plt.figure(figsize=(5, 8))

gs = GridSpec(nrows=4, ncols=2,height_ratios=[1.2, .1, .8, .8],
                               width_ratios=[.1, 1], 
                               hspace=0.05, wspace=0.1,
                               left=0.05, right=0.9, 
                               bottom=0.02, top=0.98)

ax1=fig.add_subplot(gs[0,1])
ax2=fig.add_subplot(gs[2,:])
ax3=fig.add_subplot(gs[3,:])

ax1.plot(np.random.rand(100))
ax1.set_ylabel('y-label')
ax1.set_xlabel('x-label')

im2 = ax2.imshow(np.random.random(size=(50, 100)))
ax2.axes.get_xaxis().set_ticks([])
ax2.axes.get_yaxis().set_ticks([])
divider2 = make_axes_locatable(ax2)
cax2 = divider2.append_axes("right", "5%", pad="3%")
cbar2 = plt.colorbar(im2, cax=cax2, orientation='vertical')

im3 = ax3.imshow(np.random.random(size=(50, 100)))
ax3.axes.get_xaxis().set_ticks([])
ax3.axes.get_yaxis().set_ticks([])
divider3 = make_axes_locatable(ax3)
cax3 = divider3.append_axes("right", "5%", pad="3%")
cbar3 = plt.colorbar(im3, cax=cax3, orientation='vertical')


plt.show()