创建每年 Returns 的直方图

Creating a histogram of Yearly Returns

我正在尝试完成一个项目的任务,我的任务是创建道琼斯历史 returns 的年度 returns 直方图。我在下面上传了一张任务图片和我的进度。我现在遇到的问题是,我找不到一种方法来分隔任务中显示的直方图中的年份,而且我不知道如何修改 y 轴和图例以显示信息在第一张图片中显示。

感谢任何帮助

What I am trying to make and 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()

嗨,我想给你一些进一步的指导,

关于文本框
文本框看起来包含 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() 方法包含标签。我不知道它是否有帮助,但 是你在 R 中的做法。
这两个 links:

也可能有帮助
  • how-to-add-a-text-into-a-rectangle
  • Change color for the patches in a hist

显然调用 plt.hist() 具有三个 return 值,其中一个称为补丁。您可以遍历补丁,即更改这些补丁的颜色(请参阅上面的 link),但是我不知道如何向它们添加文本。

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