如何相对于另一个轴定位图中的轴?

2024-03-26

在 MATLAB 中布置图窗时,输入axis equal确保无论发生什么figure尺寸,即axes永远是正方形:

我当前的问题是我想向该图中添加第二个轴。通常,这没有问题;我只想输入axes([x1 y1 x2 y2]),并且将添加一个新的正方形,其角点位于(x1, y1), (x2, y2),这是一个固定位置相对于图。问题是,我希望这个新轴位于相对固定的位置到第一个轴.

所以,我的问题是:

  1. 有谁知道如何通过指定相对于另一个轴的位置来定位图中的轴?
  2. 假设我可以做 1,即使我调整图形大小,如何让这个新轴保持在同一位置?

An axis 位置属性 http://www.mathworks.com/help/matlab/ref/axes_props.html#Position是相对于其父容器的。因此,一种可能性是创建一个透明的panel http://www.mathworks.com/help/matlab/ref/uipanel.html与第一个轴的大小相同,然后在其中创建第二个轴,并根据需要设置其位置和大小。指定的位置就好像它是相对于第一个轴的。

现在我们需要始终保持面板与第一个轴的大小/位置相同。通常这可以使用LINKPROP http://www.mathworks.com/help/matlab/ref/linkprop.html它将多个图形对象(面板和轴)的一个属性链接为相同的,即'Position'财产。

但是,这在您的情况下会失败:调用时axis image http://www.mathworks.com/help/matlab/ref/axis.html#f17-644352,它通过设置宽高比属性将数据单元固定在每个方向上相同'PlotBoxAspectRatio' and 'DataAspectRatio'。令人悲伤的消息是'Position'属性不会反映大小的变化,从而打破了上面的解决方案。下面是一个说明问题的例子:如果您在发出之前/之后查询位置属性axis image调用,结果是一样的:

figure, plot(1:10,1:10)
get(gca,'Position')
pause(1)
axis image
get(gca,'Position')

对我们来说幸运的是,FEX 上有一个提交(绘图盒位置 http://www.mathworks.com/matlabcentral/fileexchange/9615-plotboxpos)解决了这个确切的问题,并返回轴绘图区域的实际位置。一旦我们有了这个,就需要将面板位置同步到轴位置。一个技巧是在轴改变大小时创建一个事件侦听器(它出现 http://www.mathworks.com/matlabcentral/answers/5882-getting-the-axis-position-correctly认为'TightInset'属性变化与'Position'属性,因此这可能是我们案例中的触发器)。

我将上面的内容封装在一个函数中AXESRELATIVE为了方便起见:您可以像调用内置函数一样调用它AXES http://www.mathworks.com/help/matlab/ref/axes.html功能。唯一的区别是您将要相对定位新创建的轴的轴的句柄作为第一个参数。它返回新轴及其包含面板的句柄。

这是一个示例用法:

%# automatic resize only works for normalized units
figure
hParentAx = axes('Units','normalized');
axis(hParentAx, 'image')

%# create a new axis positioned at normalized units with w.r.t the previous axis
%# the axis should maintain its relative position on resizing the figure
[hAx hPan] = axesRelative(hParentAx, ...
    'Units','normalized', 'Position',[0.7 0.1 0.1 0.1]);
set(hAx, 'Color','r')

以及函数实现:

function [hAx hPan] = axesRelative(hParentAx, varargin)
    %# create panel exactly on top of parent axis
    s = warning('off', 'MATLAB:hg:ColorSpec_None');
    hPan = uipanel('Parent',get(hParentAx, 'Parent'), ...
        'BorderType','none', 'BackgroundColor','none', ...
        'Units',get(hParentAx,'Units'), 'Position',plotboxpos(hParentAx));
    warning(s)

    %# sync panel to always match parent axis position
    addlistener(handle(hParentAx), ...
        {'TightInset' 'Position' 'PlotBoxAspectRatio' 'DataAspectRatio'}, ...
        'PostSet',@(src,ev) set(hPan, 'Position',plotboxpos(hParentAx)) );

    %# create new axis under the newly created panel
    hAx = axes('Parent',hPan, varargin{:});
end

完全不同的说明:在您最近进行编辑之前,我的印象是您试图生成图像散点图(即像通常的散点图一样,但使用完整图像而不是点)。

您的建议(据我了解)是为每个图像创建一个轴,并将其位置设置为与该点的 x/y 坐标相对应。

我的解决方案是使用IMAGE http://www.mathworks.com/help/matlab/ref/image.html/IMAGESC http://www.mathworks.com/help/matlab/ref/imagesc.html函数并通过显式设置来绘制小图像'XData' and 'YData'属性来适当地移动和缩放图像。这样做的好处是它需要一个轴,并且不必处理调整大小的问题。

这是一个示例实现:

%# create fan-shaped coordinates
[R,PHI] = meshgrid(linspace(1,2,5), linspace(0,pi/2,10));
X = R.*cos(PHI); Y = R.*sin(PHI);
X = X(:); Y = Y(:);
num = numel(X);

%# images at each point (they don't have to be the same)
img = imread('coins.png');
img = repmat({img}, [num 1]);

%# plot scatter of images
SCALE = 0.2;             %# image size along the biggest dimension
figure
for i=1:num
    %# compute XData/YData vectors of each image
    [h w] = size(img{i});
    if h>w
        scaleY = SCALE;
        scaleX = SCALE * w/h;
    else
        scaleX = SCALE; 
        scaleY = SCALE * h/w;
    end
    xx = linspace(-scaleX/2, scaleX/2, h) + X(i);
    yy = linspace(-scaleY/2, scaleY/2, w) + Y(i);

    %# note: we are using the low-level syntax of the function
    image('XData',xx, 'YData',yy, 'CData',img{i}, 'CDataMapping','scaled')
end
axis image, axis ij
colormap gray, colorbar
set(gca, 'CLimMode','auto')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何相对于另一个轴定位图中的轴? 的相关文章

  • 我应该如何使用 jcrop 在客户端裁剪图像并上传?

    我正在开发一个包含文件上传 HTML 控件的组件 在使用文件上传元素选择图像后 该图像将呈现在 HTML5 Canvas 元素上 这是带有示例代码的 JSFiddle https jsfiddle net govi20 spmc7ymp h
  • 使用 matplotlib 从 TeX 创建数学表达式的图像

    使用 python 库 matplotlib 我发现了这个问题的解决方案 在 PyQt 中 很好地 显示代数表达式 https stackoverflow com questions 14097463 displaying nicely a
  • java.sql.SQLException:在结果集开始之前[重复]

    这个问题在这里已经有答案了 我已尝试使用以下代码来检索存储在数据库中的图像 我创建了一个名为image db包含一个名为的表image details 该表有两个字段 id and image path两者都是类型mediumblob 我在
  • 频域和空间域的汉明滤波器

    我想通过在 MATLAB 中应用汉明滤波器来消除一维信号中的吉布斯伪影 我所拥有的是k1这是频域中的信号 我可以通过应用 DFT 来获取时域信号k1 s1 ifft ifftshift k1 该信号具有吉布斯伪影 现在 我想通过 A 乘以汉
  • 使用 TCPDF PHP 库横向显示的图像

    我正在使用 TCPDF PHP 库生成包含照片的 PDF 文档 由于某种原因 某些照片在我的计算机和网络上正确显示 但当我将该图像放入 PDF 中时 它似乎是横向的 这只发生在某些图像上 大多数图像显示正确 下面是在 PDF 中横向显示的示
  • 将 UIImage 放入 UIButton 的简单方法

    我的 iPhone 应用程序中有一个 UIButton 我将其大小设置为 100x100 我有一个 400x200 的图像 我希望在按钮中显示它 按钮仍然需要保持在 100x100 并且我希望图像缩小以适应 但是 保持正确的纵横比 我想这就
  • 减少1000张图片的HTTP请求?

    我知道这个问题可能听起来有点疯狂 但我想也许有人会想出一个聪明的主意 假设您在一个 HTML 页面上有 1000 个缩略图 图像大小约为5 10 kb 有没有办法在单个请求中加载所有图像 以某种方式将所有图像压缩到一个文件中 或者您对该主题
  • CSS 比例和方形中心裁剪图像

    所以我的应用程序中有一个缩略图集合 其大小为200x200 有时原始图像没有这个比例 所以我计划将此图像裁剪为正方形 目前它只是拉伸图像以适合缩略图 所以说我的原始图像大小是400x800 那么图像看起来就很压扁 我想裁剪此图像 以便它查看
  • 在 Android 版 Glide 中离线时加载已获取的图像

    我正在使用 Glide 版本 4 8 0 为了加载图像我这样做 GlideApp with HomePageFragment this load remoteURL diskCacheStrategy DiskCacheStrategy A
  • iOS - 基于设备的不同图像或缩放相同的图像?

    似乎开发人员总是为不同的设备创建不同的图像资源 并根据设备加载它们 但是 只为最高分辨率的设备 iPad 创建图像 然后为 iPhone 6 5 等缩小该图像 有什么缺点吗 我使用 SpriteKit 因此我只需创建不同大小的 SKSpri
  • 从 Java 运行 MATLAB 函数

    我在 MATLAB 中有一个 m 文件 我想从 Java 调用该文件 并以字符串或 Java 中的任何形式获取解决方案 这听起来很简单 但由于某种原因我无法让它发挥作用 我试过这个 matlab nosplash wait nodeskto
  • 使用 scikit-image 和 Transform.PolynomialTransform 进行图像变形

    我附上一个压缩档案 https drive google com file d 0B6EnJ Vh6zs1MkVCRlNhZkJsOEk view usp sharing包含说明和重现问题所需的所有文件 我还没有上传图片的权限 我有一个带有
  • 如何使用javascript检查图像url是否为404

    使用案例 当 src 不为空并且 alt 标签不为空时 则显示 src 的图像 然后检查 src 图片 url 不是 404 当 src 为空且 alt 不为空时 显示名字的图像 当 src 和 alt 为空时显示默认图像 HTML img
  • 图像上的文字

    是否可以在 php 中动态地将文本放置在图像上 然后将其发送到 rss feed 是的 可以使用GD http www php net gd函数或图像魔术师 http www php net imagemagick功能 具体取决于您的服务器
  • Matlab颜色检测

    我试图一致地检测同一场景的图像之间的某种颜色 这个想法是根据颜色配置文件识别一组对象 因此 例如 如果给我一个带有绿色球的场景 并且我选择绿色作为我的调色板的一部分 我想要一个具有反映它检测到球的矩阵的函数 任何人都可以为这个项目推荐一些
  • 平衡两轮机器人而不使其向前/向后漂移

    我正在尝试设计一个控制器来平衡 2 轮机器人 约 13 公斤 并使其能够抵抗外力 例如 如果有人踢它 它不应该掉落 也不应该无限期地向前 向后漂移 我对大多数控制技术 LQR 滑模控制 PID 等 都很有经验 但我在网上看到大多数人使用 L
  • 文章中的内联图像和标题 - 使标题的宽度与图像的宽度一致

    这是我的代码 div class image img src image jpg alt Image description p class caption This is the image caption p div 这是我的 CSS
  • 动态调整自定义刻度数

    Taking SO 的一个例子 https stackoverflow com a 7139485 97160 我想根据当前视图调整轴刻度 这是默认行为 除非设置自定义的刻度数 下图展示了由此产生的行为 左侧是默认行为 右侧是带有自定义刻度
  • 如何将图像转换为 UIImage?

    如何转换 SwiftUIImage to a UIImage let image Image systemName circle fill let UIImage image as UIImage 没有直接的方法将 Image 转换为 UI
  • minAreaRect OpenCV 返回的裁剪矩形 [Python]

    minAreaRectOpenCV 中返回一个旋转的矩形 如何裁剪矩形内图像的这部分 boxPoints返回旋转矩形的角点的坐标 以便可以通过循环框内的点来访问像素 但是在 Python 中是否有更快的裁剪方法 EDIT See code在

随机推荐

  • 相当于 Core 3.0 中的验证实体

    它似乎 受保护覆盖 DbEntityValidationResult ValidateEntity 在最新版本 2 2 0 和 3 0 中 从包 Microsoft AspNetCore Identity EntityFrameworkCo
  • 如何在 Microsoft Bot Framework LuisIntent 方法中获取原始消息文本

    我正在尝试从标记为的方法中访问完整的原始文本LuisIntent在一个LuisDialog 文档显示这些方法采用两个参数 IDialogContext context LuisResult result 两者都没有公开曝光消息的原文 上下文
  • 从我的 Android 应用程序上传 Vimeo 视频

    如何将视频从 Android 应用上传到 Vimeo 我创建了 Vimeo 应用程序 授予上传权限 生成的访问令牌 检查可用配额 现在我想将视频上传到vimeo 所以请提供示例代码来生成票证并上传 您需要下载vimeo 网络 https g
  • 如何找到 numpy ndarray 中最常见的字符串元素?

    他们有什么方法可以找到 numpy ndarray 中最常见的字符串元素吗 A numpy array a b c d d e result should be d 如果你想要一个 numpy 答案 你可以使用np unique gt gt
  • Newtonsoft.json:根据json路径白名单剪切JSON

    假设我有一些复杂的 JSON path1 path1Inner1 id id1 path1Inner2 id id2 path2 path2Inner1 id id3 path2Inner2 id id4 key key4 还有一些json
  • 使用rest_framework.authtoken.views.obtain._auth_token时发生CSRF错误

    我正在打电话obtain auth token来自如下网址 url r api token rest framework authtoken views obtain auth token 我回来了 detail CSRF Failed C
  • EF Core 如何防止在 OnModelCreating() 中多次调用播种?

    根据文件 通常OnModelCreating 仅在创建派生上下文的第一个实例时调用一次 然后 该上下文的模型将被缓存 并且适用于应用程序域中该上下文的所有其他实例 现在考虑我的代码 protected override void OnMod
  • 如何在react-native中从AsyncStorage中删除项目

    如何从 AsyncStorage 中删除项目 现在我正在尝试这段代码 AsyncStorage removeItem userId 但这对我不起作用 尝试这个 async removeItemValue key try await Asyn
  • 检测window.print是确认还是取消

    你好 我有一个打印代码 我打开一个窗口 这个弹出窗口包含所有打印信息 我使用kiosk printing对于自动打印 但有时会失败 例如 如果chrome与其他实例打开 我会遇到问题 因为我需要确认每个打印 然后我需要知道是否存在一种方法来
  • React 中的 setTimeout 和clearTimeout

    当用户使用 setTimeout 和clearTimeout 在页面上 30 秒内没有进行任何点击事件时 我正在努力创建注销功能 但每次用户点击页面上的任何内容时 剩余时间必须再次重置为 30 秒 或者作为另一个选项 将使用clearTim
  • 如何消除 DirectShow 过滤器链中 1 秒的延迟? (使用Delphi和DSPACK)

    我有一个 Delphi 6 Pro 应用程序 它使用 DSPACK 组件库将音频从系统的首选音频输入设备发送到 Skype 我正在使用 TSampleGrabber 组件进入 Filter Graph 链 然后将音频缓冲区发送到 Skype
  • 当在 erlang 模块上调用“new”时,它会做什么?

    我见过 Erlang 代码中使用了 module name new 但是 module name 模块中没有引用 new 函数 新 有什么作用 它用于 参数化模块 参见here http yarivsblog com articles 20
  • 在 Swing JFrame 上添加 WebView 控件

    我正在开发与 JavaFX 控件混合的 Swing 应用程序 我创建了一个 JavaFX 控件 WebView 浏览 HTML 文件 但我想要 要知道 如何在 Swing 的容器上添加此 Web 视图控件JFrame 鉴于已经存在jFram
  • 使用 std::sort 对二维数组进行排序(基于列)

    我正在运行一个测试 显示按列对二维数组进行排序的好处 方法是将数据提取到单个数组中并对该数组进行排序 然后将其复制回列 我想运行 std sort 作为每次运行的排序算法 我试图弄清楚如何首先在适当的位置运行循环 然后再进行二维数组的复制
  • 保存为 PDF 时,geom_raster 出现“污点”

    当我保存使用的 ggplot 时geom raster 瓷砖 被涂抹 了 如果我使用的话结果是一样的ggsave or pdf 我没有这个问题geom tile or image 我使用 RStudio X11 或 PNG 图形设备时没有出
  • 将变量从 Activity 传递到自定义视图类

    我正在测试使用将音频绘制到画布中canvas drawLine 方法 我能够在画布上进行静态绘制 基本上我有一个测试应用程序 它有两个按钮 开始 和 停止 和一个画布 我试图在其中绘制从 FFT 获得的音频频率 当我按下开始按钮时 它开始使
  • 比较两个通用列表

    你好 我如何比较两个Lists 第一种类型ICollections
  • 从功能区按钮触发报告

    我有几个自定义报告 我希望能够向功能区添加触发它们的按钮 是否可以 如果是这样 任何例子都会很棒 提前致谢 要从功能区按钮运行报告 您需要创建一个 js 文件 其中包含将从按钮调用的函数 你需要 4 样东西 rdlName rdl 文件名
  • OS X 上的 GitHub 客户端提交失败(“无法添加文件...)

    我正在尝试从 Mac OS X Mavericks 计算机上的 GitHub 客户端提交对代码所做的更改 像往常一样 我向我的项目添加了一个新包 这是一个 Laravel 项目 我添加了 Rocketeer 包 我还做了一些配置更改 我收到
  • 如何相对于另一个轴定位图中的轴?

    在 MATLAB 中布置图窗时 输入axis equal确保无论发生什么figure尺寸 即axes永远是正方形 我当前的问题是我想向该图中添加第二个轴 通常 这没有问题 我只想输入axes x1 y1 x2 y2 并且将添加一个新的正方形