如何为 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()
我想知道是否可以在 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()