在Bokeh条形图中选择条形顺序

时间:2015-10-14 21:02:51

标签: python charts bokeh

作为尝试学习使用Bokeh的一部分,我试图制作一个简单的条形图。我按照一定的顺序(一周中的几天)传递标签,而Bokeh似乎按字母顺序排序。如何按原始列表的顺序显示条形图?

from bokeh.plotting import show
from bokeh.io import output_notebook
from bokeh.charts import Bar
from collections import OrderedDict
import calendar 

output_notebook()

data = OrderedDict()
data['values'] = [2,3,4,5,6,7,8] #values only ascending to make correct graph clear
data['days'] = [calendar.day_name[i-1] for i in range(7)]
p = Bar(data, label='days', values='values', 
         title='OrderedDict Input',xlabel="Day", ylabel="Value")
show(p)

Output generated

4 个答案:

答案 0 :(得分:7)

来自Bokeh项目维护者的注意事项: 这个答案指的是一个不应该在任何新代码中使用的过时和弃用的API。有关使用现代和完全支持的Bokeh API创建条形图的信息,请参阅其他回复。

以下是如何使用图表界面保留示例中标签的原始顺序,并使用Bokeh 0.11.1进行测试。

from bokeh.plotting import show
from bokeh.io import output_notebook
from bokeh.charts import Bar
from collections import OrderedDict
import calendar 
from bokeh.charts.attributes import CatAttr

output_notebook()

data = OrderedDict()
data['values'] = [2,3,4,5,6,7,8] #values only ascending to make correct graph clear
data['days'] = [calendar.day_name[i-1] for i in range(7)]
p = Bar(data, label=CatAttr(columns=['days'], sort=False), 
        values='values',title='OrderedDict Input',xlabel="Day", ylabel="Value")
show(p)

答案 1 :(得分:2)

我不喜欢Bar图的高级图表。它们不是很容易定制的。 手工制作它们'通常更容易 - 而且不再需要更长时间。这就是我要做的事情:

from bokeh.plotting import figure
from bokeh.io import output_file, show
import calendar

values = [2,3,4,5,6,7,8]
days = [calendar.day_name[i-1] for i in range(1,8)]

p = figure(x_range=days)
p.vbar(x=days, width=0.5, top=values, color = "#ff1200")

output_file('foo.html')
show(p)

产生:

enter image description here

答案 2 :(得分:2)

通常,对于任何绘图,您应该能够明确指定x(或y)范围。如果您想完全忽略Bar图表类(由于提到的原因,这不是世界上最糟糕的想法),tk's answer会很有用。如果您的数据列已按您希望的方式排序,则user666's answer会很有用。否则,您可以自己指定订单:

周从星期日开始:

from bokeh.models import FactorRange
...
p.x_range = FactorRange(factors=data['days'])

Sunday start

周从星期一开始:

p.x_range = FactorRange(factors=data['days'][1:] + [data['days'][0]])

enter image description here

答案 3 :(得分:0)

这是与user666的答案相关的评论(我没有足够的信用来添加评论。)

我认为OrderedDict的使用在这里没有帮助,因为它只记住键被插入的顺序(即“值”出现在'天'之前),而不是序列的顺序是与之关联的值那些钥匙。

另外,仅供参考,我们在这里的散景GitHub网站上讨论了这个问题:https://github.com/bokeh/bokeh/issues/2924和这里:https://github.com/bokeh/bokeh/pull/3623

相关问题