2017-04-11 5 views
5

私はExcelスプレッドシートからデータを読んでいます。このデータには、6つのシナリオS1〜S6のそれぞれについて多数の観測値があります。私は私のデータフレームDFにデータを読み込むと、次のようになります。私は6つのシナリオごとに異なるバイオリンを持ってviolinplotを作成したいパンダをバイオリンプロットに加工する

 Scenario  LMP 
0   S1 -21.454544 
1   S1 -20.778094 
2   S1 -20.027689 
3   S1 -19.747170 
4   S1 -20.814405 
5   S1 -21.955406 
6   S1 -23.018960 
... 
12258  S6 -34.089906 
12259  S6 -34.222814 
12260  S6 -26.712010 
12261  S6 -24.555973 
12262  S6 -23.062616 
12263  S6 -20.488411 

。私はPandasとデータフレームが新しく、最後の日に多くの研究/テストが行​​われたにもかかわらず、私のデータフレームにいくつかのリファレンスを渡すエレガントな方法を理解することはできません(それぞれのシナリオ)は、axes.violinplot()ステートメントで動作します。例えば、私は以下を試しましたが、これはうまくいきません。私は、 "ValueError:サイズ1752の配列を次元2の配列軸にコピーできません"という結果をAxes.violinplotステートメントで取得します。

+0

@ImportanceOfBeingErnestああ、私はこれをしようとしていたとき、私は(コンセプトの証明として)マイナスを使用していました解析されていないデータの列全体(df.iloc [:、1])私は最終的にはデータ値をすべて自分とは反対にする必要がありますが、後でそれを解決できます。それを今のところ取り出す。私はまだ新しいエラーを取得しますが、それを反映するように投稿を更新します。私はpositionステートメントも削除していますが、デフォルトではそれがうまくいくはずです。 –

答えて

4

あなたはプロットにデータセットを作成する方法を注意する必要があります。質問のコードには、1つのデータフレームのリストがあります。ただし、単純に1列のデータフレームのリストが必要です。

したがって、フィルタリングされたデータフレームから「LMP」列のみを取り出す必要があります。そうしないと、バイオリンプロットはプロットする列を認識しません。ここで

元のコードに近いまま作業例です:

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


x = np.random.poisson(lam =3, size=100) 
y = np.random.choice(["S{}".format(i+1) for i in range(6)], size=len(x)) 
df = pd.DataFrame({"Scenario":y, "LMP":x}) 

fig, axes = plt.subplots() 

axes.violinplot(dataset = [df[df.Scenario == 'S1']["LMP"], 
          df[df.Scenario == 'S2']["LMP"], 
          df[df.Scenario == 'S3']["LMP"], 
          df[df.Scenario == 'S4']["LMP"], 
          df[df.Scenario == 'S5']["LMP"], 
          df[df.Scenario == 'S6']["LMP"] ]) 

axes.set_title('Day Ahead Market') 
axes.yaxis.grid(True) 
axes.set_xlabel('Scenario') 
axes.set_ylabel('LMP ($/MWh)') 

plt.show() 

enter image description here

6

シーボーンを使用することができます。この場合、海軍をインポートし、violin plotを使用してシナリオを視覚化します。

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

# load data into a dataframe 
df = pd.read_excel('Modeling analysis charts.xlsx', 
        sheetname='lmps', 
        parse_cols=[7,12], 
        skiprows=0, 
        header=1) 
fontsize = 10 

fig, axes = plt.subplots() 
# plot violin. 'Scenario' is according to x axis, 
# 'LMP' is y axis, data is your dataframe. ax - is axes instance 
sns.violinplot('Scenario','LMP', data=df, ax = axes) 
axes.set_title('Day Ahead Market') 

axes.yaxis.grid(True) 
axes.set_xlabel('Scenario') 
axes.set_ylabel('LMP ($/MWh)') 

plt.show() 

enter image description here

関連する問題