在不更改刻度标签的情况下在 matplotlib 中设置指定的网格线

Set specified grid lines in matplotlib without changing ticklabels

我尝试使用预定义数量的网格线绘制条形图,如下所示。然而,一旦我绘制它,一些 yticklabels(A_2、A_3 等)没有显示(只有 A_1、A_5、A_9、A_13,A_17 所示)。我想保留所有 ytick 标签,但网格线应与 x 轴相同。您有任何解决办法吗?

import matplotlib.pyplot as plt
import numpy as np
mdict={"Column1":["A_"+str(i) for i in range(1,21)],"Value":[i for i in range(1,21)]}
# Create a dataframe 
df=pd.DataFrame(mdict)
# Set plot params
fig, ax = plt.subplots(figsize=(12,8))

ax.barh(df.Column1,df.Value, color="darkgray",edgecolor="black", linewidth=0.5)
ax.set_xlabel("Numbers", fontsize=15)

# ax.set_yticklabels(list(df_cor.Country.values.tolist()), fontsize=15)
major_ticks_top=np.linspace(0,20,6)
minor_ticks_top=np.linspace(0,20,6)
ax.set_xticks(major_ticks_top)
ax.set_yticks(minor_ticks_top)
ax.grid(alpha=0.2,color="black")

plt.show()

我不会明确设置刻度和标签,但会修改 matplotlib 生成的输出:

import matplotlib.pyplot as plt
import pandas as pd
from matplotlib.ticker import MultipleLocator

mdict={"Column1":["A_"+str(i) for i in range(1,21)],"Value":[i for i in range(1,21)]}
df=pd.DataFrame(mdict)

fig, ax = plt.subplots(figsize=(12,8))
ax.barh(df.Column1, df.Value, color="darkgray", edgecolor="black", linewidth=0.5)
ax.set_xlabel("Numbers", fontsize=15)

#set every fourth tick
n=4
ax.xaxis.set_major_locator(MultipleLocator(n))
ax.grid(alpha=0.2,color="black")
#remove unwanted gridlines on the y-axis
ygrd_lines = ax.get_ygridlines()
[grd_line.set_visible(False) for i, grd_line in enumerate(ygrd_lines) if i%n]

plt.show()

示例输出:

使用的方法:
MultipleLocator() 以定义的间隔设置刻度
.get_ygridlines 将网格线作为 Line2D 对象列表返回以供进一步修改