如何用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
相关产品推荐
相关产品推荐

