- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面是 Bokeh 1.4.0 代码,它尝试绘制带有轴的输入数据帧的 HexTile map ,并尝试在每个十六进制上放置标签。我已经坚持了两天了,阅读 Bokeh 文档、示例和 github 已知问题,SO,Bokeh Discourse和 Red Blob Games's superb tutorial on Hexagonal Grids ,并尝试代码。 (我对提出 future 的 Bokeh 问题不太感兴趣,而对已知限制的实用解决方法更感兴趣,以便让我的 map 代码今天正常工作。)图如下,代码在底部。
以下是这些问题,按重要性的粗略递减顺序排列(由于 Bokeh 处理字形的方式,不可能分离根本原因并说出哪个原因导致哪个原因。如果我应用一个比例因子或坐标变换,它会修复一组问题,但破坏了另一个“打地鼠”效果):
figure(..., match_aspect=True))
的组合,我尝试了 1/sqrt(2)
缩放(x,y)坐标,我尝试了 Hextile(... size, scale)
按照 redblobgames 的参数,例如 size = 1/sqrt(3)
~ 0.57735)。p.text(q, -r, ...
。我想我必须手动修补自动提供的 yaxis 标签或 TickFormatter 才能为正值。np.mgrid
生成坐标网格,但我仍然似乎必须从右到左分配 q 坐标: np.mgrid[0:8, (4+1):0:-1]
。尽管如此,无论我做什么,六角形都会从左到右翻转
[counties!='']
。这工作正常,我想保持原样)HexTile(..., size, scale)
我使用的 args,图中的一个或两个维度都是错误的或被压扁的。或者我是否包括 1/sqrt(2)
坐标变换中的因素。
p.yrange = Range1d(?, ?)
?)p.yaxis.start
/end
除非您指定,否则均为空。结果来自p.yaxis.major_tick_in
, p.yaxis.major_tick_out
也是错误的,对于这个图,它给出了 x 和 y 的 (2,6),似乎将它们剪裁为 2(?) 的内部倍数。 如何自动获取坐标区的范围?我当前的情节:
我的代码:
import pandas as pd
import numpy as np
from math import sqrt
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource
from bokeh.models.glyphs import HexTile
from bokeh.io import show
# Data source is a list of county abbreviations, in (q,r) coords...
counties = np.array([
['TE','DY','AM','DN', ''],
['DL','FM','MN','AH', ''],
['SO','LM','CN','LH', ''],
['MO','RN','LD','WH','MH'],
['GA','OY','KE','D', ''],
['', 'CE','LS','WW', ''],
['LC','TA','KK','CW', ''],
['KY','CR','WF','WX', ''],
])
#counties = counties[::-1] # UNUSED: flip so origin is at bottom-left
# (q,r) Coordinate system is “odd/even-r” horizontal Offset coords
r, q = np.mgrid[0:8, (4+1):0:-1]
q = q[counties!='']
r = r[counties!='']
sqrt3 = sqrt(3)
# Try to transform odd-r (q,r) offset coords -> (x,y). Per Red Blob Games' tutorial.
x = q - (r//2) # this may be slightly dubious
y = r
counties_df = pd.DataFrame({'q': q, 'r': r, 'abbrev': counties[counties!=''], 'x': x, 'y': y })
counties_ds = ColumnDataSource(ColumnDataSource.from_df(counties_df)) # ({'q': q, 'r': r, 'abbrev': counties[counties != '']})
p = figure(tools='save,crosshair') # match_aspect=True?
glyph = HexTile(orientation='pointytop', q='x', r='y', size=0.76, fill_color='#f6f699', line_color='black') # q,r,size,scale=??!?!!? size=0.76 is an empirical hack.
p.add_glyph(counties_ds, glyph)
p.xaxis.minor_tick_line_color = None
p.yaxis.minor_tick_line_color = None
print(f'Axes: x={p.xaxis.major_tick_in}:{p.xaxis.major_tick_out} y={p.yaxis.major_tick_in}:{p.yaxis.major_tick_out}')
# Now can't manage to get the right coords for text labels
p.text(q, -r, text=["(%d, %d)" % (q,r) for (q, r) in zip(q, r)], text_baseline="middle", text_align="center")
# Ideally I ultimately want to fix this and plot `abbrev` column as the text label
show(p)
最佳答案
有一个 axial_to_cartesian
函数只会为您计算六角形中心。然后,您可以以各种方向附加标签并从中锚定。
Bokeh 不会强制原点在任何地方。 Bokeh 使用一种轴到笛卡尔映射,正是 axial_to_cartesian
给出的。 。六角图 block 的位置(以及轴显示的笛卡尔坐标)由此得出。如果您想要不同的刻度,Bokeh 在刻度位置和刻度标签上提供了大量控制点。
轴向坐标有不止一种约定。 Bokeh 选择了具有“向上和向左”r 轴图 block 的那个,即此处明确显示的那个:
https://docs.bokeh.org/en/latest/docs/user_guide/plotting.html#hex-tiles
Bokeh 需要从上到左的轴向坐标。您需要将您拥有的任何坐标系转换为该坐标系。对于“挤压”,您需要设置 match_aspect=True
以确保“数据空间”长宽比与“像素空间”长宽比 1-1 匹配。
或者,如果您不或无法使用自动调整范围,则需要仔细设置绘图大小,并使用 min_border_left
等控制边框大小,以确保边框始终足够大以容纳您拥有的任何刻度标签(这样内部区域就不会调整大小)
我不太明白这个问题,但无论底层的刻度数据如何,您都可以绝对控制在视觉上显示的刻度。除了内置格式化程序之外,还有 FuncTickFormatter
它允许您使用一段 JS 代码片段以任何您想要的方式格式化刻度。 [1](如果您愿意,您还可以控制刻度线的位置。)
[1] 请注意,CoffeeScript 和 from_py_func
选项均已弃用,并将在下一个 2.0 版本中删除。
同样,您需要使用 axial_to_cartesian
放置除六角形瓷砖以外的任何东西。 Bokeh 中没有其他字形能够理解轴坐标(这就是我们提供转换函数的原因)。
您误解了 major_tick_in
和 major_tick_out
的用途。它们实际上是刻度在图框内部和外部视觉上延伸的距离,以像素为单位。
自动调整范围(使用 DataRange1d
)仅在浏览器中的 JavaScript 中计算,这就是为什么开始/结束在“Python”端不可用。如果您需要知道开始/结束,您需要自己显式设置开始/结束。但请注意,match_aspect=True
仅适用于 DataRange1d
。如果您手动明确设置开始/结束,Bokeh 会假设您知道自己想要什么,并且会尊重您的要求,无论它对方面有何影响。
关于python - 如何破解这个 Bokeh HexTile 图来修复坐标、标签位置和轴?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59004218/
所以我使用一个带有整个 block 的标签作为链接,它是一个产品展示,所以你点击它会转到产品页面。现在我创建了一个标签作为链接到购物车页面的按钮。所以我让它工作,但是当我点击购物车按钮时,两个页面都会
根据 Web 标准,创建带有标题 1 的链接的正确代码是什么? 是吗 stackoverflow 或 stackoverflow 谢谢 最佳答案 根据网络标准,您不能将 block 元素放入内
在Java中它是这样写的..当我移植这段代码时...意识到没有这样的东西 break 和continue . 我知道这些命令没有包含在内,因为在使用带有命令的 goto 时必须有一种更简洁的方法来执
我们有一个相当标准的发布过程,使用 Visual Source Safe 在发布之前标记构建。这允许我们在出现任何问题时从该标签中获取,并在需要更改时使用它进行分支。 我们有几个不同的项目,并且总是使
我必须创建一个搜索内容,其中包含搜索框、标题和段落描述。默认情况下,描述被禁用,当我输入一些与描述文本匹配的文本时,描述段落标签应该打开。一些匹配的演示是这样的: [ fiddle ][1] 但默认情
我一直在阅读有关 的文档标签,我似乎无法理解它与简单地使用 有何不同那是 display: none; 文档:template tag 例子 对比 例子
我需要一个脚本来复制当开关按钮打开时标记,当开关按钮关闭时删除标记。我需要一个简单的方法。这是开关按钮: 我试过这个: var change
JSF 是一个 MVC 框架,但我很困惑为什么我们已经有了这么多 HTML 标签还需要 JSF 标签。毫无疑问,JSF 简化了很多事情。我想进一步了解 JSF 中的模型 View 和 Controll
我在这个 website 上看到了那些 html 代码: Homepa
我添加了 photoswipe 插件,可以使用 搜索我的所有照片。标签,如果点击,照片就会变成全屏。我让它工作了,但现在我的导航栏(有 标签)在点击时会触发 photoswipe 插件。 在 ph
标签
我正在尝试截断显示自 的文本标签,但它不工作。我将样式应用于其他标签样式并且它确实有效(我看到的示例中没有一个使用 标签)。我想知道是否有人可以向我解释为什么会这样(我不是最擅长 HTML/CSS
HTML 是这样的: Menu 1 Menu 2 Sub menu 2
我可以更改 TextInputLayout 的位置 float 标签(底部 float 标签)吗?我需要为波纹管 float 标签设置正确的位置。 最佳答案 我解决了我的问题,这是我的 xml:
我的代码是 printMsg : function(data) { $("#message").html(data.bodyText); ... } 这里 data.body
我是 Scrapy 和 Xpath 的初学者,我正在寻找解析具有以下结构的网站 cat1 value1 value2
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及
我必须从 xml 中解析数据。这是我的 xml- 或者它的 url 是:http://mobileecommerce.site247365.com/admin/catdata.xml News f
如何创建应该允许多行数据的标记。不要说使用textarea标签。我知道,但我只想 标记因为标签具有 value 属性。所以当我从 xml 文件获取值时,我应该使用 jquery 语法动态获取.. 最佳
我有一个页面使用我定义的某些样式。 在同一页面上,我刚刚导入了一个使用自己样式的外部 jQuery 插件,例如,包括 。被我自己覆盖的标签样式。 如何确保我的样式表中的样式不会覆盖 jQuery 插件
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我是一名优秀的程序员,十分优秀!