在 matplotlib 中以 yaxis 单位测量网格宽度

Measure width of grid in yaxis units in matplotlib

有没有什么方法可以根据 y 轴中使用的单位测量网格线的宽度?

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()

感谢 ,这是我对问题的看法。我必须更改设置线宽的行,以便它使用变量 lw,因为我无法弄清楚如何从 ax 对象获取线宽。

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')
lw = 5
ax.grid(linewidth=lw, axis='y', which='both')
ax.set_ylim(0, 2.25)

def get_DaUPP(fig, ax):
    # Points per inch
    PPI = 72

    # Display units per inch
    figsizeDispUnits = np.diff(fig.transFigure.transform([(0, 0), (1, 1)]), 1, 0)

    DiUPI = np.divide(figsizeDispUnits, fig.get_size_inches())

    # Display units per data unit
    axDispUnits = np.diff(ax.transData.transform([(ax.get_xlim()[0], ax.get_ylim()[0]), (ax.get_xlim()[1], ax.get_xlim()[1])]), 1, 0)
    axDataUnits = np.diff([(ax.get_xlim()[0], ax.get_ylim()[0]), (ax.get_xlim()[1], ax.get_xlim()[1])], 1, 0)
    DiUPDaU = np.divide(axDispUnits, axDataUnits)

    # Data units per inch
    DaUPI = np.divide(DiUPI, DiUPDaU)

    # Data unit per point
    DaUPP = DaUPI / PPI

    return DaUPP.flatten()

# Width of grid in yaxis units
lw * get_DaUPP(fig, ax)[1]