gpt4 book ai didi

python - matplotlib 修剪刻度标签

转载 作者:太空狗 更新时间:2023-10-30 00:14:23 26 4
gpt4 key购买 nike

我正在使用 GridSpec 绘制两个图,一个在另一个下方,中间没有间隙

gs = gridspec.GridSpec(3, 1)
gs.update(hspace=0., wspace=0.)
ax1 = plt.subplot(gs[0:2, 0])
ax2 = plt.subplot(gs[2, 0], sharex=ax1)

效果很好。但是,我想去掉每个子图的顶部和底部刻度标签。为此,我使用

nbins = len(ax1.get_yticklabels())
ax1.yaxis.set_major_locator(MaxNLocator(nbins=nbins, prune='both'))
nbins = len(ax2.get_yticklabels())
ax2.yaxis.set_major_locator(MaxNLocator(nbins=nbins, prune='both'))

在很多情况下效果很好。然而,在某些图中,要修剪的 4 个标签中的一个或多个仍然存在。我看着例如ax1.get_ylim() 并注意到,例如上限不是 10(正如图中所示),它实际上是 10.000000000000002,我怀疑这是它没有被修剪的原因。这是怎么发生的,我怎样才能摆脱它?

这是一个例子:注意图中的 y 轴是倒转的,没有标签被修剪,尽管它应该被修剪。另请注意,由于某种原因,最低的 y 标签设置为负位置,我没有看到。 y 刻度位置显示在图中文本中的轴坐标中。下图中,10.6处的标签不应该出现!

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
from matplotlib.ticker import MaxNLocator
import numpy as np

x1 = 1
y1 = 10.53839
err1 = 0.00865
x2 = 2
y2 = 9.43045
err2 = 0.00658

plt.clf()
fig = plt.figure(figsize=(6, 6))
gs = gridspec.GridSpec(3, 1)
gs.update(hspace=0., wspace=0.)
ax1 = plt.subplot(gs[0:2, 0])

ax1.errorbar(x1, y1, yerr=err1)
ax1.errorbar(x2, y2, yerr=err2)

ax1.invert_yaxis()

plt.setp(ax1.get_xticklabels(), visible=False) # Remove x-labels between the plots
plt.xlim(0, 3)

ax2 = plt.subplot(gs[2, 0], sharex=ax1)

nbins = len(ax1.get_yticklabels())
ax1.yaxis.set_major_locator(MaxNLocator(nbins=8, prune='both'))
nbins = len(ax2.get_yticklabels())
ax2.yaxis.set_major_locator(MaxNLocator(nbins=6, prune='both'))

plt.savefig('prune.png')
plt.close()

prune

最佳答案

您是否正在查看上图 x 轴上最左侧的标签?如果是这样,这应该可以解决问题:

ax1.set_xticklabels([])

编辑:如果您使用 sharex,则必须使用它,否则两个轴上的刻度标签都会被删除。

plt.setp(ax1.get_xticklabels(), visible=False)

关于python - matplotlib 修剪刻度标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27910125/

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