第一步 3:添加图例、文本和注释#
在前面的第一步指南中,你生成了不同的图形并定义了它们的外观。
在本节中,你将添加和设置图例和标题的样式。你还可以通过包含注释来向你的绘图添加其他信息。
添加和设置图例样式#
如果你在调用渲染器函数时包含legend_label
属性,Bokeh会自动向你的绘图添加图例。例如
p.circle(x, y3, legend_label="Objects")
这会向你的绘图添加一个包含“对象”条目的图例。
使用Legend
对象的属性来自定义图例。例如
from bokeh.plotting import figure, show
# prepare some data
x = [1, 2, 3, 4, 5]
y1 = [4, 5, 5, 7, 2]
y2 = [2, 3, 4, 5, 6]
# create a new plot
p = figure(title="Legend example")
# add circle renderer with legend_label arguments
line = p.line(x, y1, legend_label="Temp.", line_color="blue", line_width=2)
circle = p.scatter(
x,
y2,
marker="circle",
size=80,
legend_label="Objects",
fill_color="red",
fill_alpha=0.5,
line_color="blue",
)
# display legend in top left corner (default is top right corner)
p.legend.location = "top_left"
# add a title to your legend
p.legend.title = "Obervations"
# change appearance of legend text
p.legend.label_text_font = "times"
p.legend.label_text_font_style = "italic"
p.legend.label_text_color = "navy"
# change border and background of legend
p.legend.border_line_width = 3
p.legend.border_line_color = "navy"
p.legend.border_line_alpha = 0.8
p.legend.background_fill_color = "navy"
p.legend.background_fill_alpha = 0.2
# show the results
show(p)
自定义标题#
到目前为止,大多数示例都包含标题。你通过将title
参数传递给figure()
函数来实现这一点
p = figure(title="Headline example")
有多种方法可以设置标题文本的样式。例如
from bokeh.plotting import figure, show
# prepare some data
x = [1, 2, 3, 4, 5]
y = [6, 7, 2, 4, 5]
# create new plot
p = figure(title="Headline example")
# add line renderer with a legend
p.line(x, y, legend_label="Temp.", line_width=2)
# change headline location to the left
p.title_location = "left"
# change headline text
p.title.text = "Changing headline text example"
# style the headline
p.title.text_font_size = "25px"
p.title.align = "right"
p.title.background_fill_color = "darkgrey"
p.title.text_color = "white"
# show the results
show(p)
另请参阅
有关使用title
的更多信息,请参阅用户指南中的标题。在参考指南中,Title
的条目包含所有可用属性的列表。
使用注释#
注释是添加到绘图中的视觉元素,使绘图更易于阅读。有关各种注释的更多信息,请参阅用户指南中的注释。
一个例子是框注释。你可以使用框注释突出显示绘图的某些区域
要向绘图添加框注释,首先需要从bokeh.models导入BoxAnnotation
类
from bokeh.models import BoxAnnotation
接下来,创建BoxAnnotation
对象。如果你不为bottom
或top
传递值,Bokeh会自动将框的尺寸扩展到绘图的边缘
low_box = BoxAnnotation(top=20, fill_alpha=0.2, fill_color="#F0E442")
mid_box = BoxAnnotation(bottom=20, top=80, fill_alpha=0.2, fill_color="#009E73")
high_box = BoxAnnotation(bottom=80, fill_alpha=0.2, fill_color="#F0E442")
最后,你需要将BoxAnnotation
对象添加到现有的图形中。使用add_layout()
方法添加你的框
p.add_layout(low_box)
p.add_layout(mid_box)
p.add_layout(high_box)
完成后的代码如下所示
import random
from bokeh.models import BoxAnnotation
from bokeh.plotting import figure, show
# generate some data (1-50 for x, random values for y)
x = list(range(0, 51))
y = random.sample(range(0, 100), 51)
# create new plot
p = figure(title="Box annotation example")
# add line renderer
line = p.line(x, y, line_color="#000000", line_width=2)
# add box annotations
low_box = BoxAnnotation(top=20, fill_alpha=0.2, fill_color="#F0E442")
mid_box = BoxAnnotation(bottom=20, top=80, fill_alpha=0.2, fill_color="#009E73")
high_box = BoxAnnotation(bottom=80, fill_alpha=0.2, fill_color="#F0E442")
# add boxes to existing figure
p.add_layout(low_box)
p.add_layout(mid_box)
p.add_layout(high_box)
# show the results
show(p)
另请参阅
要了解有关 Bokeh 中不同类型注释的更多信息,请参阅用户指南中的注释。