使用for循环生成器制作具有分类值的Bokeh散点图

时间:2019-01-02 21:05:22

标签: python bokeh scatter-plot

我想使用循环作为生成器来创建单个字形以生成散点图。我的x值是分类值。我从下面的简单示例开始。

from bokeh.plotting import figure, show

xvals = ['one', 'two', 'three']
p = figure(x_range=xvals)

i=1
for value in xvals:
   p.circle(x=value,y=i)
   i+=1

show(p)

这导致Bokeh抛出错误:

  

Bokeh错误尝试检索不存在的字段的属性数组   “一个”

我猜可以通过使用columndatasource并将其作为源传递给字形呈现函数来进行排序。我尝试了各种方法来构造数据并将其传递给渲染器,但是没有运气。想将columndatasource对象传递给以下格式的字典:

data = {'x_values': [1, 2, 3, 4, 5],
    'y_values': [6, 7, 2, 3, 6]}

我无法在生成器之前调用y值的完整列表,因为它们将在我的实函数的循环期间计算出来。有没有办法解决?使用pyplot超级容易做到这一点,但我需要使用Bokeh进行交互式绘图。

谢谢!

1 个答案:

答案 0 :(得分:0)

必须使用ColumnDataSource对象。这是一种使用pandas数据框为y值和分类x值实现生成器的方法。

import pandas
from bokeh.plotting import figure, show
from bokeh.models import ColumnDataSource
from random import randrange

xvals = ['one', 'two', 'three', 'four']
yvals = []

#Here is the generator function
for num in xvals:
    yvals.append(randrange(0,10))

#Construct a dataframe from generator function        
df=pandas.DataFrame({'XVals': xvals, 'YVals': yvals})
source = ColumnDataSource(df)

#Create the plot
p = figure(x_range=xvals)
p.circle(x='XVals',y='YVals', source=source)
show(p)