2016-11-25 17 views
0

私はPandas dataframeの時系列グラフにプロットしようとしているデータを持っています。Python/Pandas/Bokeh:データフレームの凡例を使って複数の行をプロットする

1行をプロットすると、p.line関数を使用してこれを正常に実行でき、x_axis_type 'datetime'を確実に作成できました。 Bokeh how to add legend to figure created by multi_line method?

レオの答えに:

は、私がよく働い p.multi_lineを、使用して試してみましたが、私はまた伝説を必要とし、この記事によると、それは複数行に凡例を追加することはできません、複数の行をプロットするには上記のリンクの質問は有望に見えますが、データがデータフレームから供給されている場合は、この方法を適用する方法を考えることができません。

誰にもヒントはありますか?

+0

あなたが正確に何をしようとしてのビットより多くの情報を与えることができますか? bokehとpandasを使った私の経験では、単に '' fig = figure() ''で図を作成しています。次に、私が使っているデータをループして、 '' 'fig.line( x = x、y = y、legend = "この特定の行のラベル") '' '必要な行ごとに表示します。それから、私はループから抜け出し、数字を表示し、複数の行で1つの図を表示します。 – ralston

+0

あなたの答えをありがとう。非常に似通ったコードをいくつか見つけました。私の下の答えを見てください。 – pottolom

答えて

1

OK、これは動作しているようです:

from bokeh.plotting import figure, output_file, save 
from bokeh.models import ColumnDataSource 
import pandas as pd 
from pandas import HDFStore 
from bokeh.palettes import Spectral11 

# imports data to dataframe from our storage hdf5 file 
# our index column has no name, so this is assigned a name so it can be 
# referenced to for plotting 
store = pd.HDFStore('<file location>') 
df = pd.DataFrame(store['d1']) 
df = df.rename_axis('Time') 

#the number of columns is the number of lines that we will make 
numlines = len(df.columns) 

#import color pallet 
mypalette = Spectral11[0:numlines] 

# remove unwanted columns 
col_list = ['Column A', 'Column B'] 
df = df[col_list] 

# make a list of our columns 
col = [] 
[col.append(i) for i in df.columns] 

# make the figure, 
p = figure(x_axis_type="datetime", title="<title>", width = 800, height = 450) 
p.xaxis.axis_label = 'Date' 
p.yaxis.axis_label = '<units>' 

# loop through our columns and colours 
for (columnnames, colore) in zip(col, mypalette): 
    p.line(df.index, df[columnnames], legend = columnnames, color = colore) 

# creates an output file 
output_file('<output location>') 

#save the plot 
save(p) 
関連する問題