DRY в python построение графика matplotlib с использованием одной единственной команды - PullRequest
1 голос
/ 05 мая 2020
import pandas as pd
import matplotlib.pyplot as plt

> importing csv files
january = pd.read_csv('divident_month/january.csv')
april = pd.read_csv('divident_month/april.csv')
july = pd.read_csv('divident_month/july.csv')
october = pd.read_csv('divident_month/october.csv')

> substracting column 'Open' to column close
jangain = january['Open']-january['Close']
aprgain = april['Open']-april['Close']
julgain = july['Open']-july['Close']
octgain = october['Open']-october['Close']

>plotting  
medium=[jangain, aprgain, julgain, octgain]
plt.plot(medium)
plt.show()

## jan = plt.plot(jangain, label='january')
## apr =plt.plot(aprgain, label='april')
## jul =plt.plot(julgain, label='july')
## oct =plt.plot(octgain, label='october')
## plt.legend()

как я могу нанести несколько элементов на график, не повторяя себя, как в ##. У меня есть несколько файлов с повторяющимся кодом для разных месяцев (они сгруппированы в разные файлы для месяцев до div, месяцев div и после месяцев div).

Я попытался сгруппировать их в список (средний) и передать list в plt.plot(medium), но это, похоже, не работает.

Я также дал названия графиков (например, Jan, apr ...), потому что я импортирую их в другой файл для анализа q1, q2, q3, q4 (на всякий случай эта информация сбивает с толку)

это я пытаюсь делать финансы с python кстати

1 Ответ

0 голосов
/ 05 мая 2020

Вы можете это сделать:

import os
import pandas as pd, collections as co, matplotlib.pyplot as plt

the_dir = 'divident_month/'
months = co.OrderedDict() # use if order of csv files is important 

# iterate over files in directory
for a_file in sorted(os.listdir(the_dir)):
    if os.path.splitext(a_file)[-1] == '.csv':
        # add DataFrame entries to dictionary 
        months[a_file.rstrip('.csv')] = pd.read_csv(os.path.join(the_dir,a_file))

# perform gain calculation (k: dictionary `k`ey, v: dictionary `v`alue)
for k,v in months.items():
    months[k] = v['Open'] - v['Close']

# get an axes handle from matplotlib so you can re-use it
fig,ax = plt.subplots()

# plot without manual repetition of plot command
for k,v in months.items():
    ax = v.plot(ax=ax,label=k) 

# add title and show plot
plt.gcf().suptitle('Gain')
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...