Создание гистограммы годовых доходов - PullRequest
4 голосов
/ 17 апреля 2020

Я пытаюсь завершить sh задачу для проекта, и моя задача состоит в том, чтобы создать гистограмму годовых доходов исторического дохода Доу-Джонса. Я загрузил фотографию задания и мой прогресс ниже. На данный момент у меня проблема в том, что я не могу найти способ разделить годы в гистограмме, как это показано в задаче, и я не знаю, как изменить ось Y и легенду, чтобы показать информацию, которая показывает на первом рисунке.

Любая помощь приветствуется

Что я пытаюсь сделать и Мой прогресс до сих пор

Вот мой код:

# 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()

1 Ответ

2 голосов
/ 17 апреля 2020

Здравствуйте, просто чтобы дать вам дальнейшие указания,

Относительно текстового поля
текстовое поле выглядит так, как будто оно содержит сводную статистику DataFrame.describe() + несколько дополнительных. Вы можете создать текстовое поле, используя комбинацию .text() и .subplot() Я обнаружил, это руководство очень полезно для создания текстового поля на графике

Поскольку у нас нет данных здесь псевдокод :

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.
Также могут быть полезны эти две ссылки:

Видимо вызов 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
...