我有一个令人困扰的问题,与颜色条有关,即使经过了大量的研究,我也找不到相关问题。我有一个绘图,我在上面叠加了等高线和pcolormesh,并且我想要一个颜色条来指示值。这很好地工作,除了一件事:
颜色条框架和颜色偏移。
颜色条框架和实际的条之间存在偏移,因此在下面有一个白色的部分在框架中,而在上面颜色则突出。虽然框架与轴对齐,但颜色条却偏移了。
以下是一个可以模拟我所遇到情况的工作示例,即具有插图的多个绘图。
如果选择“Inline”图形后端,则问题会在内联显示和保存的.pdf中持续存在。使用紧密布局或不使用取决于柱状图的大小,使用PyQT5而不是内联图形后端也是如此。我原以为在更改各种组合时已经解决了它,但我刚意识到它仍然存在。
我将感激任何建议。
颜色条框架和实际的条之间存在偏移,因此在下面有一个白色的部分在框架中,而在上面颜色则突出。虽然框架与轴对齐,但颜色条却偏移了。
以下是一个可以模拟我所遇到情况的工作示例,即具有插图的多个绘图。
import matplotlib.gridspec as gridspec
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
figheight = 4.2 - (2.1 - 49.519 / 25.4)
matplotlib.rcParams['figure.figsize'] = (5.25, figheight)
matplotlib.rcParams['axes.linewidth'] = 0.5
fig = plt.figure()
grid = gridspec.GridSpec(2, 1, height_ratios=[49.519 / 25.4 / figheight, 2.1 / figheight])
ax0 = plt.subplot(grid[0, 0])
ax1 = plt.subplot(grid[1, 0])
plt.tight_layout()
###############################################################################################
#
# Define position of inset
#
###############################################################################################
ax1.axis('off')
pos1 = ax1.get_position()
pos2 = matplotlib.transforms.Bbox([[pos1.x0, pos1.y0],
[.8*pos1.x1,
0.8*pos1.height + pos1.y0]])
left, bottom, width, height = [pos2.x0, pos2.y0, pos2.width, pos2.height]
ax2 = fig.add_axes([left, bottom, width, height])
###############################################################################################
#
# ax2 (inset) plot
#
###############################################################################################
pos2 = ax2.get_position()
ax2.axis('on')
x = np.linspace(0,5)
z = (np.outer(np.sin(x), np.cos(x))+1)*0.5
im = ax2.pcolormesh(z)
c = ax2.contour(z, linewidths=7)
ax2pos = ax2.get_position()
cbar_axis = fig.add_axes([ax2pos.x1+0.05,ax2pos.y0, .02, ax2pos.height])
colorbar = fig.colorbar(im, ax = ax2,
cax = cbar_axis, ticks = [0.1, .5, .9])
colorbar.outline.set_visible(True)
plot = 'Minimal.pdf'
fig.savefig(plot)
plt.close()
如果选择“Inline”图形后端,则问题会在内联显示和保存的.pdf中持续存在。使用紧密布局或不使用取决于柱状图的大小,使用PyQT5而不是内联图形后端也是如此。我原以为在更改各种组合时已经解决了它,但我刚意识到它仍然存在。
我将感激任何建议。
根据ImportanceOfBeingErnest的建议,我尝试在figsize上使用np.round,但这并没有改变什么。虽然你可以调整大小使其看起来还不错,但它总是在某一侧或另一侧超出一定量。当我将Spyder 3的图形后端从“Inline”更改为“QT5”时,无论是否取整,问题都会变得不那么严重。这个问题的摘要在这张图片中Colorbar overlap cases。请注意,对于未取整和PyQT5,问题仍然存在,但不如之前严重。
tight_layout()
,至少它可以简化色条的定位(参见最后一个例子)。不确定偏移量,但您可以尝试使用 更粗的线宽 来掩盖它(我知道这不是理想的解决方案)。 - berna1111