web-dev-qa-db-ja.com

ループを使用してn個のチャートをプロットしますPython

pythonデータフレームを使用してpandasに読み込むデータのセットがあります。私がやりたいのは、すべてではなく、独自のフレーム内のすべての要素のプロットを印刷するループを作成することです。私のデータは、次のような構造の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)

上記はリモートで私が望んでいたものではなく、それはパンダ、MatplotLibなどに不慣れであり、いくつかのドキュメントを見ることに起因しますが、私にはmatplotlibは必要ないようです(質問2)

A)dfのすべての列のデータのプロットを作成するにはどうすればよいですか。B)matplotlibを使用する必要がありますか、それともすべて実行するにはpandasを使用する必要がありますか。

ありがとうございました、

30
MCP_infiltrator

それでは、いくつかのプロットを作成する最も簡単な方法は次のとおりです。

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']のような色のリストを作成し、このリストのエントリと、必要に応じてループにプロットされる対応するデータの両方を呼び出すだけで、自動化できます。プログラムでデータシリーズを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],[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に非常に優れた ドキュメントページ があり、多くの がある場合。

38

辞書を使う!!

また、プロットをより詳細に制御できる辞書を使用することもできます。

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!")
7
G M