2017-04-11 30 views
0

我想繪製包含工具提示的折線圖,但下面的代碼導致在工具提示中顯示行的所有值,而不是顯示這些座標的單個值顯示行的所有值的散景工具提示

#Import the library 
import pandas 
import itertools 
import bokeh 
import MySQLdb 
from bokeh.plotting import figure, output_file, show 
from bokeh.models import HoverTool 

TOOLS='hover' 

wells=['F1','F2','F3','F4','F5','F6','F7','F8','F9','F10','F11','F12','G1','G2','G3','G4','G5','G6','G7','G8','G9','G10','G11','G12'] 

p = figure(plot_width=800, plot_height=640,x_axis_type="datetime", tools=TOOLS) 

p.title.text = 'Click on legend entries to hide the corresponding lines' 
# Open database connection 
db = MySQLdb.connect("localhost","user","password","db") 

#pallete for the lines 
my_palette=bokeh.palettes.inferno(len(wells)) 

#create a statement to get the data 
for name, color in zip(wells,my_palette): 
    stmnt='select date_time,col1,wells,test_value from db where wells="%s"'%(name) 

#creating dataframe 
    df=pandas.read_sql(stmnt,con=db) 

    p.scatter(df['date_time'], df['test_value'], line_width=2, color=color, alpha=0.8, legend=name,) 


    #Inserting tool tip 
    hover = p.select(dict(type=HoverTool)) 
    hover.tooltips = [("Wells","@wells"),("Date","@%s"%(df['date_time'])),("Values","@%s"%(df['test_value']))] 
    hover.mode = 'mouse' 

#Adding a legend 
p.legend.location = "top_right" 

output_file("interactive_legend.html", title="interactive_legend.py example") 

show(p) 

下面給出的是結果的截圖 enter image description here

我想只有一次好,DATE_TIME,Test_value在給定的鼠標移到例如

回答

1

此代碼:

hover.tooltips = [ 
    ("Wells","@wells"), 
    ("Date","@%s"%(df['date_time'])), 
    ("Values","@%s"%(df['test_value'])) 
] 

不會做你的想法。假設df['date_time']的值爲[10, 20, 30, 40]。然後,在您的字符串替換後,您的工具提示看起來像:

("Date", "@[10, 20, 30, 40]") 

這正是解釋你所看到的。 @[10零件在ColumnDataSource中查找名爲"[10"的列(由於前面的@)。沒有具有該名稱的列,因此工具提示打印???以指示無法找到要查找的數據。其餘20, 30, 40只是純文本,因此它按原樣打印。在你的代碼中,你實際上傳遞了一個Pandas系列而不是一個列表,所以字符串替換也在工具提示文本中輸出Namedtype信息。

由於您傳遞順序文字到scatter,它會創建一個列數據來源爲你,在CDS的默認名稱它是'x''y」。我最好的猜測是,你真正想要的:

hover.tooltips = [ 
    ("Wells","@wells"), 
    ("Date","@x"), 
    ("Values","@y") 
] 

但要注意,你會想這樣做循環。因爲它是你一遍又一遍修改相同的懸停工具。