当我尝试绘制颜色图时,我只想查看 cmap 上的每种颜色及其标签,会出现以下输出:()。理想情况下,颜色图和 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()
要减少或调整 matplotlib 图中轴与图像之间的空间,特别是为了解决颜色图与 Y 轴之间以及颜色图右侧的空白问题,您应该重点控制直接图形和轴边界。
set_xlim
、set_ylim
以及通过 fig.tight_layout()
或 ax.set_position()
进行调整等方法特别有用。
这里有一种修改代码的方法,可以直接解决间距问题:
调整轴限制和宽高比:由于您的目标是显示具有特定颜色和标签且空白空间最小的色彩图,因此正确设置轴限制和宽高比至关重要。
使用
set_position()
:这允许手动调整图形画布中的轴位置,使您可以精确控制图像和轴之间的空间。
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])
方法用于手动调整图形画布内的轴。您可能需要根据您的图形尺寸和所需的布局调整这些值。此方法应显着减少不必要的空白,并提供清晰、紧凑的色彩图显示。