LabelSets中具有多种字体大小的散景图

时间:2019-07-13 23:36:34

标签: python bokeh

社区

我正在使用squarify + bokeh来构建TreeMap。我希望每个标签都具有不同的text_font_sizes,因为较大的正方形对于小的字体有很大的空间,而小的正方形有时对于中等字体来说不够大。

我已经尝试执行以下操作(图表中有10个项目):

plotsource = ColumnDataSource(
    data=dict(
        Xlab = Xlab,
        Ylab = Ylab,

        Share = Share,
        Colors = source.data['Colors'],
        LabelColors = source.data['LabelColors'],
        Labels = source.data['Labels'],
        FontSizes = ['10pt']*10,

    )
)

…

labels1 = LabelSet(x='Xlab', y='Ylab', text='Labels', level='glyph',
    text_font_style='bold', text_color='LabelColors', text_align = 'center', source=plotsource, text_font_size='FontSizes')

如果我使用text_font_size='10pt'可以正常工作,但不能使用数组。我只是对数组中的每个元素使用了相同的大小,以表明它不适用于数组。

有关如何解决此问题的任何线索?

1 个答案:

答案 0 :(得分:0)

确实不可能为text_font_size使用数组。我在回答中添加了一个丑陋的解决方法。如果要添加功能请求,可以在Github page上创建功能请求。

from bokeh.plotting import figure, show, output_file
from bokeh.models import ColumnDataSource, Range1d, LabelSet, Label

output_file("label.html", title="label.py example")

plotsource = ColumnDataSource(data=dict(Xlab=[66, 71, 72, 68, 58, 62],
                                    Ylab=[165, 189, 220, 141, 260, 174],
                                    Labels=['Mark', 'Amir', 'Matt', 'Greg', 'Owen', 'Juan'],
                                    LabelColors=['red', 'green', 'blue', 'purple', 'gold', 'pink'],
                                    FontSizes=['12pt', '14pt', '16pt', '18pt', '20pt', '22pt']))

p = figure(title='Dist. of 10th Grade Students at Lee High')
p.scatter(x='Xlab', y='Ylab', size=8, source=plotsource)
p.xaxis[0].axis_label = 'Weight (lbs)'
p.yaxis[0].axis_label = 'Height (in)'

labels1 = []

for x, y, label, color, fontsize in zip(plotsource.data['Xlab'], plotsource.data['Ylab'], plotsource.data['Labels'], plotsource.data['LabelColors'], plotsource.data['FontSizes']):
    labels1.append(Label(x=x, y=y, text=label, level='glyph', text_font_style='bold', text_color=color, text_align ='center', text_font_size=fontsize))
    p.add_layout(labels1[-1])

show(p)

enter image description here