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

多次调用Python绘图函数时,如何保留并对比看跌期权收益率曲线?

解决看跌期权收益率曲线同图对比问题

问题根源

你每次调用函数时都创建了新的绘图窗口(plt.figure(counter)),并且立即调用plt.show(),导致每次只能显示当前函数生成的曲线,无法在同一窗口叠加对比。另外全局变量counter未在函数内声明为全局,导致无法正确递增。

解决方案(同窗口叠加曲线)

如果需要在同一窗口显示所有曲线对比,只需将绘图初始化和显示逻辑移到函数外部,让所有曲线绘制在同一个画布上:

import matplotlib.pyplot as plt
import numpy as np

def my_function(option, strike, bid, price):
    if option == "put":
        # 注:看跌期权标准盈亏平衡点应为 strike - bid,若你的业务逻辑特殊可保留原公式
        breakeven = price - bid  
        x = [breakeven - 10, breakeven, price, price + bid]
        y = [0] * len(x)
        # 用for循环替代while,代码更简洁
        for i in range(len(x)):
            if x[i] < price:
                y[i] = (-x[i] + breakeven) * 100
            else:
                y[i] = -100 * bid
            print(x[i], y[i])
        # 在当前画布上绘制曲线,添加清晰标签
        plt.plot(x, y, label=f"执行价{strike},权利金{bid}")
        plt.xlabel('标的价格')
        plt.ylabel('收益率(%)')
        plt.legend()

# 初始化画布
plt.figure()
# 多次调用函数绘制不同参数的曲线
my_function("put", 90, 20, 100)
my_function("put", 90, 10, 100)
# 统一显示所有曲线
plt.show()

备选方案(多独立窗口)

如果确实需要每个参数对应一个独立窗口,需正确使用全局计数器:

import matplotlib.pyplot as plt
import numpy as np

counter = 1

def my_function(option, strike, bid, price):
    global counter  # 声明使用全局变量
    if option == "put":
        breakeven = price - bid
        x = [breakeven - 10, breakeven, price, price + bid]
        y = [0] * len(x)
        for i in range(len(x)):
            if x[i] < price:
                y[i] = (-x[i] + breakeven) * 100
            else:
                y[i] = -100 * bid
            print(x[i], y[i])
        plt.figure(counter)
        plt.plot(x, y, label=f"执行价{strike}")
        plt.xlabel('标的价格')
        plt.ylabel('收益率(%)')
        plt.legend()
        plt.show()
        counter += 1

my_function("put", 90, 20, 100)
my_function("put", 90, 10, 100)

关键修改点

  • 同窗口方案:将plt.figure()和plt.show()移到函数外部,所有曲线绘制完成后统一显示
  • 多窗口方案:在函数内用global counter声明全局变量,确保计数器正确递增
  • 添加plt.legend()区分不同曲线,提升可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:55:28