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

如何用for循环生成的自定义数据绘制图表?数据存储解析

解决观测次数n与行权价格S_T的绘图问题

问题根源

你当前的循环逻辑没问题,但没有将每次循环的结果存储到容器(列表/ DataFrame)中,而是直接覆盖单个变量,导致循环结束后仅保留最后一次(S_T=300)的计算结果,所以打印只输出该值,绘图也因数据不足无法得到预期效果。

解决方案:存储循环结果再绘图

无论是用列表还是DataFrame存储数据,都能解决问题。以下是两种实现方式:

方式1:用列表存储数据(轻量便捷)

import matplotlib.pyplot as plt

# 初始化两个列表,分别存S_T值和对应计算结果
s_t_list = []
result_list = []

# 遍历S_T从139到300(若需非整数步长,可改用numpy的arange)
for s_t in range(139, 301):
    if s_t > 169:
        res = 1000
    elif 84.5 < s_t < 169:
        res = 1000 - max(0, 1000 * (169 / s_t - 1))
    else:
        res = 0
    # 将当前值追加到列表
    s_t_list.append(s_t)
    result_list.append(res)
    # 打印当前结果
    print(f"S_T={s_t}, 计算结果={res}")

# 绘制图表
plt.figure(figsize=(10, 6))
plt.plot(s_t_list, result_list, marker='o', linestyle='-', color='#1f77b4')
plt.xlabel('S_T(行权价格)')
plt.ylabel('计算结果')
plt.title('S_T与计算结果的关系曲线')
plt.grid(alpha=0.3)
plt.show()

方式2:用DataFrame存储数据(便于后续数据处理)

如果后续需要对数据做筛选、统计等操作,用pandas DataFrame会更灵活:

import pandas as pd
import matplotlib.pyplot as plt

# 初始化空DataFrame
df = pd.DataFrame(columns=['S_T', '计算结果'])

for s_t in range(139, 301):
    if s_t > 169:
        res = 1000
    elif 84.5 < s_t < 169:
        res = 1000 - max(0, 1000 * (169 / s_t - 1))
    else:
        res = 0
    # 将当前数据行添加到DataFrame
    df.loc[len(df)] = [s_t, res]
    print(f"S_T={s_t}, 计算结果={res}")

# 基于DataFrame绘图
df.plot(x='S_T', y='计算结果', marker='o', linestyle='-', figsize=(10, 6), grid=True)
plt.xlabel('S_T(行权价格)')
plt.ylabel('计算结果')
plt.title('S_T与计算结果的关系曲线')
plt.show()

关键说明

  • 两种方式核心都是保留每次循环的S_T和对应结果,避免数据被覆盖;
  • 若你的“观测次数n”是另一个变量(比如S_T随n变化),只需调整遍历对象为n,再根据n计算对应的S_T即可,逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:10:26