You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib绘制混合图表时如何手动设置y轴范围为1400至最大值

解决方法

失效原因

混合绘图场景下y轴手动设置不生效,核心是plt.bar()执行时会触发Matplotlib默认的自动坐标轴缩放逻辑,如果你把plt.ylim()写在柱状图绘制之前,设置的范围会被自动缩放逻辑覆盖。另外计算y轴上限时需要把误差棒的上偏差长度纳入计算,否则误差棒顶端会被画布边缘截断。

修正方案

把y轴范围设置语句放在所有绘图命令执行完成后、plt.show()调用前,手动指定y轴下限为1400,上限取所有y方向绘图元素的最大值(折线数据、柱状图+对应误差棒的最大值)即可。

修正后的完整可运行代码:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import StrMethodFormatter

a1 = np.linspace(0.5,3.0,20)
d2 = np.array([1357.20029811, 1518.79648166, 1636.42791465, 1720.7907639 ,
       1779.8196137 , 1819.45852936, 1844.19713989, 1857.45123917,
       1861.83690162, 1859.37001519, 1851.61278982, 1839.7821616 ,
       1824.83057928, 1807.50662414, 1788.40080137, 1767.98035494,
       1746.61590397, 1724.6019459 , 1702.17273138, 1679.51462449])
d1 = np.array([0.55,1.16,1.736,2.28])
data2 = np.array([1424.6123596 , 1819.96128591, 1856.87393688, 1797.60859988])
D = np.array([3.342,8.22,15.19,23.70])

fig = plt.figure(figsize = (7, 5))
plt.plot(a1,d2,'--',color='y', label='折线')
plt.errorbar(d1,data2, yerr = D,color='g',fmt='o', markersize=5, capsize=5, label='误差棒点')
plt.bar(d1, data2, color ='maroon', width = [0.11,0.21,0.33,0.49],alpha = 0.3, label='柱状图')

plt.legend(fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)

# 计算y轴上限:取折线最大值、柱状图+误差最大值,额外加20的边距避免元素贴顶
y_max = max(d2.max(), (data2 + D).max()) + 20
# 所有绘图完成后设置y轴范围,不会被自动缩放逻辑覆盖
plt.ylim(bottom=1400, top=y_max)

plt.show()

注意点

  • 原数据中折线d2的第一个点数值为1357.2,小于设置的y轴起点1400,设置范围后该点会被截断,属于预期效果
  • 代码里给三个绘图元素都补了label参数,避免调用plt.legend()时出现无图例项的警告

内容的提问来源于stack exchange,提问作者CB Vaswar Dash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 09:48:53