具有紧轴和匹配纵横比的散景图像图

2024-01-27

我在 Django 应用程序中使用 bokeh 1.0.1 版本,我想将微观表面图像显示为具有颜色编码高度和颜色条的可缩放图像图。原则上这是可行的,但我在获取具有正确纵横比的绘图时遇到问题,仅显示图像而周围没有空间。

这是我想要实现的示例:结果图应该

  • 显示宽度为的随机数据图像sx=10和高度sy=5在数据空间中(图像size)
  • 轴限制为(0,sx) and (0,sy),初步看来 以及缩放时
  • 屏幕上的正方形应该与数据空间中的正方形匹配,至少在初始视图中

对于图像,我只使用随机数据nx=100x 方向上的点和ny=100点在 y 方向。

这是我的第一个方法:

尝试1

from bokeh.models.ranges import Range1d
from bokeh.plotting import figure, show
from bokeh.models import LinearColorMapper, ColorBar
import numpy as np

sx = 10
sy = 5

nx = 100
ny = 100    
arr = np.random.rand(nx, ny)

x_range = Range1d(start=0, end=sx, bounds=(0,sx))
y_range = Range1d(start=0, end=sy, bounds=(0,sy))

# Attempt 1
plot = figure(x_range=x_range, y_range=y_range, match_aspect=True)

# Attempt 2
# plot = figure(match_aspect=True)

# Attempt 3
# pw = 400
# ph = int(400/sx*sy)
# plot = figure(plot_width=pw, plot_height=ph, 
#               x_range=x_range, y_range=y_range, match_aspect=True)

color_mapper = LinearColorMapper(palette="Viridis256", 
                                 low=arr.min(), high=arr.max())
colorbar = ColorBar(color_mapper=color_mapper, location=(0,0))

plot.image([arr], x=[0], y=[0], dw=[sx], dh=[sy],  
           color_mapper=color_mapper)
plot.rect(x=[0,sx,sx,0,sx/2], y=[0,0,sy,sy,sy/2], 
          height=1, width=1, color='blue')

plot.add_layout(colorbar, 'right')    
show(plot)

我还在图中添加了蓝色方块,以便查看何时 纵横比要求失败。

不幸的是,在结果图片 https://i.stack.imgur.com/omQL1.png,正方形不再是正方形了,它的高是宽的两倍。缩放和平移按预期工作。

尝试2

当使用省略范围时

plot = figure(match_aspect=True)

我去拿这张照片 https://i.stack.imgur.com/Wcxux.png。正方形是屏幕上的一个正方形, 这很好,但是轴范围改变了,所以有 现在它周围的空间。我只想只覆盖数据区域 图像。

尝试3

或者,当提供plot_height and plot_width到图中, 具有预定义的纵横比,例如经过

pw = 800 # plot width
ph = int(pw/sx*sy)
plot = figure(plot_width=pw, plot_height=ph, 
              x_range=x_range, y_range=y_range, 
              match_aspect=True)

我去拿这张照片 https://i.stack.imgur.com/r2WPV.png。广场也不再是广场了。几乎可以完成,但是很难,因为plot_width还包括颜色条和工具栏。

我读了这个相应的博客文章 https://stackoverflow.com/questions/26674779/bokeh-plot-with-equal-axes以及相应的散景文档 https://bokeh.pydata.org/en/latest/docs/reference/models/plots.html#bokeh.models.plots.Plot,但我无法让它工作。

有谁知道如何实现我想要的或者是否不可能? 响应行为也很好,但我们现在可以忽略这一点。 感谢您的任何提示。

Update

与 Bokeh 开发人员交谈后Gitter https://gitter.im/bokeh/bokeh?at=5c08ea695e40952503228d58(谢谢布莱恩!)看来我想要的几乎是不可能的。

原因是,如何match_aspect=True工作原理是为了使数据空间中的正方形看起来像像素空间中的正方形:给定画布大小,这可能是由于应用不同的画布大小而产生的sizing_mode设置响应行为,然后更改数据范围以获得匹配的宽高比。因此,没有其他方法可以使像素长宽比与数据长宽比匹配,而无需在图像周围添加额外的空间,即将轴延伸到给定的边界上。另请参阅此评论issue https://github.com/bokeh/bokeh/issues/8486.

可以在没有响应行为的情况下根据纵横比预先固定画布大小,但目前并不完美,因为内部绘图框架周围的所有其他元素也占用空间。有一个PR https://github.com/bokeh/bokeh/pull/8085这可能允许直接控制内部框架尺寸,但我不知道该怎么做。

好吧,如果我放弃紧轴目标怎么办? 这是在上面的“尝试 2”中完成的,但图像周围有太多空白空间,与图像绘图占用的空间相同。

我尝试过使用各种range_padding*属性,例如

x_range = DataRange1d(range_padding=10, range_padding_units='percent')
y_range = DataRange1d(range_padding=10, range_padding_units='percent')

但它并没有减少地块周围的空间量,而只是增加了它。以百分比为单位的填充应相对于由下式给出的图像尺寸dh and dw.

有谁知道如何使用range_padding参数具有较小的轴范围或另一种方式在上面的示例中在图像图周围具有较小的填充(使用match_aspect=True)? 我已经打开了另一个问题 https://stackoverflow.com/questions/55225823/smaller-range-padding-for-image-plot-with-bokeh关于这一点。


您能接受这个解决方案(适用于 Bokeh v1.0.4)吗?

from bokeh.models.ranges import Range1d
from bokeh.plotting import figure, show
from bokeh.layouts import Row
from bokeh.models import LinearColorMapper, ColorBar
import numpy as np

sx = 10
sy = 5

nx = 100
ny = 100
arr = np.random.rand(nx, ny)

x_range = Range1d(start = 0, end = sx, bounds = (0, sx))
y_range = Range1d(start = 0, end = sy, bounds = (0, sy))

pw = 400
ph = pw * sy / sx
plot = figure(plot_width = pw, plot_height = ph,
              x_range = x_range, y_range = y_range, match_aspect = True)

color_mapper = LinearColorMapper(palette = "Viridis256",
                                 low = arr.min(), high = arr.max())

plot.image([arr], x = [0], y = [0], dw = [sx], dh = [sy], color_mapper = color_mapper)
plot.rect(x = [0, sx, sx, 0, sx / 2], y = [0, 0, sy, sy, sy / 2], height = 1, width = 1, color = 'blue')

colorbar_plot = figure(plot_height = ph, plot_width = 69, x_axis_location = None, y_axis_location = None, title = None, tools = '', toolbar_location = None)
colorbar = ColorBar(color_mapper = color_mapper, location = (0, 0))
colorbar_plot.add_layout(colorbar, 'left')

show(Row(plot, colorbar_plot))

Result:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有紧轴和匹配纵横比的散景图像图 的相关文章

随机推荐

  • 将 stdout 和 stderr 重定向到文件和控制台

    在 powershell 脚本中 我调用一个程序并想要重定向stdout and stderr to 不同的文件 同时仍然在控制台中显示两者的输出 所以基本上 我想要 stdout gt stdout stdout gt out log s
  • 无法在 Eclipse + EPIC 中查看本地文件

    我刚刚安装了 Eclipse 3 7 的 Perl EPIC 插件 调试器本身工作正常 我可以单步执行我的代码 但是我看不到任何变量 Eclipse 在错误日志中报告此错误 解析调试器变量时发生错误 的内容 变量视图可能不准确 字符串导致的
  • 录制的声音文件(ala google now,google keep)-RecognizerIntent/Listener

    我一直在开发一个使用 recognizerIntent 来获取语音输入的应用程序 然而 自从 jelly bean 推出以来 我一直无法从我的语音输入中获取实际的声音文件 在识别监听器中 http developer android com
  • 您不能对同一个动态路径 Nextjs 使用不同的 slug 名称

    我在我的项目中使用基于文件夹结构的 nextjs 默认动态路由技术 我有一条路线是 pages language location location id 现在我遇到一个用例 除了最后一个参数之外 我需要与上面的路由完全相同 locatio
  • C#:从正文和文件中将模型发布为 MultipartFormDataContent

    我正在寻找一种在一个请求中发送模型和图像的方法 我尝试从正文发送我的模型 但我不知道如何发送文件 除了在不同的文件中发送图像和模型之外 还有其他方法吗 这是我的 API 中的 POST 方法 HttpPost Route UploadNew
  • 如何使用 Python 从 Firebase 存储中检索图像?

    我已经将图像存储到 Firebase Storage 我需要使用 Python 代码将其取出 我可以使用任何 URL 检索图像吗 或者有什么办法可以找回来吗 以下是我如何将其存储在 Firebase Storage 中的图像 这就是我用的
  • 使用 Vaadin 从菜单栏打开 pdf 文件

    我的 vaadin 应用程序中有一个菜单栏 并且想要添加一个项目来打开 pdf 文件 这是浏览器的新选项卡 我找到了一些使用按钮打开文件的解决方案 但我必须使用 MenuItem MenuBar Command commandHandler
  • 如何从 ASP.NET 5 MVC 6 控制器操作返回 XML

    如何从控制器操作返回 XML 即使我添加标题Accept application xml它返回一个 JSON 对象 MVC 5 中的 WebApi 控制器支持这一点 我需要做什么才能使其在 MVC 6 中工作 Microsoft 删除了 X
  • 在 iPad 中重新定向期间在视图中定位对象

    iPad 专家 苹果希望我们支持所有方向 我认为这意味着特定的布局应该旋转 以便所有对象的位置相对相同 或者 如果看起来不太好 那么它们应该重新定位 或者应该设计和构建两个视图 如果我依赖内置的旋转机制 对象要么会调整大小 要么以一个方向或
  • 如何在 extjs 网格(单元格编辑)中显示完整列可编辑?

    我正在使用单元格编辑插件来编辑单元格 但这就像当我们单击该列时 它将进入编辑模式 我想显示带有可编辑文本框的完整列 目前我正在使用以下代码使其可编辑 selType cellmodel plugins Ext create Ext grid
  • Gradle 禁用所有增量编译和并行构建

    在一小部分 sbt 项目中 我们需要 protobuf grpc 编译 并且因为只有 Gradle 对此有正常支持 所以我们用它来执行 protobuf 相关任务 有时它会随机失败编译相同的东西 但重试时会成功 我们确定这是因为增量 Jav
  • Firestore:多个条件 where 子句

    例如 我的图书列表有动态过滤器 我可以在其中设置特定的颜色 作者和类别 该过滤器可以一次设置多种颜色和多个类别 Book gt Red Blue gt Adventure Detective 如何有条件地添加 where firebase
  • 使用 PHP 获取 DOM 元素

    我正在努力理解如何在 PHP 中使用 DOMElement 对象 我找到了这段代码 但我不确定它是否适用于我 dom new DOMDocument dom gt loadHTML index php div dom gt getEleme
  • 查看已完成的 Elasticsearch 任务

    我正在尝试使用 Elasticsearch 的更新查询 API 来运行日常任务 我可以找到当前正在运行的任务 但需要一种方法来查看所有任务 包括已完成的任务 我已经查看了 Update By Query API 的 ES 文档 https
  • 在 BeautifulSoup 中使用多个条件

    我们使用此代码查找包含文本 Fiscal 的标签 soup find class label text re compile Fiscal 我如何在这里放置多个条件 假设标签都包含 财政 和 年度 或者包含 财政 而不是 年份 的标签 如果
  • Android 如何在安排后更改 TimerTask 间隔?

    timerUploadTime new Timer timerUploadTimeTask new TimerTask Override public void run mHandler post new Runnable Override
  • Google 测试输出报告附加

    我在 VC 中使用 GTest 进行单元测试 我有5套测试服 我想生成 Google 测试返回的结果的测试报告 我在 InitGoogleTest 方法之前使用了 testing GTEST FLAGS output xml filenam
  • Sailsjs 套接字 IO

    我是 SailsJs 和 Socket IO 的新手 我想在 Sailsjs 中执行下面的 Socket IO 示例 在服务器端 我需要执行以下代码 但我不知道该代码放在哪里 var io require socket io listen
  • 我已抑制 knit 输出中的警告,但警告并未按预期显示在 Rmarkdown 控制台中。我该如何看待这些?

    我正在使用 Knit 和 rmarkdown 我在 pdf 输出中抑制了警告 然后通常警告会在 rmarkdown 控制台中列出 然而 在一份特定报告的情况下 我没有得到 rmarkdown 控制台中列出的警告 而是收到以下消息 有 15
  • 具有紧轴和匹配纵横比的散景图像图

    我在 Django 应用程序中使用 bokeh 1 0 1 版本 我想将微观表面图像显示为具有颜色编码高度和颜色条的可缩放图像图 原则上这是可行的 但我在获取具有正确纵横比的绘图时遇到问题 仅显示图像而周围没有空间 这是我想要实现的示例 结