Bokeh hexbin - найти исходные индексы каждого шестиугольника

Я использую версию Bokeh 0.12.15, которая генерирует отличный график hexbin. Интересно, как я могу легко найти индексы значений каждого шестиугольника?

например, для приведенного ниже кода (https://docs.bokeh.org/en/latest/docs/gallery/hexbin.html):

import numpy as np

from bokeh.io import output_file, show
from bokeh.models import HoverTool
from bokeh.plotting import figure

n = 500
x = 2 + 2*np.random.standard_normal(n)
y = 2 + 2*np.random.standard_normal(n)

p = figure(title="Hexbin for 500 points", match_aspect=True,
           tools="wheel_zoom,reset", background_fill_color='#440154')
p.grid.visible = False

r, bins = p.hexbin(x, y, size=0.5, hover_color="pink", hover_alpha=0.8)

p.circle(x, y, color="white", size=1)

hover = HoverTool(tooltips=[("count", "@c"), ("(q,r)", "(@q, @r)")],
                  mode="mouse", point_policy="follow_mouse", renderers=[r])

p.add_tools(hover)

output_file("hexbin.html")

show(p)

Я хотел бы найти для каждого hexbin индексы кортежа (x,y), которые находятся внутри него

Спасибо


person Miri Ostrovsky    schedule 16.04.2018    source источник
comment
Вы пытаетесь показать значения x, y в виде всплывающих подсказок?   -  person vahdet    schedule 16.04.2018
comment
Нет, мне нужны значения для какой-то фильтрации   -  person Miri Ostrovsky    schedule 16.04.2018


Ответы (1)


РЕДАКТИРОВАТЬ: ОК, я только что понял (я думаю), что вы задаете другой вопрос. Чтобы узнать индексы исходных точек в каждом тайле, вам придется в основном воссоздать то, что hexbin делает сам:

In [8]: from bokeh.util.hex import cartesian_to_axial

In [8]: import pandas as pd

In [9]: q, r = cartesian_to_axial(x, y, 0.5, "pointytop")

In [10]: df = pd.DataFrame(dict(r=r, q=q))

In [11]: groups = df.groupby(['q', 'r'])

In [12]: groups.groups
Out[12]:
{(-4, -3): Int64Index([272], dtype='int64'),
 (-4, 0): Int64Index([115], dtype='int64'),
 (-4, 3): Int64Index([358], dtype='int64'),
 (-4, 4): Int64Index([480], dtype='int64'),
 (-3, -1): Int64Index([323], dtype='int64'),
 (-3, 2): Int64Index([19, 229, 297], dtype='int64'),
 ...
 (11, -5): Int64Index([339], dtype='int64'),
 (12, -7): Int64Index([211], dtype='int64')}

Здесь каждый ключ для каждой записи в groups dict — это (q,r) осевая шестнадцатеричная координата тайла, а значение — это список индексов точек, которые были в этом тайле.


Старый ответ

Эта информация находится в возвращаемом кадре данных bins:

In [3]: bins.head()
Out[3]:
   q  r  counts
0 -4 -3       1
1 -4  0       1
2 -4  3       1
3 -4  4       1
4 -3 -1       1

Здесь q и r — это координаты осевой шестигранной сетки. Если вам нужны декартовы координаты x и y центров гексагональной плитки, вы можете использовать файл axial_to_cartesian.

person bigreddot    schedule 17.04.2018