2016-06-19 3 views
3

ColumnDataSourceを使用するボケプロットを準備したいとします。ボケのx座標のデータフレームインデックスを使用してパンダデータフレームをプロットする

enter image description here

どのように私は、xの値がインデックスであることを指定します:データのソースであるpandasDataFrameは1列とdatetime率を有しています。私はちょうどそれがデフォルトになります期待して、それを省略してみましたが、それはうまくいきませんでした:

enter image description here

が、私はちょうどデータフレームの列としてインデックスをコピー醜いソリューションがありますが、私はそこに願っています

enter image description here enter image description here

答えて

5

問題は、「X」の列でなければなりませんどの列を指定しなければならないことです。 "x"値を指定しない場合、bokeh.plottingのデフォルトの動作は、存在しないColumnDataSourceで "x"という列を検索しようとすることです。

ここで難しいのは、パンダに名前付きインデックス( 'timeseries')を使用していることです。あなたが使用している場合はそれがうまくいく

ds = ColumnDataSource(df) 
print(ds.data) 
# the ts_n values would be the actual timestamps from the df 
> {'timestamp': [ts_1, ts_2, ts_3, ts_4, ts_5], 'avg': [0.9, 0.8, 0.7, 0.8, 0.9]} 

:あなたはColumnDataSourceを作成するときに、あなたのソースは、おそらくのように見えるように、その名前は、持ち越される

p.line(source=ds, x='timestamps', y='avg') 
+0

私は、(通常の列とは対照的に)そのインデックスを知ることができませんでした。ありがとう。 – Krastanov

4

が、私は通常、インデックスをリセットし、これは、インデックス列を作る:よりエレガントなソリューションです。あなたの醜い解決法に似ています。次に、指定した列をプロットします。

df.reset_index(inplace = True) 

また、単に列を参照することもできますが、matplotlibでは、通常、インデックスをデフォルトで使用します。それはあなたのために働くかどうか分かりませんが、試してみる価値があります。

df["avg"].plot() 

また、時系列プロットアプローチを試すこともできます。以下で詳しく説明します。

TimeSeries in Bokeh using a dataframe with index

2

あなたはに通常の構文を使用してインデックスを呼び出すことができますDF のインデックスを次のように取得してください:
p.line(x = df.index.values, y = df['values_for_y'])

+0

しかし、明示的な共通データフレーム(ソースキーワード引数)を使用していないため、単純なサブプロットの上に構築したいと思うインタラクティブな多軸フィギュアが複雑になります。 – Krastanov

関連する問題