2016-07-27 15 views
3

I持って、私は最悪10「ベンチマークを返します」と、それに対応するポートフォリオのリターンと日付一覧表示し、より大きなデータフレームから取得した次のデータフレーム:私は「パンダデータフレームSeabornにグループ化された棒グラフ

enter image description here

をこのスクリプトで、それに対応する日付に対してベンチマーク戻り値を示していますSeabornバープロットを作成するために管理しまし:

import pandas as pd 
import seaborn as sns 

df = pd.read_csv('L:\\My Documents\\Desktop\\Data NEW.csv', parse_dates = True) 

df = df.nsmallest(10, columns = 'Benchmark Returns') 
df = df[['Date', 'Benchmark Returns', 'Portfolio Returns']] 
p6 = sns.barplot(x = 'Date', y = 'Benchmark Returns', data = df) 
p6.set(ylabel = 'Return (%)') 
for x_ticks in p6.get_xticklabels(): 
    x_ticks.set_rotation(90) 

そしてそれは、このプロット生成:

enter image description here

しかし、どのような私がしたいことはベンチマーク返品と2つの異なる色は、これら2つのカテゴリーを区別するために使用されているポートフォリオを返し、両方が含まれているグループ化されたバープロットです。

私はいくつかの異なる方法を試しましたが、何も動作していないようです。

ご協力いただきありがとうございます。

答えて

5

あなたが見たいと思っているかどうか見てください。準備データ

import seaborn as sns 

np.random.seed(123) 
index = np.random.randint(1,100,10) 

x1 = pd.date_range('2000-01-01','2015-01-01').map(lambda t: t.strftime('%Y-%m-%d')) 
dts = np.random.choice(x1,10) 

benchmark = np.random.randn(10) 
portfolio = np.random.randn(10) 

df = pd.DataFrame({'Index': index, 
        'Dates': dts, 
        'Benchmark': benchmark, 
        'Portfolio': portfolio}, 
        columns = ['Index','Dates','Benchmark','Portfolio']) 

ステップ2:

トリックは

ステップ1の長い形式に広いからパンダをdf変換することです "ワイド" から "長い" 形式

df1 = pd.melt(df, id_vars=['Index','Dates']).sort_values(['variable','value']) 
df1 

    Index Dates variable value 
9 48 2012-06-13 Benchmark -1.410301 
1 93 2002-07-31 Benchmark -1.301489 
8 97 2005-01-21 Benchmark -1.100985 
0 67 2011-06-01 Benchmark 0.126526 
4 84 2003-09-25 Benchmark 0.465645 
3 18 2009-07-13 Benchmark 0.522742 
5 58 2007-12-04 Benchmark 0.724915 
7 98 2002-12-28 Benchmark 0.746581 
6 87 2009-02-07 Benchmark 1.495827 
2 99 2000-04-21 Benchmark 2.207427 
16 87 2009-02-07 Portfolio -2.750224 
14 84 2003-09-25 Portfolio -1.855637 
15 58 2007-12-04 Portfolio -1.779455 
19 48 2012-06-13 Portfolio -1.774134 
11 93 2002-07-31 Portfolio -0.984868 
12 99 2000-04-21 Portfolio -0.748569 
10 67 2011-06-01 Portfolio -0.747651 
18 97 2005-01-21 Portfolio -0.695981 
17 98 2002-12-28 Portfolio -0.234158 
13 18 2009-07-13 Portfolio 0.240367 

ステップ3:プロット

sns.barplot(x='Dates', y='value', hue='variable', data=df1) 
plt.xticks(rotation=90) 
plt.ylabel('Returns') 
plt.title('Portfolio vs Benchmark Returns'); 

enter image description here

+0

ありがとうございます!これは完全に機能しました。 –

+0

Seabornのプロットを既存のBokehファイルにエクスポートする方法を知っていますか? –

+0

Bokehさんとの経験はありません、申し訳ありません。 –

関連する問題