我可以在bokeh.chart.Area
图表中添加其他行吗?或者,等效地,有没有办法将图表转换为普通图形,所以我可以手动绘制它?
我有this question中的图表,需要添加额外的曲线。它应该显示为单行,而不是堆积区域图的一部分。
散景:0.11.1,
的Python:2.7
答案 0 :(得分:4)
您可以使用图表对象的bokeh.models.glyphs.Line
方法将新字形(在您的情况下为add_glyph(data_source, glyph)
个对象)添加到图表中:
# Create a data source
ds = bokeh.models.sources.ColumnDataSource(dict(x=df['date'], y=[0,3,2]))
# Define the line glyph
line = bokeh.models.glyphs.Line(x='x', y='y', line_width=4, line_color='blue')
# Add the data source and glyph to the plot
p.add_glyph(ds, line)
但是,如果您只是添加该代码,该行将显示在您的图中,但图例中不会有相应的条目。要获取图例条目,您需要将新条目添加到图表对象的内部_legend
列表中,然后添加更新的图例。
以下是您的示例:
from datetime import datetime
import pandas as pd
from bokeh.charts import Area, show, output_notebook
import bokeh.models.glyphs
import bokeh.models.sources
df = pd.DataFrame()
df['date'] = [datetime(2016, 1, 1), datetime(2016, 1, 2), datetime(2016, 1, 3)]
df['v1'] = [1, 2, 3]
df['v2'] = [4, 4, 3]
p = Area(df, x='date', y=['v1', 'v2'], title="Area Chart",
xscale='datetime', stack=True,
xlabel='time', ylabel='values',
# We need to disable the automatic legend and add the correct one later
legend=False)
# Create a data source
ds = bokeh.models.sources.ColumnDataSource(dict(x=df['date'], y=[0,3,2]))
# Define the line glyph
line = bokeh.models.glyphs.Line(x='x', y='y', line_width=4, line_color='blue')
# Add the data source and glyph to the plot
p.add_glyph(ds, line)
# Manually update the legend
legends = p._builders[0]._legends
legends.append( ('x',[p.renderers[-1]] ) )
# Activate the legend
p.legend=True
# Add it to the chart
p.add_legend(legends)
output_notebook()
show(p)