繁体   English   中英

matplotlib 修剪刻度标签

[英]matplotlib prune tick labels

我正在使用 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()

修剪

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

ax1.set_xticklabels([])

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

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

你可以尝试使用这个:

import matplotlib.ticker as mticker

ax2.yaxis.set_major_locator(mticker.MaxNLocator(nbins=7, prune='upper'))

我发现上述命令仅适用于 y 轴。

有人知道如何设置 x 轴股票代码的最大限制吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM