我正在使用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)
Run Code Online (Sandbox Code Playgroud)
哪个工作正常.但是,我想摆脱每个子图的顶部和底部刻度标签.为此,我使用
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'))
Run Code Online (Sandbox Code Playgroud)
在许多情况下工作正常.然而,在一些图中,要修剪的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.) …Run Code Online (Sandbox Code Playgroud)