在 Matlab 中设置图例的标题

2024-01-07

下面的代码是最最小、完整且可验证的示例 https://stackoverflow.com/help/mcve我能找到的。我的真实情况要复杂得多:

x = 1:0.1:10;
y = sin(x);

subplot 211
plot(x,y)
[leg,att] = legend('show');
title(leg,'my title')
leg.Title.Visible = 'on';

subplot 212
plot(x,y)
leg = legend('show');
title(leg,'my title')

这导致:

正如您可以清楚地看到的,上部图例标题有问题。不知何故,要求att图例的输出会干扰其标题。首先,由于某种原因,它使其不可见,但这已经在上面的代码中解决了。

主要问题在于它的位置 - 它似乎没有这样的属性,所以一旦设置我就无法移动它。

I read 这篇文章在未记录的 Matlab http://undocumentedmatlab.com/blog/plot-legend-title我自己可以想到一些类似的技巧(比如使用text与图例的位置),但我的情况非常复杂,我已经配置了很多图例并且每个图中都有几个轴。因此,我更喜欢一个简单且有效的解决方案,它依赖于图例标题的原始功能。

我使用Matlab 2016a。


警告!这个答案使用无证的功能,结果在 2016a 和 2017a 版本上进行测试,其他版本可能会有所不同。
如果这也适用于其他版本的 Matlab,请在评论中告诉我。


经过一番研究后我找到了答案无证财产 http://undocumentedmatlab.com/blog/getundoc-get-undocumented-object-properties/传说中的。对于问题中的问题,最直接的答案是将图例标题的位置设置回原来的位置。这可以通过属性来完成Position,这是hidden财产NodeChildren,图例标题。

图例框实际上只是一个小轴对象,因此位置单位相对于轴框进行标准化。如果我们在创建图例后查看它,我们会得到:

[hleg,att] = legend('show');
title(hleg,'my title')
hleg.Title.NodeChildren.Position

ans =
     0     0     0

这就是我们在问题中看到图例的地方。现在我们可以使用以下命令将其移回正确的位置:

hleg.Title.NodeChildren.Position = [0.5 1.5 0];

这里我将它放置在水平轴的中心(x = 0.5)、垂直轴(y = 1.5)上方,并且深度轴不相关,因此它为零(z = 0):

如果您不介意图例会干扰数据的选项(例如您的图例位于数据轴之外),那么您可以在此停止。如果没有,请继续阅读...


我们可以将背景颜色设置为白色:

hleg.Title.NodeChildren.BackgroundColor = 'w';

但它看起来不太好,因为背景仅用于文本框,并且与图例框不对齐。因此,我更喜欢放大图例框以包含标题,并将图例属性向下移动以腾出一些空间。这需要更多的努力(因为我们需要计算所有元素的正确位置),但可以通过以下方式完成:

x = 1:0.1:10;
plot(x,sin(x),x,cos(x))
[hleg,icons,plots] = legend('show');
title(hleg,'my title')
hleg.Title.Visible = 'on';
% the addition in height needed for the title:
title_hight = hleg.Position(4)/numel(plots);
hleg.Position([2 4]) = [hleg.Position(2)-title_hight hleg.Position(4)+title_hight];
% calculate new position for the elements in the legeng:
new_pos = fliplr(0.5/(numel(plots)+1):1/(numel(plots)+1):1);
hleg.Title.NodeChildren.Position = [0.5 new_pos(1) 0];
% set the text to the right position:
leg_txt = findobj(icons,'Type','Text');
txt_pos = cell2mat({leg_txt.Position}.');
txt_pos(:,2) = new_pos(2:end);
set(leg_txt,{'Position'},mat2cell(txt_pos,[1 1],3));
% set the icons to the right position:
leg_att = findobj(icons,'Type','Line');
set(leg_att,{'YData'},mat2cell(repmat(repelem(new_pos(2:end).',...
    numel(plots)),1,2),ones(numel(plots)*2,1),2))

上面的代码也适用于更多的单一数据系列,尽管我猜想在某些情况下这将无法给出正确的解决方案并且需要一些微调。

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

在 Matlab 中设置图例的标题 的相关文章

  • 如何从 Matlab 运行 R 脚本 [重复]

    这个问题在这里已经有答案了 我有 m 文件 我想用它来运行 R 脚本 我怎样才能做到这一点 Matlab文件 caller m some matlab code need to call a R script some matlab cod
  • Matlab 中的 3D 堆叠条形图

    我想在一个图中绘制多个堆叠条形图 detached 条形图 例如 准确地想象一下bar http mathworks com help matlab ref bar3 detached png绘图 但堆叠在一起 而不是单一颜色 Set up
  • 在Matlab图例中使用Latex?

    我的 matlab 不接受我的 Latex 例如 如果我使用legend b 6 rightarrow b 7 它没有向我显示箭头 我该如何解决这个问题 尝试使用 Latex 解释器 例如 legend b 6 rightarrow b 7
  • MATLAB 子图标题和轴标签

    我有以下脚本来最终绘制 4 x 2 子图 files getAllFiles preliminaries n size files cases cell 1 n m cell 1 n for i 1 1 n S load files i c
  • 将值从 C++ MEX 文件返回到 MATLAB

    我正在编写一个从 C 代码中检索数据的 MATLAB 程序 为此 我在 MATLAB 中创建了一个 MEX 文件和一个网关 mexFunction 虽然可以在 MATLAB 中读取读取值 但我无法检索它来使用它 如果不清楚 我有与这里完全相
  • MATLAB - 从目录读取文件?

    我希望从目录中读取文件并对每个文件迭代执行操作 此操作不需要更改文件 我知道我应该为此使用 for 循环 到目前为止我已经尝试过 FILES ls path to folder for i 1 size FILES 1 STRU pdbre
  • Matlab 错误:()-索引必须出现在索引表达式的最后

    我有这段代码 想要在制表符分隔的 txt 文件中写入一个数组 fid fopen oo txt wt for x 1 length s fprintf fid s t n s x 1 end fclose fid 但我收到此错误 Error
  • 如何调整x轴和y轴的大小

    如何调整 x 轴和 y 轴的大小 我想要什么 更具体 3900 60 30 0 60 120 180 3600 我做了什么 a 0 0 1 10000 plot a 我应该写什么才能按预期调整 x 和 y 轴的大小 EDIT 我不想 390
  • 如何从一个清晰的例子计算二维图像中的吉布斯能量

    我有一个关于矩阵的有趣问题 在吉布斯分布中 吉布斯能量U x 可以计算为 这是所有可能的派系 C 上的派系势 Vc x 的总和 右图 团 c 被定义为 S 中站点的子集 x 蓝色像素的邻域是左图中黄色像素的邻居 其中每对不同的站点都是邻居
  • 静态时序数据的数据库解决方案

    我们拥有一个庞大且不断增长的实验数据集 该数据集取自约 30 000 名受试者 对于每个主题 都有多个数据记录 在每个记录中 收集了多个生理数据时间序列 每个时间序列约 90 秒长 并以 250Hz 采样 我应该注意到 时间序列的任何给定实
  • 如何在 MATLAB 中为 4 个子图创建一个通用图例?

    如何在 MATLAB 中为 4 个子图创建一个通用图例 如下所示 又快又脏 hSub subplot 3 1 1 plot 1 1 1 1 1 1 1 1 hLegend legend hello i am legend subplot 3
  • 如何使用 MATLAB 的“等值面”函数创建三角球体

    如何创建一个三角球体 其中每个三角形的面面积相同 我想要这样的东西 http imageshack us a img198 5041 71183923 png http imageshack us a img198 5041 7118392
  • Matlab-如何在曲线上绘制切线

    我在 matlab 中绘制了一个图表 plot x y 我的图表有不同的斜率 我如何在每个斜率上绘制切线并计算斜率的系数 如果您没有用于绘制点的显式函数 您可以使用有限差分 http en wikipedia org wiki Finite
  • 继续在 Matlab 中一遍又一遍地播放声音?

    我正在尝试创建一个 MATLAB 程序来每隔几分钟一遍又一遍地播放声音 现在我将其设置为每隔几秒播放一次 只是为了消除系统中的一些错误 但是 当我的程序尝试重播声音时 我收到此错误 Error using gt audioplayer au
  • 如何在 MATLAB 中可视化球体的交集?

    似乎这个问题在一些地方被问过 包括SO https stackoverflow com questions 35130336 draws the intersecting volume of two spheres in matlab 我最
  • 使用 GPU 进行 Matlab 卷积

    我用gpuArray尝试了matlab的卷积函数conv2 convn 例如 convn gpuArray rand 100 100 10 single gpuArray rand 5 single 并将其与 cpu 版本 convn ra
  • matlab mex 文件和 C++ dll (Windows)

    我有一个带有 Test 类的 DLL 标题 class MY EXPORT Test public int doit const string str 和来源 int Test doit const string str return in
  • 在 MATLAB 中检索 spfun、cellfun、arrayfun 等中的元素索引

    有什么办法可以找回index调用函数的元素的cellfun arrayfun or spfun行为 即检索函数范围内元素的索引 为了简单起见 假设我有以下玩具示例 S spdiags 1 4 0 4 4 f spfun x 2 x S 它构
  • Matlab PARFOR 循环可以通过编程方式打开/关闭吗?

    有一个关于 MATLAB 中 parfor 的简单问题 我想在程序中设置一个标志 以便在 parfor 和常规 for 循环之间进行更改 基本上 我需要此功能 以便我的代码的某些部分可以在 调试 模式下更新图形 然后当关闭该标志时 使用 p
  • 检查Matlab中脚本需要使用的函数

    我有一个别人写的代码包 我正在运行一个脚本 它调用一些函数 这些函数又调用更多函数 等等 我想获取不是 MATLAB 内置函数但属于包的一部分的函数列表 我尝试使用matlab codetools requiredFilesAndProdu

随机推荐

  • MySQL:多类别产品的 SQL 和 DB

    我正在开发一个现在拥有数百万条记录的网站 抱歉 无法透露哪个网站 最初它只有几百条记录 因此下面的查询是可以接受的 查询 SELECT FROM WHERE 类别 LIKE 3 但现在它只是杀死数据库 因为对于每个查询 它都必须使用上述查询
  • WSO2 身份服务器 JWT 访问令牌

    当使用密码 grant type 登录时 我尝试从 WSO2 Identity Server 接收 JWT access token 但我找不到任何方法来配置它 当我登录时 我得到一个 guid 作为 access token 我发现了这个
  • 如何使我的自定义配置部分表现得像一个集合?

    我需要如何编写我的自定义ConfigurationSection这样它既是一个节处理程序又是一个配置元素集合 通常 你有一个类继承自ConfigurationSection 然后它有一个继承自的类型的属性ConfigurationEleme
  • 更新和删除 CakePHP 中的唯一连接关系

    编辑 我需要帮助的是删除 topic posts 表中主题和帖子之间的所有关系 以便清理关系并删除旧关系 然后代码的其余部分应该可以正常工作 因为所有问题都将得到解决 因为我们在添加关系之前删除了它们 在我的 CakePHP 应用程序中 我
  • 我可以仅使用 jQuery 进行验证还是需要 PHP? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我了解两种语言之间的差异 但是当涉及到表单验证时 jQuery 够用吗 我可以在 jQuery JavaScript 中验证我的表单 然后执行
  • 改变jstree节点的颜色

    有没有人尝试过使用类型插件更改 jstree 特定节点的颜色 而且我想避免该节点上的单击事件 我需要这样做以防止用户选择同一节点 有关如何更改被单击的任何节点的颜色的示例 function document ready my jstree
  • 在图书馆项目中使用 Room DB

    我正在尝试将房间数据库集成到图书馆项目中 apply plugin com android library compile android arch persistence room runtime rootProject roomVers
  • 已经有映射的bean方法

    我收到以下异常 p b root cause b p pre org springframework beans factory BeanCreationException Error creating bean with name org
  • 压缩 S3 上存储的所有回形针附件

    Paperclip 是一个很棒的 Rails 上传插件 将上传内容存储在本地文件系统或 Amazon S3 上似乎效果很好 我只是假设将文件存储在本地主机上 但此应用程序需要使用 S3 因为它将托管在 Heroku 上 我如何在单个压缩下载
  • React Native 0.57.1​​:发布版本包含旧代码

    当我跑步时react native run android variant release一切正常 应用程序加载 但代码已经使用了几天 阅读周围我发现了一些使用重新捆绑应用程序的建议react native bundle platform
  • 捕获不压缩的静态 UIImage(来自 CMSampleBufferRef)?

    我需要获得UIImage from 未压缩的来自 CMSampleBufferRef 的图像数据 我正在使用代码 captureStillImageOutput captureStillImageAsynchronouslyFromConn
  • 如何为 Vue 项目设置 lint-staged?

    我使用 Vue CLI 创建了一个新的 Vue3 应用程序 并为我的 linter 配置选择了 Prettier 我想使用 commitlint husky 和 lint staged 来验证提交消息并在推送代码之前检查代码 我做了什么 基
  • Notepad++ 正则表达式用于搜索和替换异常

    我是正则表达式新手 我想知道如何搜索并替换以下情况 一个文件包含多次出现以下内容 L1234 XL3 ext 并且还多次出现 L1234 XL3 我只想查找并替换L1234 XL3出现与XL3不影响具有扩展名的实例 我正在使用 notepa
  • Django 向数据库表中的所有用户发送电子邮件

    我已经开始 django 构建我的第一个应用程序教程 我必须在某些特殊场合向数据库表中存储的所有用户发送电子邮件 我在 google 上搜索并找到了很多 api 但发现很难用我的应用程序进行配置 这是我的 model py class Us
  • 如何修复 Angular 2 中的错误“无法找到 Angular Material 核心主题”?

    我实际上是 Angular2 的新手 并继承了 Angular 2 前端的项目 在控制台上切换到新的 Angular 4 0 后 我看到错误 compatibility ts 221 找不到 Angular Material 核心主题 大多
  • 尝试让 Windows Phone 8 ListPicker 工作

    ListPicker 的功能是 我可以单击它并出现全屏弹出窗口 但有一些选项可供选择 My xaml
  • ClassCastException:getApplication() 返回一些奇怪的东西

    我有一个带有自定义应用程序类的 Android 应用程序
  • 有没有用于处理 Excel(*.xls 和 *.xlsx)文件的开源/免费库? [复制]

    这个问题在这里已经有答案了 我知道一些用于处理 Excel 文件的开源库 但这些库仅适用于 xls 或 xlsx 例如 NPOI 适用于 xls EPPlus 和 ClosedXML 适用于 xlsx 由于性能问题 我不想使用 Micros
  • PostgresQL / pgAdmin 4 / 转储服务器版本不匹配

    我尝试在pgAdmin4中使用Postgres 11 1进行备份 但失败了 pgadmin 显示了一个窗口 状态 失败 退出代码 1 pg dump 服务器版本 11 1 pg 转储 10 5 pg dump 由于服务器不匹配而中止 我不太
  • 在 Matlab 中设置图例的标题

    下面的代码是最最小 完整且可验证的示例 https stackoverflow com help mcve我能找到的 我的真实情况要复杂得多 x 1 0 1 10 y sin x subplot 211 plot x y leg att l