Использование генератора петель для построения графика рассеяния Боке с категориальными значениями - PullRequest
0 голосов
/ 03 января 2019

Я хотел бы использовать цикл в качестве генератора для создания отдельных глифов для создания точечной диаграммы. Мои значения 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 голосов
/ 09 января 2019

Должен использоваться объект ColumnDataSource.Вот способ реализовать генератор для значений y с категориальными значениями x с использованием кадра данных pandas.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...