Как да свържете диаграми на разсейване чрез персонализиран атрибут с библиотека на Bokeh python?

Имам две точкови диаграми, които използват инструмента за избор на кутия и са свързани чрез x-стойност. Опитвам се да свържа графиките чрез стойност на ID. Има ли прост начин да направите това със съществуващия API на Bokeh?

import numpy as np

from bokeh.plotting import figure, output_file, show, gridplot
from bokeh.models import ColumnDataSource

N = 100
max = 100
x = np.random.random(size=N) * max
y1 = np.random.random(size=N) * max
y2 = np.random.random(size=N) * max
id = np.random.random(size=N) * max

output_file("scatter.html")

source = ColumnDataSource(data=dict(x=x, y1=y1, y2=y2))

TOOLS="box_select"

left = figure(width=400, height=400, tools=TOOLS, x_range=(0,100), y_range=(0,100))
left.circle("x", "y1", source=source, size=10, fill_color="black", line_color=None)

right = figure(width=400, height=400, tools=TOOLS, x_range=(0,100), y_range=(0,100))
right.circle("x", "y2", source=source, size=10, fill_color="black", line_color=None)

p = gridplot([[left, right]])
show(p) 

person user2829582    schedule 07.12.2015    source източник


Отговори (1)


Двата диаграма не са „свързани чрез x-координата“: просто изглежда така, защото точките ви случайно имат една и съща x-координата и в двата графика. Ако присвоите две различни x-координати (x1 и x2) на всяка от точките от данни, ще видите, че те всъщност са свързани чрез номера на реда си в таблицата с данни (не е необходимо ръчно да присвоявате id) :

import numpy as np

from bokeh.plotting import figure,output_notebook, show, gridplot
from bokeh.models import ColumnDataSource
output_notebook()
N = 100
max = 100
x1 = [0,10,20,30]
x2 = [50,20,10,70]
y1 = [10,10, 20, 20]
y2 = [30,0,30,0]

source = ColumnDataSource(data=dict(x1=x1, x2=x2, y1=y1, y2=y2))

TOOLS="box_select"

left = figure(width=400, height=400, tools=TOOLS, x_range=(0,100), y_range=(0,100))
left.circle("x1", "y1", source=source, size=10, fill_color="black", line_color=None)

right = figure(width=400, height=400, tools=TOOLS, x_range=(0,100), y_range=(0,100))
right.circle("x2", "y2", source=source, size=10, fill_color="black", line_color=None)

p = gridplot([[left, right]])
show(p)
person Jake    schedule 08.12.2015