在ColumnDataSource

时间:2017-11-09 10:23:38

标签: python bokeh

我有两个相同单位的变量我想在同一个x轴上用Bokeh绘图。看起来像plot.multi_line是正确的工具,但我无法从doc找到正确的语法。我尝试过(从文档中收集):

# df is a pandas DataFrame with contains 3 columns x, y1, y2

source = ColumnDataSource(data=df)
plot=figure()   
plot.multi_line(['x','x'], ['y1', 'y2'],  source=source)

或者试过:

plot.multi_line(xs=['x','x'], ys=['y1', 'y2'],  source=source)

结果

  

RuntimeError:   向字形方法提供用户定义的数据源和可迭代值是   不可能。之一:

     

直接将所有数据作为文字传递:

     

p.circe(x = a_list,y = an_array,...)

     

或者,将所有数据放在ColumnDataSource中并传递列名:

     

source = ColumnDataSource(data = dict(x = a_list,y = an_array))      p.circe(x ='x',y ='x',source = source,...)

Doc给出了这个例子:

p.multi_line([[1, 3, 2], [3, 4, 6, 6]], [[2, 1, 4], [4, 7, 8, 5]],
         color=["firebrick", "navy"], alpha=[0.8, 0.3], line_width=4)

我显然不希望使用原始列表传递值。我不明白,我需要一些帮助。

2 个答案:

答案 0 :(得分:6)

好的,我觉得很傻,只是这样做:

    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "YourTable")
    fetchRequest.returnsObjectsAsFaults = false

    do
    {
        let results = try context.fetch(fetchRequest)
        for managedObject in results
        {
            let managedObjectData:NSManagedObject = managedObject as! NSManagedObject
            context.delete(managedObjectData)
        }
    } catch let error as NSError {
        print("Detele all my data in \(entity) error : \(error) \(error.userInfo)")
    }

可以做到这一点,就像在Matplotlib中那样......我对这个“plot.multi_line”函数感到困惑(我现在不明白为什么我会用它,但是很好)。

答案 1 :(得分:0)

我想您必须对源进行一些定义:


source = ColumnDataSource({
    'x_mult': [df['x1'].to_list(), df['x2'].to_list()],
    'y_mult': [df['y1'].to_list(), df['y2'].to_list()],
})
plot=figure() 
plot.multi_line('x_mult', 'y_mult',  source=source)

但是当您的y共享相同的x值时,我想使用plot.line会更合适:


source = ColumnDataSource(data=df)
plot=figure()   
plot.line(x='x', y=['y1', 'y2'],  source=source)