第1课:更多绘图

小卡 金融 2019-11-18 26 0
[~~☛关于启用赞助会员☚~~]

财务中的一个重要概念是基准化,即看到相对于另一项投资回报的回报。我们可以创建一个函数,该函数可以像以前一样查找所有值,然后在每个匹配的时间段内将它们除以第一个(我们的基准)的值。这将为我们提供多少投资将按百分比为我们提供多少。

#我们还可以创建一个更酷的功能,以基准回报为基准
#我们可以对其进行设置,以使第一率成为基准,而其余率与之相关
def benchmark(rates,P,time):
    t = list(range(time+1))
    #First make the benchmark values
    benchmark = [compoundInterest(P,rates[0],x) for x in t]
    data = []
    for rate in rates:
        A = [compoundInterest(P,rate,x) for x in t]
        A = [i/j-1 for i,j in zip(A,benchmark)]
        #Subtract one so that we have the origin at 0 instead of 1
        data.append(A)
    return data
data = benchmark([.02,.05,.1],100,25)
print(data)
第二行,A = [zip(A,benchmark)中i,j的i / j-1,i / j-1)是我们收益的基准。您会注意到基准利率在每个时间段均为0,因为它不能大于或小于其自身。

def benchmarkPlot(rates,P,time):
    data = benchmark(rates,P,time)
    for A,rate in zip(data,rates):
        label = "r="+str(rate)
        plt.plot(t,A,label=label)
    plt.xlabel("t")
    plt.ylabel("Difference")
    plt.title("Benchmarked Compound Interest")
    plt.legend()
    plt.show()
benchmarkPlot([.02,.05,.1],100,25)
毕竟,我们在y轴上的刻度现在还不太有意义,我们正在使用百分比。我们可以使用matplotlib.ticker中的FuncFormatter为y轴创建自定义格式。我们只需要定义一个函数并将其转换为格式化程序即可。

#我们可能希望将轴标记为百分比,但是我们可以使用轴格式化程序来完成此操作
#首先,我们需要创建一个函数,该函数以所需的方式格式化数字
def percentConvert(y, position):
    #Position does not matter for what we are doing here, but in other cases may be needed
    s = str(100 * y)+"%"
    return s

from matplotlib.ticker import FuncFormatter
#将其转换为格式化程序
formatter = FuncFormatter(percentConvert)
忽略位置参数。y是y轴上每个刻度的值。通过乘以100,然后加上百分号,我们可以获得百分号格式。

使用plt.gca()。yaxis.set_major_formatter(),我们可以将格式化程序作为参数,并将其使用。

def benchmarkPlot(rates,P,time):
    data = benchmark(rates,P,time)
    for A,rate in zip(data,rates):
        label = "r="+str(rate)
        plt.plot(t,A,label=label)
    plt.xlabel("t")
    plt.ylabel("Difference")
    plt.title("Benchmarked Compound Interest")
    plt.legend()
    #Set our formatter
    plt.gca().yaxis.set_major_formatter(formatter)
    plt.show()
benchmarkPlot([.02,.05,.1],100,25)
如果结尾的.0不好看,则可以将数字转换为整数以解决此问题。

#我们也可以将其修改为仅显示整数部分
def percentConvert(y, position):
    #Position does not matter for what we are doing here, but in other cases may be needed
    #Apply int
    s = str(int(100 * y))+"%"
    return s
formatter = FuncFormatter(percentConvert)

def benchmarkPlot(rates,P,time):
    data = benchmark(rates,P,time)
    for A,rate in zip(data,rates):
        label = "r="+str(rate)
        plt.plot(t,A,label=label)
    plt.xlabel("t")
    plt.ylabel("Difference")
    plt.title("Benchmarked Compound Interest")
    plt.legend()
    #Set our formatter
    plt.gca().yaxis.set_major_formatter(formatter)
    plt.show()

benchmarkPlot([.02,.05,.1],100,25)

版权免责声明

卡卡教学资源网所有资源全部来源于网络整理,本站目地只是为了提供给网友学习研究任何人以任何方式架设运营或出现任何法律问题都与本站无关,如同意观点请下载,如不同意请离开!卡卡教学资源网特此声明!

分享:

扫一扫在手机阅读、分享本文

本站资源所有内容免费,现在就加入我们吧!登录注册×
»
会员登录
新用户注册
×
会员注册
已有账号
×