2015-05-16 7 views
2

Я рисую гистограммы с Bokeh (http://bokeh.pydata.org/en/latest/docs/user_guide.html). Это потрясающий инструмент, но в то же время я думаю, что он немного незрелый в настоящее время. У меня есть сводная гистограмма с 30 категориями по оси x и 40 классов, соответствующих каждой категории. Я не могу найти функцию, которая может позволить мне менять цвета (цвета прямо сейчас очень неоднозначны) и выровнять легенду сверху. В качестве альтернативы, если информационное окно можно открыть, когда кто-то нависнет над этим цветом, это может быть полезно. У меня есть очень мало информации, если это можно сделать.сложенные гистограммы в Bokeh

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

Мой пример похож на этот, за исключением, что у меня есть много переменных.

Любые предложения? UPDATE: Я попробовал себя ниже, но похоже, что есть проблема с 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

+0

bokeh.plotting.figure возвращает PlotObject. '' 'Bar''' не является членом PlotObject, что объясняет ваше исключение. '' '' '' '' '', Который вы ищете, можно импортировать с '' 'из bokeh.charts import Bar'''. – lukey

ответ

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) 
Смежные вопросы