41

パンダのデータフレームから複数の線をプロットし、線ごとに異なるオプションを設定したいと思います。私は次のようなことをしたいです

testdataframe=pd.DataFrame(np.arange(12).reshape(4,3))
testdataframe.plot(style=['s-','o-','^-'],color=['b','r','y'],linewidth=[2,1,1])

これにより、いくつかのエラーメッセージが表示されます。

  • 線幅はリストでは呼び出せません

  • スタイルでは、リストで色を定義するときに、「s」や「o」などのアルファベット記号を使用できません。

また、私には奇妙に思われるものがいくつかあります

  • 上記のコードに別のプロットコマンドを追加するtestdataframe[0].plot()と、同じプロットにこの線がプロットされます。コマンドを追加するtestdataframe[[0,1]].plot()と、新しいプロットが作成されます。

  • 私が言うならtestdataframe[0].plot(style=['s-','o-','^-'],color=['b','r','y'])、それはスタイルのリストでは問題ありませんが、カラーのリストでは問題ありません

誰かが助けてくれることを願っています、ありがとう。

4

3 に答える 3

69

あなたはとても近いです!

スタイルリストで色を指定できます。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

testdataframe = pd.DataFrame(np.arange(12).reshape(4,3), columns=['A', 'B', 'C'])
styles = ['bs-','ro-','y^-']
linewidths = [2, 1, 4]
fig, ax = plt.subplots()
for col, style, lw in zip(testdataframe.columns, styles, linewidths):
    testdataframe[col].plot(style=style, lw=lw, ax=ax)

また、plotメソッドはmatplotlib.axesオブジェクトを受け取ることができるため、次のように複数の呼び出しを行うことができます(必要な場合)。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

testdataframe1 = pd.DataFrame(np.arange(12).reshape(4,3), columns=['A', 'B', 'C'])
testdataframe2 = pd.DataFrame(np.random.normal(size=(4,3)), columns=['D', 'E', 'F'])
styles1 = ['bs-','ro-','y^-']
styles2 = ['rs-','go-','b^-']
fig, ax = plt.subplots()
testdataframe1.plot(style=styles1, ax=ax)
testdataframe2.plot(style=styles2, ax=ax)

この場合、実際には実用的ではありませんが、この概念は後で役立つ可能性があります。

于 2013-01-06T06:35:53.407 に答える
22

ですから、答えは同じ議論で色とスタイルを渡すことにあると思います。次の例は、パンダ0.19.2で機能します。

testdataframe=pd.DataFrame(np.arange(12).reshape(4,3))
testdataframe.plot(style=['r*-','bo-','y^-'], linewidth=2.0)

残念ながら、matplotlibへの入力として複数の線幅を渡すことはできないようです。

于 2017-03-16T04:47:11.257 に答える
21

データフレームを検討するtestdataframe

testdataframe = pd.DataFrame(np.arange(12).reshape(4,3))

print(testdataframe)

   0   1   2
0  0   1   2
1  3   4   5
2  6   7   8
3  9  10  11

以下に定義するようstylesに、文字列の単一のリストに組み合わせることができます。styles線幅も定義しますlws

styles=['bs-', 'ro-', 'y^-']
lws = [2, 1, 1]

plotこのメソッドを使用して、リストをパラメーターにtestdataframe渡すことができます。辞書(およびおそらく他のもの)も渡すことができた可能性があることに注意してください。stylesstyle

ただし、線幅はそれほど簡単には処理できません。最初にオブジェクトをキャプチャしAxesSubplot、線幅を設定する線属性を繰り返し処理します。

ax = testdataframe.plot(style=styles)
for i, l in enumerate(ax.lines):
    plt.setp(l, linewidth=lws[i])

ここに画像の説明を入力してください

于 2017-03-15T21:13:06.400 に答える