创建年回报率直方图

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 中执行此操作的方式。 这两个链接也可能有帮助:

how-to-add-a-text-into-a-rectangle Change color for the patches in a hist

显然调用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 好的,您是否更新了代码,或者您愿意分享将坏框附加到条形图中的部分,以便查看它是否与我的方法完全不同?

以上是关于创建年回报率直方图的主要内容,如果未能解决你的问题,请参考以下文章

根据“计数”列绘制直方图连续颜色?

在 Oracle 中创建直方图/频率分布的最佳方法?

R创建两个变量的直方图

使用谷歌直方图创建日期直方图

如何使用 matplotlib 在单独的图形上创建多个直方图?

创建 LBP 直方图