如何在Matplotlib的loglog图中用set_yticks消除ytick标签
解决Matplotlib loglog图中y轴刻度/标签无法移除的问题
在loglog图里直接用set_yticks([])失效,核心原因是对数轴的主刻度(major)和副刻度(minor)是分开管理的:普通set_yticks仅处理主刻度,副刻度会依然显示;另外设置轴范围后,Matplotlib可能自动重新生成刻度,覆盖你的手动设置。
两种需求的解决方案:
1. 完全移除y轴的刻度线和标签
如果要彻底去掉y轴所有刻度(线+标签),用tick_params一次性处理主副刻度最稳妥:
ax.tick_params(axis='y', which='both', left=False, labelleft=False)
axis='y':指定针对y轴操作which='both':同时作用于主、副刻度left=False:隐藏刻度线labelleft=False:隐藏刻度标签
2. 保留刻度线,仅移除刻度标签(你的最终需求)
只需要隐藏标签、保留刻度线的话,去掉left=False参数即可:
ax.tick_params(axis='y', which='both', labelleft=False)
应用到你的示例代码
修改后的完整代码如下(优化了重复代码,更简洁):
from matplotlib import pyplot as plt import numpy as np xvals=np.logspace(-1,1,20) yvals1=np.array([0.03950564, 0.03953078, 0.03957078, 0.03962743, 0.03970915, 0.03981691, 0.03994918, 0.04010086, 0.04026356, 0.04042849, 0.04058817, 0.04073742, 0.04087351, 0.04099616, 0.04110702, 0.04120875, 0.04130422, 0.04139636, 0.04148823, 0.04158317]) yvals2=np.array([0.0223383 , 0.02247799, 0.02265306, 0.02287054, 0.02314318, 0.0234758 , 0.02387278, 0.02434108, 0.02489343, 0.02555092, 0.02634133, 0.02729466, 0.02843651, 0.02978005, 0.03131751, 0.03301349, 0.03480207, 0.03658879, 0.03825972, 0.03970347]) fig, axs = plt.subplots(1,3 , figsize = (15,5)) for ax in axs: ax.loglog(xvals,yvals1,c = 'green') ax.loglog(xvals,yvals2,c = 'tab:blue') ax.set_ylim(0.02,0.07) ax.set_xlim(0.1,10) ax.set_xticks([]) # x轴直接清空即可,此处无问题 # 应用需求设置:保留刻度线,移除y轴标签 ax.tick_params(axis='y', which='both', labelleft=False) plt.subplots_adjust(wspace=0.5) plt.show()
补充说明
- 之前尝试的
set_yticklabels([])失效,是因为对数轴的副刻度标签未被处理,tick_params的which='both'能覆盖所有刻度类型。 - 如果需要单独控制主/副刻度,可以把
which参数改成'major'或'minor',比如仅隐藏主刻度标签:ax.tick_params(axis='y', which='major', labelleft=False)
内容的提问来源于stack exchange,提问作者Avery T
相关产品推荐
相关产品推荐

