如何在Bokeh(Python)中绘制水平条形图

时间:2015-11-16 13:54:54

标签: python pandas matplotlib bokeh seaborn

我有这些数据:

data = {'Cities': {'Des_Moines': 80.0, 'Lubbock': -300.0, 'Minneapolis': 85.7,
                        'Orange_County': 80.0, 'Salt_Lake_City': 81.8, 'San_Diego': 80.0, 
                        'San_Francisco': -400.0, 'Troy': -400.0, 'Wilmington': -300.0}}

我使用Seaborn绘制了它,看起来很棒。

df_data = pd.DataFrame(data).sort_values('Cities', ascending=False)
sns.barplot(x='Cities', y=df_data.index, data=df_data, label='Cities', palette='Greens')

enter image description here

但是,我想使用Bokeh嵌入这是一个Flask网络应用。

我在horizontal barplot找不到Bokeh。即使翻转xy轴似乎也不起作用。这就是我所做的: *从df_data转换9x11x9。然而,我仍然没有得到任何好东西。

bar = Bar(df_data.transpose(), df_data.columns.tolist(), stacked=False, responsive=True)

script, div = components(bar)

enter image description here

请注意,我仍然没有Horizontal并且我的category轴被搞砸了。

有人可以帮助进一步修改吗?

4 个答案:

答案 0 :(得分:7)

It's pretty easy to do with rect glyphs. Note that when you set the y_range with categorical values, the indexing of these in the bokeh plot starts at 1. That's why the counter "j" starts at 1.

build: ba

ba: lex.yy.c
 <TAB> gcc -o ba lex.yy.c -lfl

lex.yy.c: ba.lex
 <TAB>  flex ba.lex

clean: 
 <TAB> rm lex.yy.c ba *.o

enter image description here

答案 1 :(得分:2)

您可以使用rect或quad glyphs进入低级别并重建水平条形图。 上面的代码是暂定的,在y轴上缺少城市标签(现在不再有时间......)。但我希望这可以提供帮助。

intersectObjects

答案 2 :(得分:0)

AFAIK没有一个。这是我最近提到的#1856。目前只有垂直条charts可用:

  

条形图又名水平条形图(我们目前没有图表)

     

柱形图又名垂直条形图(当前为条形图)

备注:转置数据将按照您的尝试运行,这是预期的。

答案 3 :(得分:0)

我认为没有。 一个hack可能是使用rotate()的自定义CSS http://www.w3schools.com/css/css3_2dtransforms.asp