使用Matplotlib子图时无法查看x轴刻度(已调用Axes.set_xticks)
解决Matplotlib共享x轴后上方子图x轴刻度不显示的问题
当使用sharex="all"创建共享x轴的子图时,Matplotlib默认会隐藏上方子图的x轴刻度(包括刻度线和标签),仅保留最下方子图的x轴显示,这就是你设置set_xticks却看不到刻度的核心原因。
修复方案
手动强制开启第一个子图的x轴刻度显示:在设置
set_xticks后添加一行代码,控制x轴刻度和标签的可见性:ax_cur.tick_params(axis='x', labelbottom=True, bottom=True)其中
labelbottom=True确保刻度标签显示,bottom=True确保刻度线显示(部分样式下刻度线默认隐藏,加上该参数更稳妥)。顺便修复代码里的图例问题:你的
ax_cur.legend()未传入标签,会触发空图例报错,建议在绘图时添加label参数:ax_cur.plot(x_lst, y_lst, color='green', linestyle="-", label='RTF') ax_cur.legend()
完整修复后的代码
import matplotlib.axes import matplotlib.pyplot as plt y_lst=[100,200,150,500] x_lst=[2,4,8,16] plt.style.use("bmh") # "ggplot" "seaborn-v0_8-poster" fig, ax = plt.subplots(2, 1, sharex="all", squeeze=False, figsize=(15, 6)) ax_cur: matplotlib.axes.Axes = ax[0][0] ax_bottom = ax[1][0] plt.suptitle("Performance", weight='bold', fontsize=18, ha="center", va="top") ax_cur.set_title("title", fontsize=14, ha="center", va="top") ax_cur.plot(x_lst, y_lst, color='green', linestyle="-", label='RTF') ax_cur.legend() ax_cur.set_ylabel('RTF [calls/sec]') ax_cur.set_xticks(x_lst) # 开启上方子图x轴刻度显示 ax_cur.tick_params(axis='x', labelbottom=True, bottom=True) # 下方子图示例内容,验证x轴共享特性 ax_bottom.plot(x_lst, [val//2 for val in y_lst], color='blue', linestyle="--") ax_bottom.set_ylabel('Another Metric') ax_bottom.set_xlabel('X Value') plt.grid() plt.show()
修改后,第一个子图的x轴刻度会正常显示,同时保留x轴共享的特性——拖动缩放时两个子图的x轴范围会同步变化。
内容的提问来源于stack exchange,提问作者JIST
相关产品推荐
相关产品推荐

