我编写了下面的代码,根据Pandas数据帧中的数据生成折线图。数据帧的索引是一个时间序列。
下面的代码运行良好,但我决定再添加一个数据系列(来自我的数据框中的第三列,在代码中称为“Col3”)。我希望第三个系列在一个单独的Y轴上。但是,当我添加代码来实现这一点时,由***突出显示如下,Bokeh似乎无法生成情节。有谁知道我做错了什么?
from bokeh.plotting import figure, output_file, show, save
from bokeh.models import ColumnDataSource
from bokeh.models import Range1d, LinearAxis
import pandas as pd
from pandas import HDFStore
from bokeh.palettes import Spectral11
store = pd.HDFStore(<dataframe location>)
df = pd.DataFrame(store['d1'])
df = df.rename_axis('Time')
df.fillna(0)
numlines = len(df.columns)
#import colour pallete
mypalette = Spectral11[0:numlines]
# remove unwanted columns
col_list = ['Col1', 'Col2', 'Col3']
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="<Plot Title>", width = 800, height = 450)
p.xaxis.axis_label = 'Date'
p.yaxis.axis_label = '<Name of Primary Y Axis>'
*** # add extra y axis
p.extra_y_ranges = {'Col3': Range1d(start=0, end=0.25)}
p.add_layout(LinearAxis(y_range_name='Performance ratio %'), 'right') ***
# loop through our columns and colors
for (columnnames, colore) in zip(col, mypalette):
p.line(df.index, df[columnnames], legend = columnnames, color = colore )
# creates an output file
output_file('<outputlocation>')
#save the plot
save(p)
供参考,我的数据框如下所示:
Dataframe看起来像这样:
Time Col1 Col2 Col3 Col4
29/11/2016 00:00 4 41 41 55
29/11/2016 01:00 55 15 61 81
29/11/2016 02:00 51 75 2 4
29/11/2016 03:00 21 21 51 9
etc.
答案 0 :(得分:1)
一些问题:
执行此操作时:
p.extra_y_ranges = {'Col3': Range1d(start=0, end=0.25)}
p.add_layout(LinearAxis(y_range_name='Performance ratio %'), 'right')
您在第一行创建另一个名为y_range
的{{1}}。您需要在第二行使用此名称,而不是Col3
。
(或者更好的是,也可以在第一行命名为Performance ratio %
。)
此外,在循环中,将所有3个系列放在同一个y轴上,您需要为第三个指定Performance ratio %
。
以下作品:
y_range_name='Col3'