我想将 MyText 标签粘贴到我的图形的右下部分,以获得给定的文本和给定的字体大小(如图所示“这非常有趣”,字体大小为“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)
Run Code Online (Sandbox Code Playgroud)
实际上,我认为没有任何 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)
Run Code Online (Sandbox Code Playgroud)
请注意,上面的 -50 是(大致)考虑“绘图区域”右侧(即工具栏所在位置)的空间宽度。但是,如果您在左侧添加 y 轴,则也需要考虑到这一点,并且如果您允许缩放,则左侧空间可以增大和缩小以容纳更大或更小的轴标签,这意味着您不能前面用一个常数可靠地解释了该空间。您可以将min_border值设置得更大,这可能会缓解某些范围的缩放/平移的问题。
另外,上面假设绘图大小调整模式不是“响应式”的。如果绘图本身可以调整大小,那么屏幕单位中的恒定值将不再起作用。
如果您可以修复 x 范围开始/结束(或添加“额外”范围),那么您可以使用“数据”单位右对齐到范围结束值。但是,如果您允许缩放或平移,那么标签将移动并固定在该数据位置。
主要问题是“inner_width”仅在浏览器中计算。它不可用于 Python 代码,因为它不存在于浏览器之外。真正需要的是一些特殊的约定或配置,以将“inner_width”指定为符号概念,更新为任何必要的内容,无论平移、缩放或调整大小。我建议创建一个GitHub 问题来提议此功能。
同时,我认为任何解决方案都将涉及一些以“px”为单位的固定字体大小的尝试和错误,并且如果可能的话,理想情况下还限制平移/缩放。