Используйте цикл для построения диаграмм n Python

У меня есть набор данных, которые я загружаю в python с помощью pandas dataframe. То, что я хотел бы сделать, это создать цикл, который будет печатать график для всех элементов в их собственном фрейме, а не на одном. Мои данные находятся в файле excel, структурированном таким образом:

Index | DATE  | AMB CO 1 | AMB CO 2 |...|AMB CO_n | TOTAL
1     | 1/1/12|  14      | 33       |...|  236    | 1600
.     | ...   | ...      | ...      |...|  ...    | ...
.     | ...   | ...      | ...      |...|  ...    | ...
.     | ...   | ...      | ...      |...|  ...    | ...
n

Это то, что у меня есть для кода:

import pandas as pd
import matplotlib.pyplot as plt
ambdf = pd.read_excel('Ambulance.xlsx', 
                      sheetname='Sheet2', index_col=0, na_values=['NA'])
print type(ambdf)
print ambdf
print ambdf['EAS']

amb_plot = plt.plot(ambdf['EAS'], linewidth=2)
plt.title('EAS Ambulance Numbers')
plt.xlabel('Month')
plt.ylabel('Count of Deliveries')
print amb_plot

for i in ambdf:
    print plt.plot(ambdf[i], linewidth = 2)

Я собираюсь сделать что-то вроде этого:

for i in ambdf:
    ambdf_plot = plt.plot(ambdf, linewidth = 2)

Вышеизложенное не было отдаленно тем, что я хотел, и это проистекает из моей незнакомости с Pandas, MatplotLib и т.д., глядя на некоторую документацию, хотя для меня это похоже, что matplotlib даже не нужен (вопрос 2)

So A) Как я могу создать график данных для каждого столбца в моем df и B) мне нужно использовать matplotlib или я должен просто использовать pandas, чтобы сделать все это?

Спасибо,

Ответ 1

Хорошо, поэтому самый простой способ создать несколько графиков:

import matplotlib.pyplot as plt
x=[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]
y=[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]
for i in range(len(x)):
    plt.figure()
    plt.plot(x[i],y[i])

Обратите внимание, что вам нужно создать figure каждый раз, или pyplot будет отображать в первом созданном.

Если вы хотите создать несколько рядов данных, все, что вам нужно сделать, это:

import matplotlib.pyplot as plt
x=[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]
y=[[1,2,3,4],[2,3,4,5],[3,4,5,6],[7,8,9,10]]
plt.plot(x[0],y[0],'r',x[1],y[1],'g',x[2],y[2],'b',x[3],y[3],'k')

Вы можете автоматизировать его, указав список цветов, например ['r','g','b','k'], а затем просто назовите обе записи в этом списке и соответствующие данные, которые должны быть построены в цикле, если хотите. Если вы просто хотите программно добавить ряды данных в один сюжет, то это будет делать так (это не значит, что каждый раз создается новая фигура, поэтому все рисуется на одном рисунке):

 import matplotlib.pyplot as plt
 x=[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]
 y=[[1,2,3,4],[2,3,4,5],[3,4,5,6],[7,8,9,10]]
 colours=['r','g','b','k']
 for i in range(len(x)):
    plt.plot(x[i],y[i],colours[i]) 

Надеюсь, это поможет. Если что-нибудь, что matplotlib имеет очень хорошую страницу документации с большим количеством examples.

Ответ 2

Используйте словарь!

Вы также можете использовать словари, которые позволяют вам больше контролировать графики:

import matplotlib.pyplot as plt
#   plot 0     plot 1    plot 2   plot 3
x=[[1,2,3,4],[1,4,3,4],[1,2,3,4],[9,8,7,4]]
y=[[3,2,3,4],[3,6,3,4],[6,7,8,9],[3,2,2,4]]

plots = zip(x,y)
def loop_plot(plots):
    figs={}
    axs={}
    for idx,plot in enumerate(plots):
        figs[idx]=plt.figure()
        axs[idx]=figs[idx].add_subplot(111)
        axs[idx].plot(plot[0],plot[1])
return figs, axs

figs, axs = loop_plot(plots)

Теперь вы можете выбрать сюжет, который вы хотите легко изменить:

axs[0].set_title("Now I can control it!")