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

Python中如何自动生成重复最大值列表以绘制matplotlib水平线?

解决方法

完全不用重复写max(y1),有两种简洁的实现方式:

方法1:用plt.axhline()(最推荐)

matplotlib专门提供了画水平线的函数axhline,无需构造长度匹配的y列表,直接指定最大值即可:

import matplotlib.pyplot as plt

x1 = [8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]
y1 = [36.37, 36.18, 36.31, 36.24, 36.31, 36.37, 36.18, 36.43, 36.12, 36.24, 36.06, 36.31, 36.12, 36.49, 36.74, 36.74]

plt.plot(x1, y1, color='black', marker='o', markerfacecolor='black', markersize='10', label='line1')

# 直接绘制水平线,y值为y1的最大值,默认覆盖整个图表x轴范围
plt.axhline(y=max(y1), color='#30C3BF', linestyle='dashed', label='line2')

plt.legend()
plt.show()

如果需要手动限制水平线的x范围(比如只在x1的区间内显示),可以添加xmin和xmax参数(按x轴比例设置,0为最左端,1为最右端):

plt.axhline(y=max(y1), color='#30C3BF', linestyle='dashed', label='line2', 
            xmin=x1[0]/max(x1), xmax=x1[-1]/max(x1))

方法2:自动生成匹配长度的y列表

如果仍想用plt.plot,可以用列表乘法快速生成和x1长度一致的y2列表:

import matplotlib.pyplot as plt

x1 = [8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]
y1 = [36.37, 36.18, 36.31, 36.24, 36.31, 36.37, 36.18, 36.43, 36.12, 36.24, 36.06, 36.31, 36.12, 36.49, 36.74, 36.74]

plt.plot(x1, y1, color='black', marker='o', markerfacecolor='black', markersize='10', label='line1')

x2 = x1
# 用列表乘法生成与x1长度相同的y2列表
y2 = [max(y1)] * len(x1)

plt.plot(x2, y2, color='#30C3BF', linestyle='dashed', label='line2')

plt.legend()
plt.show()

第一种方法更简洁,专门针对水平线场景;第二种适合需要保留y2列表做后续处理的情况。

内容的提问来源于stack exchange,提问作者Guilherme Candeias

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:31:00