gpt4 book ai didi

python - Matplotlib imshow() 问题 : title on top of top xlabels, 和 ylabels 未在 pdf 中对齐

转载 作者:太空宇宙 更新时间:2023-11-04 04:53:10 25 4
gpt4 key购买 nike

我在使用 matplotlib 中的 imshow() 时遇到了一些问题,特别是从它创建 pdf 时。

我正在处理一个 500x500 矩阵,对于这个问题,它只是随机值:

np.random.seed(1)
arr = np.array(np.random.random((500, 500)))

行和列都标有不同的名称,但为了这个问题,让我们将它们简单化:

labels = ["Big_Label" if x % 2 == 0 else "Bigger_Big_Label" for x in range(500)]  

所以,我有以下代码来绘制该矩阵:

plt.rc('figure', figsize=(5,5), dpi=500)
fig = plt.figure()
ax = fig.add_subplot(111)
im = ax.imshow(arr)

# defining the same labels for rows and columns
ax.set_xticklabels([''] + labels)
ax.set_yticklabels([''] + labels)
# showing the labels for all the ticks
ax.xaxis.set_major_locator(ticker.MultipleLocator(1))
ax.yaxis.set_major_locator(ticker.MultipleLocator(1))
# personalising the ticks. In particular, labels on top
ax.tick_params(axis='both', which='both', labelsize=0.5, length=0)
ax.tick_params(axis='x',which='both', labelbottom='off', labeltop='on')
ax.tick_params(axis='both', pad=1)
# vertical labels
for label in im.axes.xaxis.get_ticklabels():
label.set_rotation(90)

plt.colorbar(im)
plt.title("Just a Big Title With Words")

# Removing outer lines because they hide part of the lines/columns
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['bottom'].set_visible(False)
ax.spines['left'].set_visible(False)

plt.savefig("fig.pdf")
plt.show()

第一个问题是标题,因为它位于 xlabels 之上:

enter image description here

第二个问题是,当缩放以查看 ylabels 和 xlabels 时,它们没有对齐。关于左边的标签,当我专门编码时,它们和绘图之间有不同的空间 ax.tick_params(axis='both', pad=1);如果我在 IDE 或终端中执行此 python 代码,则不会发生此问题(它们都接近情节)。所以我猜想将此图像转换为 pdf 时发生了什么事?关于这两个标签,您可以看到它们没有与实际的行和列对齐;例如,顶部的第二个标签位于蓝色和橙色方 block 的中间,此时它应该与橙色方 block 的中间对齐:

enter image description here

最后,我尝试在 plt.savefig() 之前调用 fig.autofmt_xdate(),但结果更糟,因为顶部标签完全未对齐:

enter image description here

你能帮我解决这个问题吗?我知道你必须放大才能看到标签,但对于我拥有的真实矩阵来说,这是必要的。我还告知我正在使用 matplotlib 1.5;由于与其他工具的兼容性问题,我无法使用 2.x

最佳答案

有一个自动移动标题的 PR。应包含在 v2.2 中(2 月时间范围)https://github.com/matplotlib/matplotlib/pull/9498 ,另一个用于标题填充 https://github.com/matplotlib/matplotlib/pull/9816 .所以我们正在努力。

至于您在 PDF 中的标签未对齐,如果 labelsize 小于 1.0,则看起来标签对齐存在错误,所以不要这样做:https://github.com/matplotlib/matplotlib/issues/9963这是一个错误,但我想是一个低优先级的错误。

关于python - Matplotlib imshow() 问题 : title on top of top xlabels, 和 ylabels 未在 pdf 中对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47718341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com