2014-12-18 15 views
6

Tôi có đoạn mã ví dụ nhỏ sau đây cách sử dụng NumPy và bokeh:HoverTool cho nhiều loạt dữ liệu trong cốt truyện bokeh phân tán

import numpy as np 
import bokeh.plotting as bp 
from bokeh.objects import HoverTool 
bp.output_file('test.html') 

fig = bp.figure(tools="reset,hover") 
x = np.linspace(0,2*np.pi) 
y1 = np.sin(x) 
y2 = np.cos(x) 
s1 = fig.scatter(x=x,y=y1,color='#0000ff',size=10,legend='sine') 
s1.select(dict(type=HoverTool)).tooltips = {"x":"$x", "y":"$y"} 
s2 = fig.scatter(x=x,y=y2,color='#ff0000',size=10,legend='cosine') 
s2.select(dict(type=HoverTool)).tooltips = {"x":"$x", "y":"$y"} 
bp.show() 

Vấn đề là công cụ di chuột chỉ hoạt động cho đường cong cosin nhưng không cho sin.

Tôi biết rằng một lựa chọn sẽ được vẽ cả loạt togehter và thay đổi màu sắc của các điểm dữ liệu cosin:

import numpy as np 
import bokeh.plotting as bp 
from bokeh.objects import HoverTool 
bp.output_file('test.html') 

fig = bp.figure(tools="reset,hover") 
x = np.linspace(0,2*np.pi) 

y1 = np.sin(x) 
y2 = np.cos(x) 

x = np.array([x,x]).flatten() 
y = np.array([y1,y2]).flatten() 

blue = np.array('#0000ff').flatten() 
red = np.array('#ff0000').flatten() 
colors = np.array([blue.repeat(len(y1)),red.repeat(len(y1))]).flatten() 

s1 = fig.scatter(x=x,y=y,color=colors,size=10,legend='sine & cosine') 
s1.select(dict(type=HoverTool)).tooltips = {"x":"$x", "y":"$y"} 
bp.show() 

Nhưng sau đó tôi mất mục chú giải cho màu sắc thứ hai.

Làm cách nào để quản lý để có thể di chuột qua cả hai tập dữ liệu và xem chú giải công cụ tương ứng?

Cảm ơn!

Tối đa

Trả lời

9

Đây thực sự là lỗi được giải quyết trong bản gốc. Tôi đã được cố định trong PR này https://github.com/bokeh/bokeh/pull/1511 Bạn có thể cài đặt devel xây dựng của chúng tôi chứa các sửa chữa theo hướng dẫn này: http://bokeh.pydata.org/docs/installation.html#developer-builds

Ngoài ra, bạn sẽ cần phải sửa đổi mã đầu tiên của bạn để sử dụng mô hình thay vì đối tượng trong dòng thứ ba , như sau:

import numpy as np 
import bokeh.plotting as bp 
from bokeh.models import HoverTool 
bp.output_file('test.html') 

fig = bp.figure(tools="reset,hover") 
x = np.linspace(0,2*np.pi) 
y1 = np.sin(x) 
y2 = np.cos(x) 
s1 = fig.scatter(x=x,y=y1,color='#0000ff',size=10,legend='sine') 
s1.select(dict(type=HoverTool)).tooltips = {"x":"$x", "y":"$y"} 
s2 = fig.scatter(x=x,y=y2,color='#ff0000',size=10,legend='cosine') 
fig.select(dict(type=HoverTool)).tooltips = {"x":"$x", "y":"$y"} 
bp.show() 

Hy vọng điều đó sẽ hữu ích!

Chúc mừng.

Damian

CẬP NHẬT với ý kiến ​​dưới đây

+0

Cảm ơn rất nhiều! Làm việc như một say mê! – Max

+4

Tôi nhận được lỗi này: AttributeError: đối tượng 'generator' không có thuộc tính 'tooltips'. Tôi đã cập nhật bokeh của mình bằng lệnh này: pip install --pre -i https://pypi.anaconda.org/bokeh/channel/dev/simple bokeh --extra-index-url https://pypi.python.org/ đơn giản/ –

+1

Vấn đề tương tự như Hamid trên 0.10 – dranxo

11

Nếu bạn muốn có nhiều công cụ di chuột, bạn cần phải thêm nhiều công cụ di chuột, mỗi cấu hình cho một renderer khác nhau. Bạn có thể thêm chúng theo cách này:

p = figure() 

r1 = p.circle([1,2,3], [4,5,6], color="blue") 
p.add_tools(HoverTool(renderers=[r1], tooltips=TIPS)) 

r2 = p.square([4,5,6], [1,2,3], color="red") 
p.add_tools(HoverTool(renderers=[r2], tooltips=TIPS)) 
Các vấn đề liên quan