我有以下数据,用于捕获设备的当前类以及类更改是否受到影响。
Class Class_Change
S yes
S yes
G yes
P yes
P yes
V no
G yes
V no
V no
V yes
P no
现在我想在堆积条形图中的每个班级上显示“是/否”。我在excel中创建的下面的东西。该表是每个类的是/否计数,图表是它的堆积条形图。
我尝试过以下代码:
df2 = pd.DataFrame({'count': df_class.groupby(["Class","Class_Change"]).size()}).reset_index()
class = df2['Class'].tolist()
class_change = df2['Class_Change'].tolist()
count = df2['count'].tolist()
source = ColumnDataSource(data=dict(Classes = class, count=count, ClassChange = class_change,color = Viridis5))
plot = figure(x_range=tiers ,y_range=(0,max(count)), plot_height=350, plot_width = 800,title="Counts",
toolbar_location=None, tools="")
labels = LabelSet(x = 'Class', y= 'count' , text='count', level='glyph',
y_offset=0 , source=source, render_mode='canvas')
plot.vbar_stack(class_change, x='class', width=0.9, color='color', source=source, legend=[value(x) for x in class_change])
但它给出了错误:
AttributeError: 'Figure' object has no attribute 'vbar_stack'
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
散景参考文档提供了一个可以针对您的案例进行重新设计的示例here:
假设一个名为source的ColumnDataSource包含列2106和2017,那么>以下调用vbar_stack将创建两个堆叠的VBar渲染器:
p.vbar_stack(['2016', '2017'], x=10, width=0.9, color=['blue', 'red'], source=source)
vbar_stack
要求所提供的数据以特定方式构建。我们想要堆叠的值必须在列数据源中表示为列。像这样:
然后我们可以这样写:
plot.vbar_stack(['no', 'yes'],
x='Class',
width=0.9,
color=['blue', 'orange'],
line_color='white',
legend=['No', 'Yes'], # caps prevents calling columns
source=source)
但是,您遇到了另一个问题。 "'图'对象没有属性' vbar_stack'"告诉我们没有为您尝试调用此方法的图形对象定义vbar_stack
方法。最可能的原因是您在添加vbar_stack
之前使用的是Bokeh版本。在这种情况下,解决方案是使用pip或conda将bokeh更新为最新版本。