Plot Bokeh:当类别不共享同一索引或x轴参考时,如何绘制多线图(已更新)

Plot Bokeh:当类别不共享同一索引或x轴参考时,如何绘制多线图(已更新),plot,bokeh,line-plot,Plot,Bokeh,Line Plot,我正在尝试使用下面的代码在Bokeh创建一个多线图 生成绘图,但不显示数据 我想得到的是每个项目的线条图。我可以在一些样本的情况下手动执行此操作,制作单独的线图。但是我想在有相对大量的类别(“项目”,在下面显示的数据表中)的情况下自动执行此操作 谢谢你的反馈 import pandas as pd from bokeh.core.properties import value from bokeh.plotting import figure, show from bokeh.io import

我正在尝试使用下面的代码在Bokeh创建一个多线图

生成绘图,但不显示数据

我想得到的是每个项目的线条图。我可以在一些样本的情况下手动执行此操作,制作单独的线图。但是我想在有相对大量的类别(“项目”,在下面显示的数据表中)的情况下自动执行此操作

谢谢你的反馈

import pandas as pd
from bokeh.core.properties import value
from bokeh.plotting import figure, show
from bokeh.io import output_notebook
from bokeh.models import ColumnDataSource

bokeh_test=pd.read_excel(data, 'bokeh')
display(bokeh_test)

item    x   y
A   4   0.00
A   5   0.00
A   36  39.88
A   66  46.20
A   97  32.93
A   127 25.78
A   158 21.92
A   189 18.64
B   6   4.47
B   7   1.17
B   8   0.00
B   38  45.70
B   68  61.68
B   98  43.11
B   129 25.05
B   160 33.97
B   190 32.06
B   221 29.22
B   251 24.94

output_notebook()
source=ColumnDataSource(data=bokeh_test)

p = figure(plot_height=400, 
            plot_width=400,
            x_axis_label='x', 
            y_axis_label='y'
           )

p.multi_line(xs='x', 
        ys='y',
        source=source
       )

show(p)
更新:

我找到了绘制数据的方法。这是更新后的代码和绘图图像。我使用的是Bokeh版本1.3.4。当切换到最新版本(2.2.3)时,我得到一个关于CDSView与线图不兼容的错误(显然是因为数据不连续或点未连接)


尝试将
x_range=['A','B']
添加到调用
图(…)
。稍后,您将能够通过分配到
p.x_range.factors
来更新它。嗨@EugenePakhomov,我更新了原始帖子。我找到了我想做的事情的答案,但是现在我在切换到更新版本的Bokehy时出错了。您的更新与原始问题完全无关,所以您应该问一个新问题。不管怎样,你得到的不是一个错误,而是一个警告,一个自我描述的警告。
output_notebook()

source=ColumnDataSource(data=bokeh_test)

list1=np.unique(source.data['item']).tolist() # Getting a list for using with CDSView filters
# result = ['A', 'B']

tools = 'save, pan, box_zoom, reset, wheel_zoom,tap'
    
           
p = figure(plot_height=400, 
           plot_width=400,
           x_axis_label='x', 
           y_axis_label='y',
           toolbar_location='above',
           tools=tools
           )

color=['red', 'blue', 'green']

for i in range(len(list1)):
    view=CDSView(source=source, filters=[GroupFilter(column_name='item', group=list1[i])])
    p.line(x='x', 
           y='y',
           source=source,
           line_color=color[i],
           view=view,
           legend=list1[i],
           line_width=2
          )