python - imshow() 子图生成不需要的空白

标签 python python-2.7 matplotlib whitespace imshow

绘制两个(或更多)子图时,图中(所有四个边)内有大片空白区域,如下所示: enter image description here

以下是我用来绘制它的代码。

from pylab import *
from matplotlib import rc, rcParams
import matplotlib.pyplot as plt

for kk in range(57,58):
    fn_i=str(kk)
    image_file_1='RedshiftOutput00'+fn_i+'_Slice_z_RadioPowerDSA.png'
    image_file_2='RedshiftOutput00'+fn_i+'_Slice_z_RadioPowerTRA.png'
    image_file_3='RedshiftOutput00'+fn_i+'_Slice_z_RadioPowerDSA+TRA.png'

    image_1 = plt.imread(image_file_1)
    image_2 = plt.imread(image_file_2)
    image_3 = plt.imread(image_file_3)      

    ax1 = subplot(131)
    plt.imshow(image_1)
    plt.axis('off')  # clear x- and y-axes

    ax2 = subplot(132)
    plt.imshow(image_2)
    plt.axis('off')  # clear x- and y-axes

    ax3 = subplot(133)
    plt.imshow(image_3)
    plt.axis('off')  # clear x- and y-axes

    plt.savefig('RedshiftOutput00'+fn_i+'_all.png')

我还上传了这段代码中使用的 3 张图片,使代码成为一个最小的工作示例

1) https://drive.google.com/file/d/0B6l5iRWTUbHWSTF2R3E1THBGeVk/view?usp=sharing

2) https://drive.google.com/file/d/0B6l5iRWTUbHWaFI4dHAzcWpiOEU/view?usp=sharing

3) https://drive.google.com/file/d/0B6l5iRWTUbHWaG8xclFlcGJNaUk/view?usp=sharing

我们如何去除这个空白区域?我尝试通过修复整个图的大小来尝试,但仍然有空白。

最佳答案

上面 Mel 的评论(使用 plt.tight_layout())在很多情况下都有效,但有时您需要更多的控制。要更精细地操作轴(有用,例如,当您有很多颜色条或-ned 轴时),您可以使用 plt.subplots_adjust() GridSpec 对象。

GridSpec 对象允许您指定各个轴的水平和垂直范围,以及它们的比例宽度和高度以及间距。 subplots_adjust() 在您已经在轴上绘制内容后移动轴。我更喜欢使用第一个选项,但两者都是 documented well .

它也可能有助于欺骗你的身材的大小。如果宽度方向有很多空白,请缩小图形的宽度。

这是我用来设置最近情节的一些示例代码:

gs = gridspec.GridSpec(
        nrows=1, ncols=3, left=0.1, bottom=0.25, right=0.95, top=0.95,
        wspace=0.05, hspace=0., width_ratios=[1, 1, 1])
NII_ax = plt.subplot(gs[0])
SII_ax = plt.subplot(gs[1])
OI_ax = plt.subplot(gs[2])

结果:

GridSpec result

然后,如果您需要颜色条,请将 GridSpec 中的 right 参数调整为 0.85 之类的值,然后使用 fig.add_axes()使用列表 [left_lim, bottom, width, height] 并将其用作 fig.colorbar()

的轴参数

关于python - imshow() 子图生成不需要的空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35038255/

相关文章:

python - "Faking"使用 Matplotlib 的轴刻度和标签

python - 如何绘制具有指数核的泊松过程

python - 在 seaborn 中结合两个热图

python - 检查 python azure 中是否存在 blob

python - Pandas :旋转数据框

python - 如何在Python中将十六进制字符串与空格进行异或

python - 列表索引越界,原因不是很明显 numpy

python - 如何在jinja2中获取带有空格的整个字符串

python - 在 linux 上使用新版本的 python 安装 mysqldb

Python:在线程运行时使用 TKinter 制作 gif 动画