55

pandas データフレームを使用して Python にロードする一連のデータがあります。私がやりたいのは、すべてを 1 つではなく、独自のフレーム内のすべての要素のプロットを出力するループを作成することです。私のデータは、次のように構造化された 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)

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

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

4

6 に答える 6

78

わかりましたので、複数のプロットを作成する最も簡単な方法は次のとおりです。

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])
    # Show/save figure as desired.
    plt.show()
# Can show all four figures at once by calling plt.show() here, outside the loop.
#plt.show()

figure毎回作成する必要があることに注意してください。そうしないと、作成pyplotされた最初のものにプロットされます。

複数のデータ系列を作成する場合は、次のことを行う必要があります。

import matplotlib.pyplot as plt
plt.figure()
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']
plt.figure() # In this example, all the plots will be in one figure.    
for i in range(len(x)):
    plt.plot(x[i],y[i],colours[i])
plt.show()

お役に立てれば。何かあるとすれば、matplotlib には多くの例を含む非常に優れたドキュメント ページがあります。

2019 年 12 月 17 日:ストーリーのこの部分を明確にするために追加plt.show()および呼び出し。plt.figure()

于 2013-10-04T19:54:52.437 に答える
22

辞書を使う!!

プロットをより細かく制御できる辞書を使用することもできます。

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

もちろん、プロットをどうするかはあなた次第です。それらをディスクに保存するかfigs[idx].savefig("plot_%s.png" %idx)、表示することができますplt.show()。すべてのプロットを一緒にポップアップ表示する場合にblock=False のみ、この引数を使用してください(プロットが多数ある場合、これは非常に面倒になる可能性があります)。loop_plotこれは、関数内または関数が提供する辞書を使用して別のループで行うことができます。

returningfigsを追加するだけで、必ずaxs実行する必要はありませんplt.show()

于 2016-07-11T10:57:16.257 に答える