Matplotlib 在Bokeh图中使用pandas数据框和vbar的堆叠条形图

Matplotlib 在Bokeh图中使用pandas数据框和vbar的堆叠条形图,matplotlib,dataframe,bokeh,Matplotlib,Dataframe,Bokeh,我正在matplotlib中查找以下绘图的bokeh版本(使用vbar): import pandas as pd %matplotlib inline data = [ ['201720', 'cat1', 20], ['201720', 'cat2', 30], ['201720', 'cat3', 40], ['201721', 'cat1', 20], ['201721', 'cat2', 0], ['201721', 'cat3', 4

我正在matplotlib中查找以下绘图的bokeh版本(使用vbar):

import pandas as pd
%matplotlib inline

data = [
    ['201720', 'cat1', 20],
    ['201720', 'cat2', 30],
    ['201720', 'cat3', 40],
    ['201721', 'cat1', 20],
    ['201721', 'cat2', 0],
    ['201721', 'cat3', 40],    
    ['201722', 'cat1', 50],
    ['201722', 'cat2', 60],
    ['201722', 'cat3', 10],    
]

df = pd.DataFrame(data, columns=['week', 'category', 'count'])

pt = df.pivot('week', 'category', 'count')

pt.plot(kind='bar', stacked=True)


我尝试过谷歌搜索,但找不到简单的解决方案。

我认为以下代码是目前为止我能做的最好的代码:

from bokeh.plotting import figure, output_file, show
from bokeh.models import ColumnDataSource
from bokeh.models.ranges import FactorRange
import pandas as pd

data = [
    ['201720', 'cat1', 20],
    ['201720', 'cat2', 30],
    ['201720', 'cat3', 40],
    ['201721', 'cat1', 20],
    ['201721', 'cat2', 0],
    ['201721', 'cat3', 40],
    ['201722', 'cat1', 50],
    ['201722', 'cat2', 60],
    ['201722', 'cat3', 10],
]

df = pd.DataFrame(data, columns=['week', 'category', 'count'])

pt = df.pivot('week', 'category', 'count')

pt = pt.cumsum(axis=1)

output_file("lines.html", title='Dashboard')

p = figure(title="count",
           x_axis_label='week', y_axis_label='category',
           x_range = FactorRange(factors=list(pt.index)),
           plot_height=300, plot_width=500)

p.vbar(x=pt.index, bottom=0, top=pt.cat1, width=0.2, color='red', legend='cat1')
p.vbar(x=pt.index, bottom=pt.cat1, top=pt.cat2, width=0.2, color='blue', legend='cat2')
p.vbar(x=pt.index, bottom=pt.cat2, top=pt.cat3, width=0.2, color='green', legend='cat3')


show(p)
生成的绘图如下所示:

包括vbar(),Bokeh绘图方法似乎不支持“矢量化输入”,或者我遗漏了什么。这真的是最简单的方法吗