Bokeh hexbin - 找到每个六边形的原始索引
Bokeh hexbin - find original indexes of each hexagon
我使用的是 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) 的索引
谢谢
编辑:好的,我刚刚意识到(我认为)你在问一个不同的问题。要找出每个图块中原始点的索引,您基本上必须重新创建 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
字典中每个条目的每个键是图块的 (q,r)
轴向十六进制坐标,值是该图块中点的索引列表.
旧答案
该信息在返回的 bins
DataFrame 中:
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
是Axial Hex Grid Coordinates. If you want the Cartesian x
and y
coordinates of the hex tile centers, you can use the axial_to_cartesian
函数。
我使用的是 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) 的索引
谢谢
编辑:好的,我刚刚意识到(我认为)你在问一个不同的问题。要找出每个图块中原始点的索引,您基本上必须重新创建 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
字典中每个条目的每个键是图块的 (q,r)
轴向十六进制坐标,值是该图块中点的索引列表.
旧答案
该信息在返回的 bins
DataFrame 中:
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
是Axial Hex Grid Coordinates. If you want the Cartesian x
and y
coordinates of the hex tile centers, you can use the axial_to_cartesian
函数。