Matplotlib折线图设置Y轴范围0-100%的实现问题
解决Matplotlib Y轴刻度范围固定为0-100%的问题
我之前做JUnit性能测试结果可视化时也碰到过一模一样的问题——Matplotlib默认会自动缩放到数据的极值,导致0%和100%的区间可能被截断。你只需要在现有代码里补上set_ylim的调用,就能强制锁定Y轴范围,完整显示0到100%的区间,包括数据未覆盖到的空白区域。
修改后的完整代码:
import matplotlib.pyplot as plt from matplotlib.ticker import PercentFormatter # 可选,用于优化百分比显示 chart_fig, chart_ax = plt.subplots(figsize=(8, 4)) # 绘制两条性能数据折线 chart_ax.plot( parsed_testcase_results[0]['x_axis_values'], parsed_testcase_results[0]['y_axis_values'], 'g', parsed_testcase_results[1]['x_axis_values'], parsed_testcase_results[1]['y_axis_values'], 'r' ) # 设置坐标轴基础标签 chart_ax.set(xlabel='time (s)', ylabel='percentage') # 强制锁定Y轴范围为0-100,保留空白区间 chart_ax.set_ylim(0, 100) # 可选优化:让Y轴刻度直接显示为百分比格式(比如50 → 50%) chart_ax.yaxis.set_major_formatter(PercentFormatter(xmax=100)) plt.show() # 别忘了触发图表显示
关键细节说明:
set_ylim(0, 100)会直接覆盖Matplotlib的自动缩放逻辑,不管你的数据极值是多少,Y轴都会严格从0延伸到100,空白区域会被完整保留。- 如果你的Y轴数据是小数格式(比如0.5代表50%),只需要把
PercentFormatter的xmax改成1,同时set_ylim(0, 1),刻度会自动转换成百分比显示。 - 建议把
set_ylim放在绘制折线和设置标签之后调用,避免被后续的绘图操作意外覆盖。
内容的提问来源于stack exchange,提问作者D. Kuras
相关产品推荐
相关产品推荐

