如何为 matplotlib 中的所有水平网格线添加垂直刻度线?

How to add vertical tick marks to all horizontal grid lines in matplotlib?

我想知道是否可以在 matplotlib 图形的所有水平网格线上显示 x 刻度(主要和次要)。

我有一个很大的折线图,其中有很多垂直线(见图)。我使用水平网格线,因为它们不会干扰数据。但我不想使用垂直网格线,因为图表已经很忙了。

我想要的是在每条水平网格线上显示主要和次要的垂直刻度线(就好像我已经显示了所有垂直网格线,但在所有没有穿过水平网格线的地方都被擦掉了)。

这可能吗?

这是一个示例图像,需要将垂直刻度添加到每条灰色水平网格线。

没有简单的函数可以为您做到这一点。

一种可能的解决方案是在 xticks 所在的点使用 vlines 绘制垂直线,使用 y ticks 位置作为最大 y 值并减去 y 最小值的小偏移量。一个简单的例子:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

ax.plot([1,2,3], [1,2,3])
ax.set_yticks([1, 2, 2.5])
ax.set_xticks([1, 1.5, 2, 2.5, 3])
ax.grid(axis="y")

yticks = ax.get_yticks()
xticks = ax.get_xticks()

for ytick in yticks:
    for xtick in xticks:
        ax.vlines(xtick, ytick-0.05, ytick, linewidth=0.5)

plt.show()