python - 如何使用 bokeh HexTile 在 x,y 图表上倾斜六边形图 block

标签 python geometry bokeh hexagonal-tiles

我正在尝试使用 Bokeh 库的 HexTile 功能在 python 中创建英国议会选区的十六进制 map 。我正在尝试模拟 Leeds ODI hexmap ( https://odileeds.org/projects/hexmaps/constituencies/ ) 并使用可下载的 .hexjson 文件中提供的 q r 坐标系。

但是,我的情节看起来有偏差。

我知道我们在 Bokeh HexTile 功能中使用的 q r 坐标系可能与 Leeds ODI 使用的坐标系不同。因此,为什么我像之前一样以奇怪的角度绘制了 r 值。

from bokeh.models import ColumnDataSource, Plot, LinearAxis, Grid, HoverTool
from bokeh.models.glyphs import HexTile
from bokeh.io import curdoc, show
import pandas as pd

df = pd.read_csv('/Users/georgefry/Documents/data_science/uk_pol/hex_map/cons_hex_coords.csv')

df['r'] = df['r'] * -1

df['q'] = df['q']

source = ColumnDataSource(df)

hover = HoverTool(tooltips=[('Code', '@code')])

plot = Plot(
    title=None, plot_width=300, plot_height=300,
    min_border=0, toolbar_location=None, tools=[hover])

glyph = HexTile(q="q", r="r", size=1, fill_color="#fb9a99", line_color="white")
plot.add_glyph(source, glyph)

xaxis = LinearAxis()
plot.add_layout(xaxis, 'below')

yaxis = LinearAxis()
plot.add_layout(yaxis, 'left')

plot.add_layout(Grid(dimension=1, ticker=xaxis.ticker))
plot.add_layout(Grid(dimension=0, ticker=yaxis.ticker))

curdoc().add_root(plot)

show(plot)

我意识到这既是一个几何问题,又是一个 Bokeh 特定的问题。我还知道,可以通过逐渐将 y 轴原点以下的所有内容向左倾斜,将原点以上的所有内容向右倾斜来找到解决方案。然而,我尝试了多种转换,但都没有产生预期的结果。

期望的结果类似于利兹 ODI 链接。

enter image description here

最佳答案

如果您从 Bokeh 文档中查看此图像:

enter image description here

您可以看到“q=0”轴向上并向左移动。不幸的是,存在不同的约定,并且某些系统具有向上和向右的“q=0”轴。我认为要进行转换,您需要连续为数据中每一行的 q 值添加 1,即第一行中所有十六进制的 q+=1,然后q+=2 对于第二行中的所有十六进制等...包括考虑和“丢失”数据行(尽管您的特定数据集中似乎没有任何数据行) )。

假设有效,请open an issue on GitHub ,也许我们可以为这种情况提供某种适配器。

关于python - 如何使用 bokeh HexTile 在 x,y 图表上倾斜六边形图 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57480666/

相关文章:

Python:获取不同的时间格式

algorithm - N个圆的共同重叠

algorithm - 一种膨胀/收缩(偏移、缓冲)多边形的算法

python - Bokeh 日期时间轴,小刻度的控制

python - 使用带有 gitpython 的 HTTPS 克隆私有(private)仓库

python - Tkinter 中的按钮错误 - 选择文件、添加其路径

c# - 在 .NET Compact 中模拟曲线图

python - 如何定位 Bokeh 小部件?

python - 带有词典字典的 Bokeh 表

python - 编写了哪些 Python 库来演示函数式响应式编程?