将自定义图例添加到散景栏

时间:2016-08-02 22:29:22

标签: python pandas bokeh

我有熊猫系列:

function formatStation($number){
    $number = sprintf('%06.2f', $number);

    $number = preg_replace('/([0-9])([0-9]{2}\.[0-9]{2})/', '$1+$2', $number);
    return $number;
} 

我想在Bokeh中绘制条形图:>>> etypes 0 6271 1 6379 2 399 3 110 4 4184 5 1987 。但是对于图例,我只得到p = Bar(etypes)索引号,我试图用这个字典解密:

etypes

将其传递给标签参数:legend = { 0: 'type_1', 1: 'type_2', 2: 'type_3', 3: 'type_4', 4: 'type_5', 5: 'type_6', } ,但它没有效果。传递p = Bar(etypes, label=legend)也不起作用。

如何在散景条形图中为pandas系列添加自定义图例?

2 个答案:

答案 0 :(得分:2)

* Bokeh项目维护者的注意事项:这个答案指的是一个过时的,已弃用的API。有关使用现代和完全支持的Bokeh API创建条形图的信息,请参阅其他响应。

将系列转换为DataFrame,将图例添加为新列,然后在引号中引用该列名称。例如,如果您调用数据框' etypes',数据列'值'以及您的图例列'图例':

p = Bar(etypes, values='values', label='legend') 

如果绝对必须使用系列,可以将系列传递给数据对象,然后将其传递给散景图。例如:

legend = ['type1', 'type2', 'type3', 'type4', 'type5', 'type6']
data = {
    'values': etypes
    'legend': legend
}
p = Bar(data, values='values', label='legend')

答案 1 :(得分:1)

bokeh.charts API(包括Bar)已弃用,并于2017年从Bokeh中删除。它不受维护且不受支持,此时不应出于任何原因使用。使用您的数据的图例条形图可以使用支持良好的bokeh.plotting API完成:

from bokeh.palettes import Spectral6
from bokeh.plotting import figure, show

types = ["type_%d" % (x+1) for x in range(6)]
values = [6271, 6379, 399, 110, 4184, 1987]

data=dict(types=types, values=values, color=Spectral6)

p = figure(x_range=types, y_range=(0, 8500), plot_height=250)
p.vbar(x='types', top='values', width=0.9, color='color', legend="types", source=data)

p.xgrid.grid_line_color = None
p.legend.orientation = "horizontal"
p.legend.location = "top_center"

show(p)

enter image description here

有关bokeh.plotting中对条形图和分类图的大幅改进支持的详细信息,请参阅广泛的用户指南部分Handling Categorical Data