如何解决在 matplotlib 图中显示整个次要网格线
我想在不手动调整限制的情况下以全宽显示最上面的小网格线(2.25)。我怎样才能做到这一点?
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
t = np.arange(0.0,2.0,0.01)
s = 1 + np.sin(2 * np.pi * t)
fig,ax = plt.subplots(constrained_layout=True)
ax.yaxis.set_tick_params(which='minor',width=5)
ax.plot(t,s)
ax.yaxis.set_major_locator(mpl.ticker.MultipleLocator(0.50))
ax.yaxis.set_minor_locator(mpl.ticker.MultipleLocator(0.25))
ax.grid(linewidth=5,axis='y',which='both')
ax.set_ylim(0,2.25)
plt.show()
解决方法
在 matplotlib 中调整边缘网格线的可见性
有几种方法可以实现您的需求。我认为最好的方法是隐藏顶部和右侧的刺。或者, ax.grid 采用 Line2D args,其中包括 clip_on。 设置clip_on=False 的预期效果是使斧头框不剪断线 - 但它确实导致顶部脊椎穿过网格线(在我看来这不是很有吸引力)。最后,正如您所提到的,您可以略微增加 y lim(至 2.26 或 2.27),这也会使顶部网格线更加明显。
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
t = np.arange(0.0,2.0,0.01)
s = 1 + np.sin(2 * np.pi * t)
fig,axes = plt.subplots(nrows=2,ncols=2,figsize=(15,12))
axes = axes.flatten()
ax = axes[0]
ax.yaxis.set_tick_params(which='minor',width=5)
ax.plot(t,s)
ax.yaxis.set_major_locator(mpl.ticker.MultipleLocator(0.50))
ax.yaxis.set_minor_locator(mpl.ticker.MultipleLocator(0.25))
ax.grid(linewidth=5,axis='y',which='both',clip_on=False)
[ax.spines[s].set_visible(False) for s in ['top','right']]
ax.set_ylim(0,2.25)
ax.set_title('Hide top/right spines',fontsize=16,fontweight='bold')
ax = axes[1]
ax.yaxis.set_tick_params(which='minor',zorder=3,clip_on=False)
ax.set_ylim(0,2.25)
ax.set_title('Make clip_on=False',fontweight='bold')
ax = axes[2]
ax.yaxis.set_tick_params(which='minor',which='both')
ax.set_ylim(0,2.265)
ax.set_title('Increase ylim to 2.265',fontweight='bold')
axes[3].axis('off')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。