在 matplotlib 图中显示整个次要网格线

Show entire minor gridline in matplotlib figure

我想在不手动调整限制的情况下以全宽显示最上面的次要网格线(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 采用包含 clip_on 的 Line2D args。 设置 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', 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', zorder=3, clip_on=False)
ax.set_ylim(0, 2.25)
ax.set_title('Make clip_on=False', fontsize=16, fontweight='bold')

ax  = axes[2]
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.265)
ax.set_title('Increase ylim to 2.265', fontsize=16, fontweight='bold')

axes[3].axis('off')