簡體   English   中英

散景中帶有 CategoricalAxis 的多線軸 label?

[英]Multiline axis label with CategoricalAxis in Bokeh?

我正在研究 Bokeh plot,並且幾乎按照我想要的方式得到了它。 但是,我正在努力添加多線軸標簽。

這是我到目前為止所擁有的:

import bokeh.io
from bokeh.plotting import gridplot, figure, output_file, show, output_notebook
from bokeh.models import ColumnDataSource, BoxAnnotation, CategoricalAxis, FactorRange
from bokeh.embed import components

x = ['label1','label2','label3','label4','label5','label6','label7', 'Trying for a multiline label']
y = [1.0, 2.7, 1.2, 4.5, 1.5, 2.2, 1.8, 4.6]
p = figure(x_range=[*x], y_range=(0, 5), plot_height=400, plot_width=550)
dots = p.circle(x=x, y=y, color='black',size=10)
line = p.line(x=x, y=y, color='black')

numbers = [str(x) for x in y]
p.extra_x_ranges = {"extra_numbers": FactorRange(factors=numbers)}
p.add_layout(CategoricalAxis(x_range_name="extra_numbers"), 'below')
p.title.text = 'Plot'
p.title.text_font_size = "25px"
p.title.text_color = "black"
p.title.align = "center"

low_box = BoxAnnotation(top=2, fill_alpha=0.1, fill_color='green')
mid_box = BoxAnnotation(bottom=2, top=3, fill_alpha=0.1, fill_color='orange')
high_box = BoxAnnotation(bottom=3, fill_alpha=0.1, fill_color='red')

p.add_layout(low_box)
p.add_layout(mid_box)
p.add_layout(high_box)

show(p)

上面的代碼產生以下 plot: 在此處輸入圖像描述

您可以清楚地看到最后一個 label 沒有正確包裹,我還沒有設法弄清楚我們如何讓它包裹並創建一個多線軸 label。 是否有捷徑可尋? 我想出的最佳替代解決方案是嘗試使用垂直標簽,但正如您所見,它們看起來不太好,並且弄亂了文本下方的第二個軸:

from bokeh.models import CategoricalAxis, FactorRange
from bokeh.plotting import figure, show
from math import pi

x = ['label1','label2','label3','label4','label5','label6','label7', 'Trying for a multiline label']
y = [1.0, 2.7, 1.2, 4.5, 1.5, 2.2, 1.8, 4.6]
p = figure(x_range=[*x], y_range=(0, 5), plot_height=900)
dots = p.circle(x=x, y=y, color='black',size=10)
line = p.line(x=x, y=y, color='black')
p.xaxis.major_label_orientation = pi/2
p.xaxis.major_label_text_font_size = "1.4em"

p.xaxis.axis_line_width = 2
p.yaxis.axis_line_width = 2
numbers = [str(x) for x in y]
p.extra_x_ranges = {"extra_numbers": FactorRange(factors=numbers)}
p.add_layout(CategoricalAxis(x_range_name="extra_numbers"), 'below')
show(p)

現在圖表如下所示: 在此處輸入圖像描述

當然,一個簡單的解決方法是切換軸的順序,使數字在上面,標簽在下面; 然而,這仍然是一個隨意的解決方案,並不是我真正想要的。 我真的很想在 label 中換行。 例如,下面的 plot 與我想要完成的類似(可以在此處找到此非散景圖的代碼)。 在此處輸入圖像描述

任何幫助或建議將不勝感激!

庫存 Bokeh 軸模型無法使用多線標簽。 為了實現這一點,您必須創建一個自定義Axis子類並自己管理所有包裝,因為canvas上下文不以任何方式支持它。

作為替代方案,您可以嘗試有角度的標簽。 這種方法的缺點是必須找出 plot 的正確偏移量,以確保標簽不會被切斷。

自過去幾個版本以來,多行標簽一直在散景中工作(我相信自 3.3 以來)。 您需要自己在 label 字符串的適當位置添加換行符“\n”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM