我想使用循环作为生成器来创建单个字形以生成散点图。我的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进行交互式绘图。
谢谢!
答案 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)