web-dev-qa-db-ja.com

ホバーツールを使用したボケ味のインタラクティブな散布図

ボケとホバーツールを使用してインタラクティブなプロットを作成しようとしています。

もっと正確に言えば、私は seabornで作成したもの のようなプロットを作成しようとしていますが、よりインタラクティブにしたいと思います。

一点にカーソルを合わせたときの収入水準を見てもらいたい。

それぞれのポイントが個別のポイントであり、その過程で人々がそれらの上にホバリングできるように、プロットを分散させておく必要があります。

色を選んで、収入のレベルを変えたいと思います。

どうすればいいですか?私はこれを試しました:

x = Belgian_income["Municipalities"]
y = Belgian_income["Average income per inhabitant"]

list_x = list(x)
list_y = list(y)

dict_xy = dict(Zip(list_x,list_y))

output_file('test.html')
source = ColumnDataSource(data=dict(x=list_x,y=list_y,desc=str(list_y)))
hover = HoverTool(tooltips=[
    ("index", "$index"),
    ("(x,y)", "($x, $y)"),
    ('desc','@desc'),
])

p = figure(plot_width=400, plot_height=400, tools=[hover],
           title="Belgian test")

p.circle('x', 'y', size=20, source=source)

show(p)

しかし、それはまったく機能しません、誰かが私を助けることができますか?どうもありがとう。

5

コードの主な問題は、descを除いて、データソースのすべての列にリストを提供することです-そこに単一の文字列を提供します。これを修正すると、コードは機能します。ただし、ツールチップには、実際のデータではなく、マウスポインタのX座標とY座標が表示されます。実際のデータについては、ホバーツールチップ定義の$@に置き換える必要があります。

この実用的な例を考えてみましょう。

from math import sin
from random import random

from bokeh.io import output_file, show
from bokeh.models import ColumnDataSource, HoverTool, LinearColorMapper
from bokeh.palettes import plasma
from bokeh.plotting import figure
from bokeh.transform import transform

list_x = list(range(100))
list_y = [random() + sin(i / 20) for i in range(100)]
desc = [str(i) for i in list_y]

source = ColumnDataSource(data=dict(x=list_x, y=list_y, desc=desc))
hover = HoverTool(tooltips=[
    ("index", "$index"),
    ("(x,y)", "(@x, @y)"),
    ('desc', '@desc'),
])
mapper = LinearColorMapper(palette=plasma(256), low=min(list_y), high=max(list_y))

p = figure(plot_width=400, plot_height=400, tools=[hover], title="Belgian test")
p.circle('x', 'y', size=10, source=source,
         fill_color=transform('y', mapper))

output_file('test.html')
show(p)
2
Eugene Pakhomov