代码之家  ›  专栏  ›  技术社区  ›  Miri Ostrovsky

Bokeh hexbin-查找每个六边形的原始索引

  •  2
  • Miri Ostrovsky  · 技术社区  · 6 年前

    我使用的是Bokeh0.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)的索引

    谢谢

    1 回复  |  直到 5 年前
        1
  •  2
  •   bigreddot    6 年前

    编辑:好吧,我刚刚意识到(我想)你在问一个不同的问题。要找出每个平铺中原始点的索引,基本上必须重新创建 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 Axial Hex Grid Coordinates .如果你想要笛卡尔坐标 x y 六角平铺中心的坐标,可以使用 axial_to_cartesian 作用