Используйте цикл для построения диаграмм 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!")