【发布时间】:2017-03-14 23:23:47
【问题描述】:
我对颜色条有一个令人烦恼的问题,即使经过深入研究,我什至找不到问题。我有一个图,其中我覆盖了一个轮廓和一个 pcolormesh,我想要一个颜色条来指示值。这很好用,除了一件事: The colorbar frame and color are offset
颜色条框架和实际条是偏移的,因此在框架下方有一个白色位,在顶部颜色突出。当框架根据需要与轴对齐时,颜色条会发生偏移。
这是一个模拟我所处情况的工作示例,即带有插图的多个图。
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()
如果选择了“内联”图形后端,则内联显示和保存的 .pdf 中仍然存在问题。是否使用紧密布局会根据条的大小改变偏移的严重程度——与使用 PyQT5 而不是内联图形后端相同。当我在各种组合之间切换时,我以为它已经消失了,但我才意识到它仍然存在。
如有任何意见,我将不胜感激。
正如 ImportanceOfBeingErnest 所建议的那样,我尝试在 figsize 上使用 np.round 并没有改变任何事情。虽然您可以摆弄尺寸以使其看起来不错,但它总是在某一侧或另一侧突出一些。当我将 Spyder 3 上的图形后端从“内联”更改为“QT5”时,无论是否舍入,问题都会变得不那么严重。这张图片Colorbar overlap cases对此进行了总结。请注意,在不四舍五入和 PyQT5 的情况下,问题仍然存在,但没有那么严重。
【问题讨论】:
-
尝试使用
tight_layout(),至少它可以简化颜色条的定位(见last example)。不知道偏移量,但您可以尝试用 thicker line width 屏蔽它(我知道这并不理想)。 -
如需进一步帮助,您需要提供minimal reproducible example。这仅在显示时发生,还是仅在保存时或在两种情况下发生?我确实怀疑是什么原因造成的,但由于我无法重现该问题,因此我无法测试这种怀疑是否合理。
-
因为我不能上传超过 2 个链接才能获得更多声誉:[3]:i.stack.imgur.com/Px5pB.png [4]:i.stack.imgur.com/xO8An.png
标签: matplotlib alignment colorbar