创建年回报率直方图
Posted
技术标签:
【中文标题】创建年回报率直方图【英文标题】:Creating a histogram of Yearly Returns 【发布时间】:2020-07-31 00:23:30 【问题描述】:我正在尝试完成一个项目的任务,我的任务是创建道琼斯历史回报的年度回报直方图。我在下面上传了任务的图片和我的进度。我现在遇到的问题是,我找不到一种方法来分隔直方图中的年份,因为它在任务中显示,我不知道如何修改 y-axix 和图例以显示信息在第一张图片中显示。
感谢任何帮助
What I am trying to make 和 My progress so far
这是我的代码:
# Importing packages
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import datetime
#setting the order
order=[-60,-50,-40,-30,-20,-10,
0,10,20,30,40,50,60,70]
#getting the data
dow_jones_returns = pd.read_csv('data/dow-jones-by-year-historical-annual-returns (2).csv')
dow_jones=pd.DataFrame(data=dow_jones_returns)
dow_jones['date']=pd.to_datetime(dow_jones['date'])
dow_jones['date']=pd.DatetimeIndex(dow_jones['date']).year
pd.to_numeric(dow_jones.value)
up_to_2019=dow_jones.iloc[0:99]
lastyear= dow_jones.iloc[-1]
#ploting the histogram
fig = plt.figure()
up_to_2019['value'].plot.hist(bins = order)
plt.show()
【问题讨论】:
您好,欢迎来到 SO。目前很难在没有任何数据的情况下为您提供帮助。请提供minimal reproducible example。当您提出更具体的问题时,您也会得到更好的答案。 感谢您的评论比约恩。我知道在没有数据的情况下很难编辑我的代码,如果我的代码过于复杂,我深表歉意。但是,我希望我能在如何在直方图上叠加第一张图片中的年份或如何拉伸 y 轴以包含百分比方面获得领先。无论如何,在这一点上任何可以帮助我的东西对我来说都是完美的。谢谢! 【参考方案1】:您好,只是给您一些进一步的指示,
关于文本框
文本框看起来包含DataFrame.describe()
的摘要统计信息+ 一些其他统计信息。您可以通过使用.text()
和.subplot()
的组合来创建文本框
我发现this guide 对于在绘图中创建文本框非常有用
由于我们没有数据, 这是一个伪代码:
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
textstr = str(up_to_2019['value'].describe())
ax.hist(up_to_2019['value'], bins = order)
# these are matplotlib.patch.Patch properties
props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)
# place a text box in upper left in axes coords
ax.text(0.05, 0.95, textstr, transform=ax.transAxes, fontsize=10,
verticalalignment='top', bbox=props)
plt.show()
关于 y 轴:
1) 以下是设置正确标签的方法:plt.ylabel("Number of Observations\n(Probability in%)")
2)比添加蜱plt.yticks(np.arange(1,27))
关于垃圾箱内的标签
这是相当棘手的一种选择,尽管绝对不建议通过.text()
方法包含标签。我不知道它是否有帮助,但 here 是您在 R 中执行此操作的方式。
这两个链接也可能有帮助:
显然调用plt.hist()
有三个返回值,其中一个被称为补丁。您可以迭代补丁,即更改这些补丁的颜色(请参阅上面的链接),但是我不知道如何给它们添加文本。
import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
x = [21,22,23,4,5,6,77,8,9,10,31,32,33,34,35,36,37,18,49,50,100]
num_bins = 5
n, bins, patches = plt.hist(x, num_bins, facecolor='blue', alpha=0.5)
for i,pat in enumerate(patches):
pat.set_test("Test") #this doesnt work sadly
【讨论】:
非常感谢 Björn 的帮助。你的观点让我进步很大。我希望这段代码可以帮助并引导许多其他试图解决相同问题的人:) 很高兴我能帮上忙 :) @hajredinpasha 你过得怎么样。如果没有解决,您能否更新问题,以便我们在不重新发明***的情况下尝试提供帮助? @wwnde 感谢您提供帮助并询问有关此项目的更新。最后,我在朋友的帮助下设法解决了这个问题。分离年份的方法是创建一个堆积条形图(我的代码中有一个直方图,所以这是错误的方法)。至于分离本身,有两个 for 循环,一个遍历数据以将其分成 x 轴上的指定类别,另一个将数据附加到条形图中。 @hajredinpasha 好的,您是否更新了代码,或者您愿意分享将坏框附加到条形图中的部分,以便查看它是否与我的方法完全不同?以上是关于创建年回报率直方图的主要内容,如果未能解决你的问题,请参考以下文章