python-3.x X轴刻度因范围而以千为单位显示

bz4sfanl  于 2023-03-31  发布在  Python
关注(0)|答案(1)|浏览(143)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import norm
from matplotlib.ticker import FormatStrFormatter
%matplotlib inline

N = norm.cdf

def BS_CALL(S, K, T, r, sigma):
    d1 = (np.log(S/K) + (r + sigma**2/2)*T) / (sigma*np.sqrt(T))
    d2 = d1 - sigma * np.sqrt(T)
    return S * N(d1) - K * np.exp(-r*T)* N(d2)

def BS_PUT(S, K, T, r, sigma):
    d1 = (np.log(S/K) + (r + sigma**2/2)*T) / (sigma*np.sqrt(T))
    d2 = d1 - sigma* np.sqrt(T)
    return K*np.exp(-r*T)*N(-d2) - S*N(-d1)

K = 100
r = 0.1
T = 1
sigma = 0.3

S = np.arange(1,300,.1)

calls = [BS_CALL(s, K, T, r, sigma) for s in S]
call_intrinsic = [s-K if(s>K) else 0 for s in S]
puts = [BS_PUT(s, K, T, r, sigma) for s in S]

plt.figure(figsize=(10,6))
plt.plot( calls, label='Call Value')
plt.plot(call_intrinsic, label="Intrinsic Value")
plt.xlabel('$S_0$')
plt.ylabel(' Value')
plt.legend()

看到X刻度了吗

我希望X刻度的数字从0.1到300。我希望图的X轴有相同的范围,但似乎0.1的范围是工作的事情了。

h7appiyu

h7appiyu1#

S作为plotx参数传递:

...
plt.plot(S, calls, label='Call Value')
plt.plot(S, call_intrinsic, label="Intrinsic Value")
...

如果你不传递2个数据值,plot认为这些值是y(你的代码)的值。如果你传递两个,第一个是x,第二个是y(上面的代码)。
输出:

相关问题