如何调整 matplotlib 图中轴和图像之间的空间?

问题描述 投票:0回答:1

当我尝试绘制颜色图时,我只想查看 cmap 上的每种颜色及其标签,会出现以下输出:(https://i.stack.imgur.com/7ipnt.png)。理想情况下,颜色图和 Y 轴之间以及颜色图右侧不应有任何空白

我使用的代码如下:

cmap = np.array([[255, 0, 0],
                [0, 77, 120],
                [255, 120, 0]])
titles = ['Title 1', 'Title 2', 'Title 3']
im = np.zeros((50, 50 * len(cmap), 3), dtype=np.uint8)
for k in range(len(cmap)):
    tmp = cmap[k].reshape(1, 1, 3)
    tmp = np.tile(tmp, (50, 50, 1))
    im[:, k * 50:(k + 1) * 50, :] = tmp
titles = [title.replace(' ', '_') for title in titles]
im = np.rot90(im)
plt.gca().set_xlim([0,5])
plt.tick_params(axis='both', width=1)
plt.imshow(im)
plt.axis('equal')
plt.ylim(0, im.shape[0])
plt.yticks(np.arange(15, im.shape[0], 50), labels=titles[::-1])
plt.xticks([])
plt.tick_params(axis='y', length=0)
plt.tick_params(axis='both', labelsize=15)
plt.show()
python matplotlib
1个回答
0
投票

要减少或调整 matplotlib 图中轴与图像之间的空间,特别是为了解决颜色图与 Y 轴之间以及颜色图右侧的空白问题,您应该重点控制直接图形和轴边界。

set_xlim
set_ylim
以及通过
fig.tight_layout()
ax.set_position()
进行调整等方法特别有用。

这里有一种修改代码的方法,可以直接解决间距问题:

  1. 调整轴限制和宽高比:由于您的目标是显示具有特定颜色和标签且空白空间最小的色彩图,因此正确设置轴限制和宽高比至关重要。

  2. 使用

    set_position()
    :这允许手动调整图形画布中的轴位置,使您可以精确控制图像和轴之间的空间。

  3. tight_layout
    subplots_adjust
    :这些方法可以帮助优化轴周围的间距,但在有精确间距要求的场景中,使用
    set_position
    手动调整往往更有效。

这是包含这些建议的代码的调整版本:

import numpy as np
import matplotlib.pyplot as plt

# Your colormap and titles
cmap = np.array([[255, 0, 0], [0, 77, 120], [255, 120, 0]])
titles = ['Title 1', 'Title 2', 'Title 3']

# Create the image based on the colors
im = np.zeros((50, 50 * len(cmap), 3), dtype=np.uint8)
for k in range(len(cmap)):
    tmp = cmap[k].reshape(1, 1, 3)
    tmp = np.tile(tmp, (50, 50, 1))
    im[:, k * 50:(k + 1) * 50, :] = tmp
im = np.rot90(im)

# Create plot
plt.imshow(im)

# Adjusting the limits to fit the image exactly
plt.xlim(-0.5, len(cmap) * 50 - 0.5)
plt.ylim(-0.5, 49.5)

# Customizing ticks to match your titles
plt.yticks(np.arange(25, len(cmap) * 50, 50), labels=titles[::-1])
plt.xticks([])

# Hide the right and top spines
plt.gca().spines['right'].set_visible(False)
plt.gca().spines['top'].set_visible(False)

# Manually adjusting the axes position
# left, bottom, width, height (range 0 to 1)
plt.gca().set_position([0.05, 0.05, 0.9, 0.9])

# Removing tick parameters if not necessary
plt.tick_params(axis='y', length=0)
plt.tick_params(axis='x', which='both', bottom=False, top=False, labelbottom=False)

plt.show()

在此调整后的代码中:

  • plt.xlim(-0.5, len(cmap) * 50 - 0.5)
    plt.ylim(-0.5, 49.5)
    直接控制图像的显示限制,确保其完全适合轴边界。
  • set_position([left, bottom, width, height])
    方法用于手动调整图形画布内的轴。您可能需要根据您的图形尺寸和所需的布局调整这些值。
  • 调整刻度和书脊以确保专注于色彩图的干净外观。

此方法应显着减少不必要的空白,并提供清晰、紧凑的色彩图显示。

© www.soinside.com 2019 - 2024. All rights reserved.