如何为各子图设置非统一刻度?实现2020/2021子图自由缩放
解决子图独立缩放刻度的问题
假设你使用的是Matplotlib绘图库,以下几种方法可以让2020、2021年的子图独立调整y轴刻度范围,且不影响2022年的子图:
创建子图时关闭轴共享
如果是通过subplots创建多子图,默认可能开启了轴共享(sharey=True),导致所有子图刻度统一。创建时显式关闭共享即可:import matplotlib.pyplot as plt # 3行1列的子图,x、y轴都不共享 fig, (ax_2020, ax_2021, ax_2022) = plt.subplots(3, 1, sharex=False, sharey=False) # 分别绘制三年的数据 ax_2020.plot(your_2020_data) ax_2021.plot(your_2021_data) ax_2022.plot(your_2022_data)此时每个子图会根据自身数据自动调整y轴刻度范围,互不影响。
对已有子图单独设置自动缩放
如果已经创建了共享轴的子图,可以单独为2020、2021年的子图开启y轴自动缩放:# 假设ax_2020、ax_2021是对应年份的子图对象 ax_2020.autoscale(enable=True, axis='y', tight=True) ax_2021.autoscale(enable=True, axis='y', tight=True) # 2022年的子图若需要保持原有刻度范围,可单独设置(可选) # ax_2022.set_ylim(0, 12000000)手动指定子图的y轴范围
如果你想更精准控制刻度范围,可基于对应年份的数据最大值手动设置:# 假设data_2020是2020年的数据集 y_max_2020 = data_2020.max() * 1.1 # 增加10%的余量避免数据贴顶 ax_2020.set_ylim(bottom=0, top=y_max_2020) # 同理处理2021年的数据 y_max_2021 = data_2021.max() * 1.1 ax_2021.set_ylim(bottom=0, top=y_max_2021)
核心逻辑是取消子图间的轴共享,或者单独为目标子图设置独立的刻度范围,这样不同年份的子图就能根据自身数据自由调整刻度上限。
内容的提问来源于stack exchange,提问作者hahaha
相关产品推荐
相关产品推荐

