散景中的标签文本位置

时间:2021-01-20 11:13:56

标签: python bokeh

我想将 MyText Label 粘贴到我图的右下角 对于给定的文本和给定的字体大小(如“这太有趣”的图片所示,字体大小为“20px”和小字符。我通过二分法找到了好位置)。 我需要传递给 x 的函数位置是什么? 这应该取决于 len(MyText)、text_font_size 和图形宽度 ...

from bokeh.models import ColumnDataSource, Label, LabelSet, Range1d
from bokeh.plotting import figure, output_file, show
width,height=400,300
p = figure(plot_width=width, plot_height=height)
MyText='this is super fun'
my_font_size = "20px"
labels = Label(x=width/2+25, y=0,x_units='screen', y_units='screen', text=MyText,text_font_size=my_font_size)
p.add_layout(labels)
show(p)

bottom right position

1 个答案:

答案 0 :(得分:3)

实际上,我认为没有任何 100% 可靠的方法可以做到这一点。

您可以将 text_align 设置为 "right" 这有助于:

p = figure(plot_width=width, plot_height=height)
labels = Label(x=width-50, y=0, 
               x_units="screen", y_units='screen', text_align="right", 
               text=MyText,text_font_size=my_font_size)

请注意,上面的 -50 是(粗略地)考虑“绘图区域”(即工具栏所在的位置)右侧空间的宽度。但是,如果您在左侧添加 y 轴,您也需要考虑到这一点,如果您允许缩放,则左侧空间可以扩大和缩小以适应更大或更小的轴标签,这意味着您 不能用前面的单个常量可靠地说明该空间。您可以将 min_border 值设置得更大,这可能会缓解某些缩放/平移范围的问题。

此外,以上假设绘图大小调整模式不是“响应式”。如果绘图本身可以调整大小,那么屏幕单位中的常数值将永远无法工作。

如果您可以修复 x 范围开始/结束(或添加“额外”范围),那么您可以使用“数据”单位将范围结束值右对齐。但是,如果您允许缩放或平移,则标签将移动以固定在该数据位置。

主要问题是“inner_width”仅在浏览器中计算。它不适用于 Python 代码,因为它不存在于浏览器之外。真正需要的是一些特殊的约定或配置来将“inner_width”指定为一个符号概念,无论平移、缩放还是调整大小,都可以更新为任何必要的内容。我建议制作一个 GitHub issue 来提出此功能。

与此同时,我认为任何解决方案都需要在“px”中使用固定字体大小进行一些试验和错误,并且在可能的情况下最好限制平移/缩放。