2016-04-05 11 views
2

Bokeh'de çok fazla nokta çiziyorum ve farenin x,y koordinatlarını göstermesi için HoverTool rakamını araçların listesine ekledim. bir glife yakın.HoverTool() aracını kullanırken yalnızca bir araç ipucunu görüntüleme

Fare, birbirine yakın bir şekilde yerleştirilmiş bir grup glife yaklaştığında, glifler kadar çok sayıda ipucu elde ederim. Bunun yerine sadece bir araç ipucu istiyorum, en yakın gliften biri. arsa ile yavaş etkileşimde

  • , tarayıcı ile tüm ipuçları çok uzun bir araç ipucu, içinde
  • üretilir iken saplanıyor: çok sayıda puan için bu sonuçlar, çünkü bu, sadece bir sunum detay değil enter image description here

    import numpy.random 
    from bokeh.plotting import figure, output_notebook, show 
    from bokeh.models import HoverTool 
    output_notebook() 
    
    hover = HoverTool() 
    hover.tooltips = [("(x,y)", "($x, $y)")] 
    
    x = numpy.random.randn(500) 
    y = numpy.random.randn(500) 
    
    p = figure(tools=[hover]) 
    p.circle(x,y, color='red', size=14, alpha=0.4) 
    
    show(p) 
    
    : aynı bilgi davranışı çoğaltmak için koduyla, birçok glifleri

örneği aşağıda imlecin yakın olan çok kez tekrarlanır

+0

'0.12' sürümüne gidecek hover araç ipucu tercihleri ​​için geliştirilmiş ilke tabanlı seçenekler eklemek için açık bir PR var. – bigreddot

+0

Bu konuda herhangi bir güncelleme, yani HoverTool'da gösterilen veri noktalarının sayısını nasıl sınırlandırabilirsiniz? – tuomastik

cevap

2

Benzer bir sorunla karşılaştım ve özel bir araç ipucu kullanarak bir çözüm buldum. İlk araç div'u yalnızca ilk araç ipucu olan .bk-tooltip sınıfının altında görüntüleyen bir stil etiketi ekliyorum.

İşte çalışan bir örnek:

from bokeh.plotting import figure, show 
from bokeh.models import HoverTool, Range1d 

custom_hover = HoverTool() 

custom_hover.tooltips = """ 
    <style> 
     .bk-tooltip>div:not(:first-child) {display:none;} 
    </style> 

    <b>X: </b> @x <br> 
    <b>Y: </b> @y 
""" 

p = figure(tools=[custom_hover]) #Custom behavior 
#p = figure(tools=['hover']) #Default behavior 

p.circle(x=[0.75,0.75,1.25,1.25], y=[0.75,1.25,0.75,1.25], size=230, color='red', fill_alpha=0.2) 
p.y_range = Range1d(0,2) 
p.x_range = Range1d(0,2) 

show(p) 

Bu hacky çözümün türüdür, ancak Safari, Firefox ve Chrome çalışır. Bence daha uzun vadeli bir solution soon ile çıkacaklar.

İlgili konular