在Bokeh中堆积条形图

时间:2015-05-16 07:01:32

标签: python bar-chart data-visualization bokeh

我正在使用Bokeh(http://bokeh.pydata.org/en/latest/docs/user_guide.html)绘制条形图。这是一个了不起的工具,但与此同时我认为它现在有点不成熟。我有一个堆积条形图,x轴上有30个类别,每个类别对应40个类别。我无法找到能够让我改变颜色的功能(现在颜色非常模糊)并将图例与顶部对齐。或者,如果某人悬停在该颜色上时可以打开信息框,这可能会有所帮助。如果可以的话,我有一点线索。

http://bokeh.pydata.org/en/latest/docs/user_guide/charts.html#bar

我的例子与此类似,只是我有很多变量。

有什么建议吗? 更新: 我尝试了以下解决方案,但看起来Bar()存在一些问题。它无法识别Bar()。

import bokeh.plotting as bp
data24 =OrderedDict()
for i in range(10):
    data24[i] = np.random.randint(2, size=10)
figut = bp.figure(tools="reset, hover") 
s1 = figut.Bar(data24, stacked= True,color=colors )
s1.select(dict(type=HoverTool)).tooltips = {"x":"$index"}

运行它我得到:

AttributeError: 'Figure' object has no attribute 'Bar'

这是我得到的酒吧颜色。没有办法区分颜色。 enter image description here

2 个答案:

答案 0 :(得分:1)

我已经在bokeh source code进行了挖掘,似乎bokeh.charts.Bar方法除了一些关键字参数之外。这些属性可以是Builder类的属性,其中包含palette属性,定义为here。您应该能够将此作为参数传递给Bar

Bar(...,palette=['red','green','blue'],...)

通过修改散景提供的example来测试这个:

from collections import OrderedDict

import pandas as pd

from bokeh.charts import Bar, output_file, show 
from bokeh.sampledata.olympics2014 import data

df = pd.io.json.json_normalize(data['data'])

# filter by countries with at least one medal and sort 
df = df[df['medals.total'] > 0] 
df = df.sort("medals.total", ascending=False)

# get the countries and we group the data by medal type 
countries = df.abbr.values.tolist() 
gold = df['medals.gold'].astype(float).values
silver = df['medals.silver'].astype(float).values
bronze = df['medals.bronze'].astype(float).values

# build a dict containing the grouped data 
medals = OrderedDict(bronze=bronze, silver=silver, gold=gold)

output_file("stacked_bar.html")

bar = Bar(
    medals, countries, title="Stacked bars", stacked=True, 
    palette=['brown', 'silver', 'gold'])

show(bar)

答案 1 :(得分:0)

原始问题和其他答案都已过时。 time API已于多年前弃用并删除。有关现代散景中堆积的条形图,请参见Handling Categorical Data

中的部分

这是一个完整的示例:

bokeh.charts

enter image description here