如何在x,y图形上倾斜六边形瓷砖,使用bokeh HexTi

2024-04-25 01:16:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用python创建一个英国议会选区的hexmap,它使用了Bokeh库的HexTile特性。我试图模拟Leeds ODI hexmap(https://odileeds.org/projects/hexmaps/constituencies/),并使用了可下载的.hexjson文件中提供的qr坐标系。你知道吗

然而,我的情节看起来有偏差。你知道吗

我知道我们在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)

我很欣赏这是一个几何问题作为一个博克的具体问题。我也知道,解决办法将是逐步倾斜的y轴上的原点以下的所有东西到左边,上面的所有东西到右边。但是,我尝试了许多转换,但都没有产生预期的结果。你知道吗

期望的结果类似于Leeds ODI链接。你知道吗

enter image description here


Tags: fromimportadddfplotbokehgridticker
1条回答
网友
1楼 · 发布于 2024-04-25 01:16:43

如果你看这张博凯文档中的图片:

enter image description here

你可以看到“q=0”轴向上向左移动。不幸的是,有不同的约定,有些系统有一个“q=0”轴,向上移动到右侧。我认为要转换,您需要依次为数据中每一行的q值加1,即第一行的所有十六进制数加1,然后第二行的所有十六进制数加1,等等。。。包括考虑和“丢失”数据行(尽管您的特定数据集中似乎没有任何数据)。你知道吗

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

相关问题 更多 >