创建每年 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
我正在尝试完成一个项目的任务,我的任务是创建道琼斯历史 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()
方法包含标签。我不知道它是否有帮助,但
这两个 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