如何移除pandas DataFrame直方图的Y轴刻度标签?
解决pandas.DataFrame.hist隐藏Y轴刻度标签的问题
你使用pandas.DataFrame.hist绘制DataFrame直方图时,希望隐藏Y轴的刻度标签,但之前尝试的方法无效。
你的现有代码:
import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame({ 'length': [1.5, 0.5, 1.2, 0.9, 3], 'width': [0.7, 0.2, 0.15, 0.2, 1.1] }, index=['pig', 'rabbit', 'duck', 'chicken', 'horse']) fig, ax = plt.subplots() ax.axes.get_yaxis().set_visible(False) hist = df.hist(bins=3, ax=ax)
当前生成的直方图中,两个子图的Y轴都显示刻度标签;你期望的效果是两个子图的Y轴无刻度标签(仅保留柱子和X轴)。
问题原因
df.hist()会为DataFrame的每一列自动创建独立的轴对象,即使你提前创建了单个ax,pandas也会调整布局生成对应数量的子轴,导致你提前设置的Y轴隐藏操作被覆盖,无法生效。
解决方案
在绘制完成后,遍历所有生成的轴对象,逐个设置隐藏Y轴刻度标签:
import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame({ 'length': [1.5, 0.5, 1.2, 0.9, 3], 'width': [0.7, 0.2, 0.15, 0.2, 1.1] }, index=['pig', 'rabbit', 'duck', 'chicken', 'horse']) # 绘制直方图,获取所有轴对象(返回的是二维数组,需展平) axes = df.hist(bins=3) # 遍历每个轴,隐藏Y轴刻度标签 for ax in axes.flatten(): # 隐藏Y轴刻度标签 ax.yaxis.set_tick_params(labelleft=False) # 若需同时隐藏Y轴轴线,可添加以下代码 # ax.spines['left'].set_visible(False) plt.show()
这段代码会遍历直方图的所有子轴,通过yaxis.set_tick_params(labelleft=False)隐藏Y轴的刻度标签,完全符合你的期望效果。
内容的提问来源于stack exchange,提问作者fabda01
相关产品推荐
相关产品推荐

