文件交换

图片缩略图

面板

版本2.14 (1.16 MB) 本米奇
像子图,但更容易,和所见即所得导出到文件。还修复了导出中的虚线/虚线。

100下载

更新11月21日

查看许可协议

编者按:此文件被选为MATLAB Central本周精选

面板是Matlab的“subplot”的替代方案,提供了对布局的更简单的控制(特别是,容易消除空白)。它还修复了在导出到图像文件(矢量和位图格式)期间的虚线/虚线。
如果你发现subplot()生成的布局有太多的空间和不够的轴,尝试Panel。如果你发现构建比简单网格更复杂的子图布局很乏味,试试面板。如果你总是求助于其他软件来准备你的最终数字发表,因为你不能从Matlab得到你想要的外观,尝试Panel。
面板的设计是为了直接从Matlab中产生印刷出版物的输出。默认情况下,布局是物理单位(默认情况下为mm),导出到图形文件的目标是直接打印列。然而,如果最终目标是数字显示,它的表现同样出色,可以轻松控制屏幕空间的使用。

面板包含了几个Matlab中心用户建议的功能,以及一些代码-详细信息请参阅文档。

问题吗?请参阅http://www.mathworks.co.uk/matlabcentral/fileexchange/20003-panel/content/docs/faq.html第一。

注意:所有函数都需要2.11版本才能在Matlab R2014b上正确工作。

引用作为

本·米奇(2020)。面板(//www.tianjin-qmedu.com/matlabcentral/fileexchange/20003-panel), MATLAB中央文件交换。检索

意见及评分(241

塔克波动

嗨,我是M。

有一组matlab函数,如image(),它们在操作时设置轴的某些属性。因为我不太记得的原因——我想我确实有一次尝试过——事实上,面板提前创建了轴,以一种不那么容易解决的方式构建了这个机制。这是一个小烦恼,你已经发现。

至少有这两种解决方案——选择哪一种取决于您的应用程序。万博 尤文图斯

解决方案1:自己创建轴,然后分配给面板进行管理。

>> p = panel();
>> a =坐标轴;
> >显示亮度图像(im)
> > p.select (a)

解决方案2:让面板创建轴,然后设置错误的属性。

>> p = panel();
> > p.select ();
> >显示亮度图像(im);
>> set(gca, 'ydir', 'reverse');

干杯

嗨,本,我正在使用面板使用imagesc绘制一些图像。然而,图像被颠倒了。有办法纠正吗?

谢谢zwbxyzeng,我已经找到并修复了这个bug -你对原因的看法是正确的。发行版2.14应该很快就会出现,现在应该会像你希望的那样运行。谢谢你的提醒,如果不能正常工作请告诉我。干杯

嗨,Ben,你可以检查你的示例代码“demopanel1.m”。在本例中,直方图不能通过鼠标放大/缩小。但是左下角的曲线拟合图可以放大。
我猜原因是,面板有隐藏的父轴显示标题/标签。设置标题/标签时,图形的焦点切换到父轴上,此时鼠标不能点击子轴,也不能缩放子轴。

本米奇

嗨,zwbxyzeng,我还没有看到这个问题,对不起-你能张贴一个最小的例子,然后我就能检查出来吗?欢呼。

zwbxyzeng

嗨,戴安娜,
你能做的就是
ax = p.de.axis ();这给你一个坐标轴数组。
然后修改你想要的
斧子(结束).xtick(汽车)

zwbxyzeng

我想修改一下我的问题。拉伸式面板(例如:P (1,1).pack(2,3))可以放大,而固定比例面板(例如。P (1,1).pack({1/3,2/3}))不能缩放。有解决方案吗?

嗨,戴安。每个子面板通常管理一个轴-每个轴可以单独管理它的刻度-所以我不太理解这个问题,对不起。如果你想发布一个最小的例子,我很乐意看一看。干杯,本

嗨,Ben,谢谢你的回复!然而,当我做一些像set(gca,'xtick',[])这样的事情时,它会从所有子面板中删除xtick。如果我想至少有一个子面板有一个xtick怎么办?是否有一种方法可以仅为该子面板更改属性(即p(m,n).xtick('auto'))。谢谢!

嗨,Dianne,我想你会用通常的方式使用Matlab函数。比如set(gca, 'xtick', [])?或者使用'xticklabel'和{}如果你想要标记而不是文本。欢呼。

嗨,本,
谢谢你关于颜色条的回答!我有另一个问题,我如何设置轴标签只出现在选定的“子”面板上?我尝试了p(m,n).xtick('auto');和其他变体(xticklabel, xticklabelmode等),但我不能让它正确显示。如有任何建议,不胜感激。谢谢!

嗨,戴安娜,

你问(但你的评论消失了)如何处理一个颜色条的布局,我认为它是。面板以同样的方式处理所有图形对象的布局,将它们分配到子面板中。你可以创建一个子面板来布局颜色条,然后使用p.s eselect (handle)来手动管理颜色条“handle”到指定的面板“p”。然后,您可以按照通常的方式,按照您认为合适的大小调整它。

听起来你可能已经找到了这个解决方案:)。

干杯

你好,我刚刚想出了如何做到这一点(分配一个空白的第四个分区到图形的最右边的区域来创建空间)。所以请忽略我的问题。非常感谢!

伊恩

比次要情节!!!!好多了谢谢你! !

本米奇

PS:谢谢你对这个bug的提醒,不知道什么时候开始的,但我想它在2.13已经修复了。

本米奇

你好,
谢谢。对不起,我不知道“addSecondaryAxes”是什么-你有链接吗,或者一个例子,请?或者您是否可以生成一个您正在尝试做的事情的示例?
干杯,本

亲爱的本,
谢谢你的出色工作。这是一些很好的代码!
我现在想知道,如何获得“面板”工作与我的“addSecondaryAxes”功能(只是不同的规模,例如)。它类似于demopanelG,除了次要轴是在第一个轴被“选择”到特定面板后添加的。你能想到一种方法,如何将二级轴添加到由同一面板管理?我不认为公共方法集允许我这样做。谢谢你!还有个小提示,p。ch里面有个小bug。对象”(R19a)。

Tal大梁

感谢所有人的积极反馈-听到人们使用Panel总是很高兴:)

BenoitD

与Matlab提供的股票相比,这是惊人的。非常值得花点时间来了解如何使用Panel。非常感谢。

对不起,我很笨…以下(作为我解决问题的一个例子)工作得很好:


图(1)
P1 = panel();
p1。pack(N, N);
图(2)
P2 =面板();
p2。pack(N, N);

图(1)
p1 (1, 1) .select ();
图(2)
p2 (1, 1) .select ();

本米钦森

你好,马克斯

正如边际文档所说(抱歉,似乎Matlab在最近的版本中对文档系统进行了更改,因此“文档面板”不再工作,但你可以使用“编辑面板”找到所有的文档,直到这个问题得到修复):

“…布局
%算法使所有面板尽可能大,同时
%不违反保证金限制。利润
%相互尊重的小组在他们的父母和
%之间的根面板和画布的边缘
%(图形或图像文件)。"

您所期望的不会发生,因为您所要求的保证金只应用在父窗口中,而不是在图形窗口中。这种设计通常符合预期,即保持轴边垂直于包装尺寸(在“p”内,包装尺寸是垂直的)。正如您所发现的那样,有时这不是直观的。试试这个脚本:

图(1)
clf
P =面板;
p.pack (2);
(1页)。Margin = 40;
p (1) .select ();
p (2) .select ();
暂停
P.marginleft = 60;

这将显示内部垂直边距(p(1)在p内的边距,即相对于p(2))为40,然后,按下键后,在图形窗口中显示p的外部边距。你可能只需要p.marginleft来表达你的意图。

这意味着给p(1)一个不同于p(2)的左边缘,而不是给一个相邻的边(图或另一个面板)是不可能的(或者,更确切地说,设计上没有影响)。兄弟面板有对齐的边缘。如果你想要让这两个轴以不同的左边缘对齐,有不止一种方法可以做到这一点,但我建议使用一个虚拟面板,如下所示,否则请参见demopanel8,如果这是你想要的:

图(1)
clf
P =面板;
p.pack (2);
(1页)。pack('h', 2);
p (1,1) .repack ({1 e-6});
% p(1,1).select();
P (1,1).marginright = 0;
P (1,2).marginleft = 40;
p(1、2).select ();
p (2) .select ();

注意:取消注释行以查看发生了什么,或使用p(…).show()。

同样,这也是可行的,并避免了“几乎为零”的常数:

图(1)
clf
P =面板;
p.pack (2);
(1页)。pack('h', 2);
p (1,1) .repack ({40});
% p(1,1).select();
P (1,1).marginright = 0;
P (1,2).marginleft = 0;
p(1、2).select ();
p (2) .select ();

一个更老版本的panel曾经有一个名为“internal_margin”之类的参数,以允许您正在寻找的灵活性,但我放弃了它,因为它为一个很少使用的情况增加了大量的复杂性。TBH,我不记得当前版本是否以更正式的方式支持你想要的东西,但正如你所看到的,有一些hac万博1manbetxk方法可以达到这个目的。

干杯,本

嗨,本,
我还是不明白边际是怎么回事。你能告诉我为什么不行吗?

图;
P =面板;
p.pack (2);
p (1) .marginleft = 40;
p (1) .select ();
p (2) .select ();

我希望看到p(1)的左边缘向右移动40像素。

如何设置单个包装面板的外边距?

非常感谢,
马克斯

亲爱的Naty,

使用with linkaxes函数的例子:

FIG = figure();
P =面板(图);
p.pack (2, 1);
p (1,1) .select ();
Ax (1) = gca;
情节(rand (100))
p (2, 1) .select ();
Ax (2) = gca;
情节(rand (100);
linkaxes (ax,“x”);

本米奇

嗨光子学

您可以加载一个现有的图形,然后在其上叠加一个面板对象,使用选择(句柄)将指定元素的位置管理转交给面板。我还没试过,但我想应该有用……

干杯

有没有办法使用copyobj复制现有的。fig文件到面板?

本米奇

嗨Wouter

你需要“p = panel.recover()”。完成此操作后,p与原始对象接口相同,并且不需要再次调用pack()、select()(尽管您可以调用select()来激活轴,等等)。

干杯,本

Wouter

Ben,我如何在一个面板之后重新选择一个面板,并在之前的面板上绘图?

即。

清除所有;关闭所有;
图(1);
P = panel();
p.pack (1);
p (1) .select ();
情节(0:0.1:10 sin (0:0.1:10));
清除所有;% p对象被销毁
图(1);
P = panel();
p.pack (1);
p (1) .select ()
保存所有;
情节(0:0.1:10 cos (0:0.1:10));
推迟;

Wouter

本米奇

嗨Yonatan

该错误消息(是否出现在第17行?)表明“p”已被定义为一个uipanel对象,一个matlab内置对象。这可能会发生,例如,如果你在路径上有另一个名为“panel”的函数,它返回一个uipanel对象。试着用“哪个面板”来弄清真相。此外,在运行demopanel6之前运行“clear”,以防工作区中的某些东西影响脚本的行为。

干杯

-------------------------------------------------------

>> p = uipanel();
>> p.pack('h', 2);
类'matlab.ui.container.Panel'没有合适的方法、属性或字段'pack'。

似乎非常有用的函数,但返回一个错误的演示:
> > demopanel6
类'matlab.ui.container.Panel'没有合适的方法、属性或字段'pack'。
版本2017 b。

谢谢你的积极反馈:)。

你应该“addpath PATH_TO_PANEL”,而不是“addpath PATH_TO_PANEL_panel”。m”,对吧?否则,我建议您确保路径上没有任何旧版本,您可以使用pathtool检查路径,以确保没有意外。它应该直接起作用,阿菲克。

干杯

DrBones

Sewu

我是一个长期快乐的用户面板,所以非常感谢提供这个。今天命运迫使我终于从MatlabR2013迁移到R2017。我第一次发现我多年前的“面板”下载不再有效。所以我下载了新版本。
现在我想说:
目录PATH_TO_panel.m
clf
P = panel();

如果不调用“清除类”,就不能重新定义类“面板”。在创建面板之前不理解地编写“清除类”也没有帮助。有什么明显的原因吗?
谢谢你的帮助.....

嗨Wouter

不,目前还不行,当然,这是很容易做到的。

如果寻址模式对您非常重要,当然可以使用循环构造q = {p(1,1) p(1,2) p(2,1) p(2,2)}…

干杯

Wouter

Ben,有可能通过一维索引来选择面板吗?例如,

P = panel();
p.pack (2, 2);
p (4) .select ();== == p(2,2).select();?

嗨Naty

次要情节只是布局。我不太清楚你所说的“链接轴”是什么意思,但你可能想要查看轴和图形的文档来找到这样的功能,而不是面板。

干杯

Naty原主

嗨,本,
我下载了你的工具箱,看起来真的很不错。有一件事困扰着我,那就是我没有找到一种方法将不同的次要情节联系起来。有办法做到吗?

@Ahmad

我没有尝试过这样做,但我怀疑您看到的是xabel()和ylabel()默认情况下会在当前对象的左侧和底部标记当前对象。如果你想要标签在uipanel里面,你可能想要的是在里面打包一个面板,这样你就可以做显式的保证金管理,就像这样:

P = panel(handles.uipanel);
p.pack ([]);这个嵌入面板将被赋予标签,并有一个关于uipanel的边距
p (1) .pack(…);这些是你的轴面板,等等。
p (1) .xlabel(…)
p (1) .ylabel(…)

抱歉在没有测试的情况下发布了这篇文章,我现在正在休假——如果这不能解决你的问题,请再问一次。

干杯,本

@Maximilien

发生的事情是,这个颜色条,留给它自己的设备,做一些它自己的轴大小管理,在轴旁边为自己设置大小。当您更改边距时,面板将轴恢复到面板管理的大小,并且颜色条仍然突出在一侧。边缘处理得很正确,但对于轴-颜色条不是,在你的情况下,由面板管理。

为了让颜色条(这只是另一个图形对象)作为面板布局的一部分来管理,显式地打包它:

p(2,我,1,1)。pack('h', {.8 []})
p (2, 1, 1, 1) .select ()
p (2, 1, 1, 2) .select (colorbar)

嗨,本,
我试图使用这个工具来创建一个xlabel和ylabel。我使用GUIDE创建了面板和轴。我希望所有的子图都有一个标签。根据你之前在我的开放函数中的评论,我设置了p = panel(handles.uipanel),所有的时间标签都显示在面板外。请问用标签怎么解决?

问候,

嗨,本,
谢谢你的好工具。

我对颜色条有意见。他们弄乱了页边距。你有办法妥善处理它们吗?
我在这里复制没有数据的布局

图(904);clf

P = panel();
p.pack({。2。8})
p (1) .pack(“h”。4 .2 .2 .2])
p (1,1) .select ()
对于I = 1:3
p (i + 1) .select ();
结束

p (2) .pack(“h”,3)
P (2).de.marginright = 20;
对于I = 1:3
p (2, 1) .pack (' v ', 2)
p (2, 1) .pack(‘v’,{。8 []})
p (2, 1,1) .select ()
colorbar
%这是一个测试色条。当它在这里,我在调试器中运行代码,用这个颜色条,下一行marginbottom会以某种方式重置边缘。
p(2,我,1,1)。Marginbottom = 0;
p (2, 1, 2) .select ()
p(2, 1、2)。Margintop = 0;
结束

你好Stefano,谢谢你的反馈。试试下面的方法开始吧。

图(1)
clf
P = panel();
p.pack (3,3);

对于I = 1:3
对于j = 1:3
p (i, j) .select ();
极地(rand (100,1));
结束
结束

嗨,本,谢谢你的工具箱。它真的很棒。
我需要创建一个带有偏光轴的许多子面板的面板。
标准的matlab方法是调用subplot(rows,cols,index,polaraxes)。
有没有办法把几个偏光轴放在你的面板工具箱里?

嗨,阿米特

谢谢你的评论!

抱歉暂停,这个网站已经做了什么是经常做的,并决定停止再次发送我的通知电子邮件。

恐怕我不熟悉那个工具箱,但如果你发送一个示例脚本,我会下载它,看看我是否能理解你的问题。

干杯

嗨,本-有什么解决办法吗?

嗨,本,

首先,非常感谢这个工具。它让我的生活变得如此简单,我几乎每天都用它来制作不同的面板。

我一直在使用你的工具和GUI布局工具箱。我最近用你的面板工具进行了对接/解对接(基本上面板中的gui被解对接到一个新的/现有的图形中)。

我面临的问题是,面板父改变这样做,因此它停止工作。

我能以某种方式重新分配面板的父图形句柄到新的图形而不破坏它的内容吗?

再次感谢这个工具。

最好的
阿米特

本米奇

你好马提亚

嗯…这是令人讨厌的。对不起,我没有simulink,所以我没万博1manbetx有看到这种行为。

出现在“文档面板”中的文档是由Matlab从面板中每个函数顶部的注释块中自动提取的。M,要看文本文件中的文档,去那里。看到他们的格式很好…也许Matlab有一个将文档导出为HTML的函数?如果有的话,我还没有遇到过。如果你找到了,请告诉我。如果你加载面板。在编辑器中,可能会有一个导出文档的功能- GUI在过去的几年里已经爆炸了,我没有跟上。

你还可以在/docs下找到面板的概述/介绍文档,在/demo下找到演示文档。这就是所有的内容,希望格式适合你们。

干杯

FranticFrog

你好,本,

首先,我要非常感谢你的工具。太棒了。
但是我在文档上遇到了一个问题。不幸的是,在Matlabs Simulink中有一个“面板”选项-所以每当我试图调用“文档面板”时,它万博1manbetx都会显示对它的引用
“万博1manbetxSimulink.dialog.Panel类”
当我在寻找命令时,我通过调用“doc panel/panel”并尝试从那里导航并通过查看代码本身来解决它。
然而,这是相当乏味的,我想知道是否有任何简单的工作,或者我是否可以在其他地方找到其他格式的实际文档“文档面板”。(一个简单的文本文件也可以)

问候,
马蒂亚斯

嗨Wouter。

你的思路是对的。如果你

删除(p(1)定格);

只删除p(1)中的两个子面板,而不是p(1)本身,即行面板。P(1)仍然占据空间。你想要的

删除(p (1));

但是要查看更改,对于删除,您还必须发出

p.refresh ();

干杯

Wouter

@Ben,这是一个Matlab问题。Matlab确实改变了他们的默认颜色。然而,我有一个新问题…我想删除一行/一列的数字。我读到这是可能的delete(p(1).children)。然而,我怎么能确保其他的情节再次填充完整的区域,这是通过删除子…

我有以下片段。

P = panel();
p.pack (2, 2);
p.select(所有的);
p.identify ();
删除第一行
删除(p(1)定格);
现在我需要一个命令,使第二行填充完整的区域。

rcscott

本米奇

嗨Wouter

我不明白Panel为什么会参与线条着色。如果你能提供一个简短的脚本来说明这个问题,我会找出发生了什么。

干杯,本

Wouter

嗨,本,

请问Panel使用的颜色顺序是什么?我注意到,当使用Panel时,第一行图不是蓝色的,而是稍微不同的深蓝色。你如何控制它?我试着在控制面板里找。但是我什么也没找到。

提前谢谢你。

嗨,马克西米连

对不起,我不知道为什么没有通知我你的帖子。最近的版本已经修复了这个错误,所以我怀疑您使用的是旧版本。最新版本是2.12。

干杯

你好,

谢谢你的精彩节目。
在我的matlab (2014b)上,迄今为止的最新版本在显示方法中出现了一个错误:

未定义的函数'abs'用于输入参数类型为'matlab.ui.Figure'。
num2str错误(第66行)
xmax = double(max(abs(widthCopy(:))));
面板/显示错误(第887行)
pp =['附加到图' num2str(p.h_figure)];

发生在我做的时候
图;p = panel()

如果我用;

詹姆斯

对不起,这似乎是一个一般的绘图问题,与面板无关。

美妙的;效果很好。如此简单!谢谢你!

嗨,安东尼

我不使用GUIDE,但我希望Panel能在这样的环境中正确操作。例如,在GUI中添加一个uipanel,然后在OpeningFcn底部添加以下代码。

干杯

--------

%创建一个面板
P = panel(handles.uipanel1);
p.pack (2);
p (1) .select ();
情节(rand (100,1));
p (2) .select ();
情节(rand (100,1));

快速的问题。我在你的演示文件或
文档/ matlab交换页面。

是否有可能在GUIDE /创建的gui中显示面板图
其他GUI工具箱?我希望将面板图整合到另一个面板中
GUI窗口,而不是有一个单独的窗口弹出。如果是的话
有可能,该怎么做呢?

干杯!

本米奇

嗨,安娜-看起来你已经成为这个网站上第二篇文章漏洞的受害者;我看不到你的原始信息:)。干杯

安娜

嗨,本,
抱歉,忘记指定生成错误的命令:

P.marginbottom = 15;

谢谢!
安娜

嗨,乔纳斯。对不起,我不使用github,这是做的事情吗?我刚刚上传了一个新版本,该版本为xlabel函数返回已访问图形对象的句柄;使用它,您可以按照您的意愿访问对象的属性。注意,对于对象/轴面板,您可以像往常一样使用默认的x/y/zlabel函数。干杯

是否有可能在面板上添加乳胶功能?
所以可以这样写
p (1) .xlabel(“(\妈妈美元)”,“翻译”,“乳胶”)

乔纳斯

你能把它也上传到github吗?
这个网站似乎屏蔽了浏览器的下载,屏蔽了广告软件和跟踪器。谢谢你!

珀斯

本,再次谢谢你。看起来你在Mathworks上比我走得更远,不幸的是这是Matlab的bug。

由于我已经创建了多个窗口,如果要在屏幕上查看图形,我将对其进行调整,以便在必要时将其导出到多个文件。再次感谢所有的帮助和一个伟大的工具箱!

本米奇

嗨,珀斯

Mathworks进行了调查,并确定了类似的宽度限制在56厘米左右。他们没有确切地指出问题的来源,但至少已经确认这是R2014b的一个限制。他们是否会采取行动,目前还不清楚。但看起来超大的画布在R2014b中没有正确渲染,正如怀疑的那样。

如果他们有进一步消息我会更新的。

干杯

本米奇

对了,如果帆布的高度上限是10英寸,那就是25.4厘米,症状就会和我们现在看到的很像。

本米奇

嗨,珀斯

是的,我也一直在和mathworks联系。而且,和你一样,他们的第一反应是建议同样的“修复”。

将“PaperPositionMode”设置为“auto”相当于告诉Matlab它可以忽略“PaperPosition”设置,所以它并没有“修复”这个问题,只是消除了对输出画布大小的控制。如果运行测试,您会发现这两个设置是隐式链接的。如果你将“mode”设置为“auto”,“paperpos”现在会根据人物的屏幕位置读取一个不熟悉的值。相反,如果你设置“paperpos”,“mode”现在将显示为“manual”。这一切都很好,并且定义了行为。因此,如果您将其添加到我建议的脚本中,问题就会消失,但不是因为它被修复了,而是因为它被消除了。如果你将它添加到面板/导出,你会发现你失去了对输出画布大小的控制,一切都非常错误。

我已经提交了一个错误报告,不正确的渲染,我相当肯定/是/一个错误,我不能看到它不是。不管怎样,如果解决了,我会告诉你的。如果这真的是一个渲染错误,并且它只在画布高度(我还没有查看宽度)大于26cm左右时出现,那么很少有用户会遇到它,因为这使得一个数字太大,一旦允许在A4纸上留下空白,所以不要期望它很快就会被修复。

一个解决办法是把它分成两半,然后缝合。这将很容易做到面板。您还可以查看如果宽度较大,是否会出现相同的问题—如果不是,您可以将图形呈现为多个列,然后将其重新排列为您所需的形式。

另一个修复看起来应该工作,虽然我没有尝试过,只是保持在25/26厘米的高度限制。例如,你可以通过要求渲染器以两倍的DPI和一半的高度渲染来欺骗渲染器。然后,您必须相应地更改图形元素的大小,例如字体和线条。不幸的是,这将包括所有的图形元素-轴框,网格,一切,但你可以写一个脚本来自动处理所有的图形元素预渲染。

最后,如果适合您的工作流程,您总是可以返回到

希望这对你们有帮助,干杯

珀斯

嗨,本,

我一直在联系Matlab,他们根据你的脚本建议添加

‘PaperPositionMode’,‘汽车’……

到gcf的设置。我查了一下,默认值在2014b从auto改为manual。对于您的代码片段,输出似乎是正确的,但是当我在面板中的导出函数中添加相同的设置时(在第1763行),我给出的代码段根本不能正确工作。

所以我可能在面板中做了一些错误,或者自动PaperPositionMode的功能也发生了变化(在文档中有更多关于该模式的解释,这在2014a的文档中是没有的。你能再帮我一点忙吗?

珀斯

再次感谢Ben,我已经与Matlab联系了这个问题,一旦我知道更多,我会让你知道!

本米奇

PS注意,一旦输出画布足够大,所有的情节特征都开始以不正确的大小呈现,所以这不仅仅是字体大小的问题,这是某种渲染缩放器的问题。你是对的,下面的脚本在R2011b中正常工作。

本米奇

嗨,珀斯

我只能说,这是R2014b渲染行为的改变,面板上没有bug。下面的脚本在不使用面板的情况下重现了相同的问题——对于较大的导出图形,字体大小不受尊重。我不知道Mathworks是否会认为这是一个渲染错误,或者是定义的行为,但如果您与他们讨论这个问题,我很有兴趣了解您的进展。

干杯,本

-----------

图(1);
clf
1)情节(randn (100);
Ylabel('驴','fontsize', 8);

h = 10:2:40

Sz_cm = [20 h];
文件名= ['test' int2str(h)]“中将”);

集(gcf,……
“PaperUnits”,“厘米”,……
“PaperOrientation”,“portrait”,…
'PaperPosition', [0 0 sz_cm],…
'PaperSize', sz_cm…
);

Set (gca, 'pos', [0.2 0 0.7 1]);

print (gcf,……
'-loose', '- dng ', '-r150',…
文件名);

Im = imread(文件名);
H = round(size(im, 1)/2);
Im = Im (h+(-200:200),:,:);
imwrite (im,文件名);

disp(文件名);

结束

珀斯

嗨,本,

感谢您的快速回复和更新!

由于我正在做一些相当复杂的绘图例程,我需要一些时间来生成一个简短的代码片段,但我想我现在已经有了。下面的代码在2014a产生了一个pdf,但不是在2014b。

图;
P = panel('no-manage-font');
绘制所有图形
nrGraphs = 50;
highightgraphs = 10;
因为我= 1:nrGraphs
p.pack ({{heightGraphs}});
p (i) .select ();
情节([1:10],[1:10]);
ylabel(测试);
集(gca,‘XTickMode’,‘汽车’,……
“XTickLabel”,[],…
‘xgrid’,‘上’,……
“字形大小”,8);
集(gca, ticklength, 0 *得到(gca, ' ticklength '));
集(get (gca, YLabel),…
“旋转”,0,…
“HorizontalAlignment”、“对”,……
“VerticalAlignment”,“中产”,…
'FontSize', 8, 'FontWeight', 'bold')
结束
移动和调整窗口大小
movegui (p.figure(),“西北”);
scnSize = get(0,'ScreenSize');
set(p.figure(),'outerposition',[scnSize(1) scnSize(2)+50 min(900, scnSize(3)) scnSize(4)-50]);
%导出图形
p.export('test.pdf', ['-h' num2str(nrGraphs* hightgraphs)]);

Ligong汉

本米奇

Release 2.11将很快发布。修复了R2014b,谢谢杰伦。如果有任何问题,请让我知道。

本米奇

多谢提醒,杰伦。现在上传更新,这修复了num2str()问题。我不能用no-manage-font重现bug;当我运行demopanelF并导出两个结果图时,它们似乎如预期的那样呈现。如果你能给我一个重现这个问题的代码片段,我将调查它。

干杯

珀斯

随着Matlab 2014b的更新,图形系统有了相当大的变化。尽管大多数功能仍然有效,但仍有一些功能不能正常工作。这篇提交的文章是否有可能得到更新,以再次使用Matlab的最新版本?

到目前为止,我遇到过显示p或识别面板不再工作(由于数字句柄上的num2str),但由于某种原因,字体大小的变化也被忽略了,我自己做的(因此使用no-manage-fonts)导出时,这没有发生在2014a。

尽管如此,这仍然是一个更好地控制绘图的好工具!

在它们的父面板和根面板和画布边缘(图形或图像文件)之间的边距是受尊重的-请参阅doc panel/margin。

因此,如果你为“p”设置一个0的边距,你会看到你的子轴正好对着图形边缘。他们自己的边缘相对于数字边缘不受尊重。

干杯

你好,
谢谢你的工具。
我试图测试它,但遇到了一个问题,我认为问题可以归结为以下几点:

图;p =面板();
P.margin = [0 0 0 0];
p.pack(‘v’,{。35 []});
(1页)。Margin = [20 20 20 20];
p (1) .pack(“h”,{。4,[]});
p(1,1),告诉();
p (1,1) .select ();
p

返回:
父根:[附于图27,垂直][边距0 0 0 0 mm]
父(1):[0.350,hori][边缘20 20 20 20 20 mm]
物体(1,1):[0.400][边距20 20 20 20 20 mm]
未提交(1,2):[拉伸][边距20 20 20 20 20 mm]
未提交(2):[拉伸][边距0 0 0 0 0 mm]

为什么尽管我在p(1)中设置了边距为20毫米(我在打印结果中看到了它),但它不会在显示的轴上显示它?

非常感谢你的帮助。

嗨,安德里亚

听起来,您可能会被“colormap”是图形的属性而不是轴的属性这一事实所绊倒。这与面板无关。

我无法理解你发布的代码,但解决这个问题的方法通常是使用RGB图像而不是索引图像。如果你绘制“image(rand(30,30,3))”,你会注意到,如果你改变了颜色映射,得到的图像不会改变。

干杯

这就跟你问声好!首先,英语不是我的语言,如果你有理解我的问题,请不要担心,你可以告诉我。
我喜欢你的面板。M,但是我在管理一些功能方面遇到了问题。
我必须绘制几个图形,并且每个图形都使用彩色。这个问题与最终的cmap将扩展到其他图形的事实有关,我能做些什么来避免这个问题?

这是我的代码:
p =面板();% Creoil pannello
% p.title (p [= ', num2str(时间/ 1 e6/365.25/86400), '马'])
我的生命中最重要的内容是P-T-t,其次是
P.pack ('v',[1/2 /2])
p (1) .pack(1、2);
p (2) .pack(1、2);

p (1 1 1) .select ()

fmap =线;
j = 1: num_points
T=markt';% Per visualizare i dati in modo più liscio, è must ario usare fnplt2 in associazione con cscvn, Per utilizzare quest'ultima è must ario trasporre i dati di P-T-t
P = markp ';
%如果我< = 5
fnplt2 (cscvn ([T (j, 1:我);P (j, 1:我)]),fmap (j:), 2.0);
C1 =线(num_points);
s = 50;
Ta = markt (q, 1: num_points);
Pa = markp (q, 1: num_points);
散射(C1,助教,Pa,年代,“d”,“填满”,“MarkerEdgeColor”,“k”,“线宽”,1.5)
轴([0 700 0 10])
包含(温度)
ylabel(压力)
title ('P-T-t path')

保存所有

结束


% % Compos1zione
p (1, 1, 2) .select ()

步骤2 = 1;
% if temp
% (c、h) =轮廓(x_vec_t、z_vec_t ColorGrid_t, 100:200:2300,“r”,“线宽”,0.5);
%结束

z_vec. pcolor (x_vec. / 1000年/ 1000年,ColorGrid);
阴影插值函数
如果spec == 'c'
colormap (C_map);
的士([0 99])
其他的
colormap(飞机);
如果cmod
的士([cmin cmax])
结束
colorbar
结束

ij轴图像

保存所有

s = 50;

% x = markx (q, 2);
% z =挞伐(q, 2);
xa = markx (q:);
咱=挞伐(q:);
x = xa. / 1000;
z = za. / 1000;
xlenght =大小(x);

C =线(20);

分散(x, z s、C、d,“填满”,“MarkerEdgeColor”,“k”,“线宽”,1.5)

推迟


如果temp1
抓住
(c、h) =轮廓(ColorGrid_t z_vec_t. x_vec_t. / 1000年/ 1000年,[100:200:2700],“k”,“线宽”,0.5);
clabel (c、h、“颜色”、“w”);
ij轴图像
推迟
结束

xlabel('X Width in km')
ylabel('Z深度,单位为km')
标题(['时间= ',num2str(时间/ 1 e6/365.25/86400), '马'])

h =选择(“colormap”)


% %即
%绘制

p (2, 1, 2) .select ();




如果临时
v = 100:100:2500;
(c、h) =轮廓(gy, gx vizmat_t, v,“w”,“线宽”,0.5);
结束
如果logmod
如果(strcmp (viztype,“公关”))
m = 1: ynum
为n = 1: xnum
如果abs(vizmat (m,n)) < 1
vizmat (m, n) = 0;
其他的
vizmat (m, n) =符号(vizmat (m, n)) * log10 (abs (vizmat (m, n)));
结束
结束
结束
其他的
Vizmat = sign(Vizmat).*log10(abs(Vizmat));
结束
结束
pcolor (gx gy, vizmat);
阴影插值函数
colormap(飞机);
如果cmod
caxis ([cmin cmax])
结束
colorbar
ij轴图像
轴([gx(1) gx(end) gy(1) gy(end)])
[…]

我principiant……我知道,我希望你能给我一个答案,祝你今天愉快,再见

Gautam戴伊

本米奇

如果一个函数没有返回句柄,你通常可以通过遍历数字树来恢复它——从get(gcf, 'children')开始,然后从那里开始工作。不优雅,但是…

伊恩

感谢Ben的想法,不是所有的函数都返回句柄:-(,但对于那些做你的想法是,我让外部函数创建轴“自由”,然后设置我的面板,然后使用.select(axis_handle)将轴捕获到正确的面板-我没有这样想过,因为我通常总是选择()在我绘图之前。等我有时间就会试试。再次感谢这样一个有用的实用程序!!

附注:是的,FEX上的各种网站bug都很烦人,我通常在提交之前复制我的文本,以防万一……

本米奇

哦,太棒了。我被这个网站的愚蠢错误搞砸了,如果你发了两次,就会吃掉你的第一个帖子。一次。我希望他们能解决这个问题。

我不会把它全部发一遍,它的本质是:

1)我可以想象添加一个标志到面板,这样它就会尊重一些select()ed对象的现有布局,并在它进行布局时反映它。然而,我将通过创建具有绝对定位的子面板来实现它,因此……

2)为什么你想做的事情很难用绝对定位,手动应用,因此?

%轴句柄来自工具箱X
H1 =…;H2 =…;

%包装成一个面板
P.pack ({[0 0 1 0.45], [0 0.55 1 0.45]};
p (1) .select (h1);
p (2) .select (h2);

干杯

本米奇

我突然想到,这不是误会吧?我的意思是,显然面板是“不重叠”的。这种情况是不一样的,对吧?抱歉,我刚刚意识到我可以用不止一种方式阅读你的原始帖子。

干杯

伊恩

我的问题是,我有一个大工具箱的几个函数,绘制2个轴,一个在另一个上面。我需要使用他们的功能*不变*,但希望输出(2轴,不重叠)成1个面板(相对定位)。每当我选择()或调整大小,面板然后设置两个*轴*在面板内的位置相同的值(重叠)。如果我可以重写他们的函数,我可以使用面板布局,但我试图避免在他们的工具箱中隐藏大量代码……我认为select()总是调用recomputeLayout(),它假设子轴应该填充面板(如demopanelG)。干杯!

本米奇

嗨——经常发生的情况是,当人们评论时,网站已经停止向我发送通知,所以我没有看到这些评论,对不起。谢谢你的反馈。

@Ian -如果它们不重叠,我建议你用绝对定位代替,见demopanel6。这是你需要的吗?

干杯

伊恩

嗨,Ben,另一个特性请求:在demopanelG中,你显示两个轴被传递给select()。目前,这些轴具有相同的“位置”属性。通常情况下,人们可能希望将一个轴置于另一个轴之上,在这些轴上使用select()会丢失每个轴的位置,迫使它们重叠。如果我们可以通过一个不重叠位置的面板来管理轴,那就太好了。

吉姆

太棒了,Ben,谢谢你的分享。尝试了许多其他方法来改变Matlab如何显示图形,您的方法肯定是最详尽和经过深思熟虑的。允许我以我想要的方式显示我的数据,节省了我很多时间!

Ratman

嗨,米奇,起司!

亨瑞克

乔尔

效果很好,谢谢!

本米奇

嗨,乔尔,谢谢你的评论。

作为回答,我通常不使用这样的面板(相反,我修改脚本并重新从头运行它),但如果您喜欢在命令行上瞎折腾,这是可以做到的。正如我所说,这是相对未经测试的,因为我没有使用它,所以是ymmv。

我认为如果你删除一个子面板,所有东西都会正常运行,你可以在一个面板数组上调用delete。所以,在你的例子中,试试:

删除(p(1)定格);% p (1) .reset ()
(1页)。pack(2, 2);

干杯

乔尔

嗨本!
我想知道是否有办法重置面板。
像这样工作的东西:

P =面板;
p.pack (2);
p (1) .pack (2);
p(1、2).select ();
图([1 2],[1 2])

p (1) .reset ();
p (1) .pack (2, 2);

坦克!

安娜

谢谢,现在工作得很好。谢谢你的帮助,再次感谢这样一个有用的工具!

嗨,安娜,谢谢你的评论:)。

“annotation”在整个帮助中都是坚定的,它在“规范化数字单位”中工作,所以我认为这就是它。但是,如果你创建了一个,然后将它的“父”属性更改为一个轴,你会发现它被锁定在轴上而不是图形上。过期的文档?也许。“matlab注释轴”上的谷歌在其他地方也会出现这个解决方案,顺便说一句。

H =注释(…);
Set (h, 'parent', gca);

为了充分披露,您的解决方案可以与面板一起工作(如果仍然有必要的话)。这样做的方法是让面板通知你,当布局发生变化。做的事:

p.setCallback (@myfunc mydata);

函数“myfunc”将在每次“p”下的布局改变时得到一个调用。如果坐标轴/父轴解决方案不起作用,这就是我的建议。

干杯

安娜

嗨,谢谢你提供这么好的工具!一个快速的新手Q…我有麻烦添加自定义图例到我的一个面板。定位文本标签很容易使用'unit' 'normalized'在当前面板中定位。但是“注释”(用于添加行、框等)似乎只能参考整个图形窗口来定位东西。我遗漏了什么吗?我已经尝试使用p(1,1).select();axesPosition = get(gca, 'Position');但这并不理想,因为我代码中面板位置的后续更改。是否有一种方法将文本和注释位置引用到当前面板(数据单位或规范化到轴?) Any advice would be appreciated!

谢谢一个非常有用的工具!

Kazumasa

谢谢你,Ben,你这么快就有了一个实施建议的想法!然后我会期待未来的版本。再次感谢!

本米奇

嗨Kazumasa

谢谢你的意见。保存面板管理与数字…是个好主意。您必须遍历图形对象树并将关联存储为引用而不是句柄,然后在加载时重新关联。这里还有一些工作要做,所以我不能马上做,但我会把它放在下一个版本的待办事项清单上。谢谢你的建议。

干杯

Kazumasa

你好,本,

非常感谢您的贡献!

我想知道是否有一种方法来保存一个面板管理的图形与相关的面板变量,这样我就可以稍后加载图形并通过面板函数处理它。如果可能的话,面板对我来说真的是不可缺少的东西。

嗨,弗兰克

我不明白这与你概述的问题有什么关系,面板与乳胶解释器一起工作很好,afaik。但是你去吧,电脑有时候就是这样的——不管怎样,很高兴你把它整理好了:)。

干杯

嗨,本,
我终于找到错误了。
我有一个不同的数字
集(0,“defaulttextinterpreter”,“乳胶”);

专家组似乎不喜欢这样。
只要我声明tex为默认值,这一切工作。再次感谢。

嗨,弗兰克

你修改后的代码在这里工作很好(R2011b/win64),所以这个问题似乎是特定于你的环境或你的matlab版本。你使用的是哪个版本/操作系统?

我恐怕不知道“产生一个空柱状图”是什么意思。在图的哪个位置?“空”是什么意思?一种可能是,当创建第二个轴时,第一个轴被破坏了。另一种情况是,第一个轴最后包含第二个bar3。你能给我一个数字吗?

在任何情况下,这两个函数bar/bar3应该产生相同的总体行为,所以要么你的版本有bug,要么——这总是值得检查的——你正在使用一个非标准的bar或bar3。检查“which bar”和“which bar3”的输出:它们应该都在“specgraph”下。不管出于什么原因,可能发生的是对“当前轴”的一些混乱。使用gca命令查看发生了什么。

干杯

嗨,本,谢谢你的回答。

我的意思是我的代码

% %
P =面板;
p.pack(1、3);
一个=兰德(3);
p (1,1) .select ();
bar3(一个);
持有;
p(1、2).select ();
bar3(一个);
% %

生成一个空条形图,而

% %
P =面板;
p.pack(1、3);
一个=兰德(3);
p (1,1) .select ();
bar3(一个);
持有;
p(1、2).select ();
栏(一个);
% %

正确生成一个bar3和一个条形图。

本米奇

嗨,弗兰克

你的代码行“p = p.pack(1,3)”不工作,我已经将其更改为“p =面板;p.pack(1、3)”。有了这个更改,代码在这里就可以正常工作了。

你说它“失败”是为你,但你没有说为什么。

干杯

弗兰克

我想要几个3D柱状图是我的情节,但不能让它工作。下面是一个例子。
如果我将第二个bar3(a)替换为plot(a)或甚至bar(a),那么它将产生适当的输出。
但是任何包含两次bar3的图似乎都失败了,我不明白为什么。

p = p.pack(1、3);
一个=兰德(3);
p (1,1) .select ();
bar3(一个);
持有;
p(1、2).select ();
bar3(一个);

你好杰里

是的,我想它可以做一些事情,比如在默认情况下尝试把东西挤进去,但它目前还没有这样做。也许是版本3:)。

顺便说一句,您知道MSG只是一个警告,而不是一个错误。如果最大化窗口,面板可能会正确呈现。如果你调整差额,他们当然会的。它只是意味着“无法在当前条件下渲染面板”。

干杯

如果默认裕度没有改变,并且请求了太多的图,那么它会发出:警告:一个面板的大小为零,并且管理对象被隐藏。它应该像subplot那样容纳更小的子情节。
这里有一个例子:

%工作- >
P = panel();
P.pack ('h', {0.50, 0.50});
p (2) .pack ({0.50 []})
p (2, 1) .pack(3、4)
p (2, 2) .pack (2, 2)
p.select(所有的)

%改变p(2,1) ->无效
P = panel();
P.pack ('h', {0.50, 0.50});
p (2) .pack ({0.50 []})
p (2, 1) .pack (4, 4)
p (2, 2) .pack (2, 2)
p.select(所有的)

%更改默认margin ->重新工作
P = panel();
P.pack ('h', {0.50, 0.50});
p (2) .pack ({0.50 []})
p (2, 1) .pack (4, 4)
p (2, 2) .pack (2, 2)
P.de.margin = 1;
p.select(所有的)

除了这一点,我喜欢。

本米奇

嗨-谢谢你发布的信息。我猜这个函数出现在后来的版本中。

干杯

J

我能够在matlab中心文件交换中找到isrow()的源代码。只是谷歌它和matlab中央文件交换。然后将其保存为您路径下的新函数。

J

我使用MATLAB 7.10.0 (R2010a),我得到这个错误:未定义的函数或方法“isrow”输入参数类型为“单元格”

有办法解决这个问题吗?

本米奇

嗨Opher

谢谢你的意见。这是因为“margin”是一个继承的属性,所以所有子图都将获得您所选择的值。关于如何设置页边距,请参阅demopanel9。

在任何情况下,你想要的是:

%默认保证金
P.fa.margin = 2;

%比根缘
P.margin = [5 5 15 15];

%其他特定裕度
...

干杯

谢谢你。这似乎是经过深思熟虑的。

一个问题:当我在根结点上使用边距时:

P = panel();
p.pack(3、4);
P.margin = [5 5 15 15];

我对子图而不是根有影响。如何对根结点产生影响呢?

Jaekyun

不错的工作和演示:)

好看的面板。

亚历克斯

本米奇

发行版2.10将很快发布。这个版本意义重大,因为布局的优化方法已经被过程方法所取代。这应该意味着没有优化工具箱的用户不会再有更差的性能(根据Nordlöw,我希望这至少能帮助你:D)。'defer'标志现在应该被废弃了(它将继续被支持)。万博1manbetx

此版本还增加了对固定物理大小的面板的支持,从而万博1manbetx避免了下面评论中所建议的不优雅的解决方法。详见新的“帮助面板/包”。这导致pack()函数的推荐语法发生了变化,如下所示:

OLD: p.pack([0.2 0.3 -1])
NEW: p.pack({0.2 0.3 []})

旧的语法仍然被支持,并且没有取消支持的计划,但是万博1manbetx新的代码应该使用新的语法(将-1替换为[],将[]替换为{})。要打包固定物理大小的面板,只需将大小包含在单元格数组中,例如:

P.pack ({0.2 {50} []})

注:这是一个相当大的重做-任务关键用户(哈!)可能会坚持使用2.9直到6月,以防任何问题。

本米奇

PS.我把这个问题添加到一个新生的常见问题中,因为它被问了两次:)

本米奇

嗨Bahaa

谢谢你的意见。semilogx()等的解决方法将在本页的后面介绍。

干杯

Bahaa

嗨,本,

这是一项了不起的工作……谢谢楼主分享!

我对此有一个评论…当使用“semi - logx”或“loglog”在选定的面板中绘图时。图轴保持线性比例。有没有办法让它变成对数尺度。

问候,

Bahaa

2.9版将很快发布。只有小更新,不需要升级。发布日志有详细信息。

本米奇

发行版2.8将很快发布。Panel.plot()被撤销,并被panel.fixdash()取代,这简化了使用并提高了性能。有关建议用法,请参阅demopanelI(更新版本)。它非常简洁,现在,实际上,请尝试一下,让我知道你的想法:)。

很好的功能,写得很优雅。

本米奇

2.7版将很快发布。它增加了如何做插入图的演示(tx Ann Hickox),但更有趣的是增加了panel.plot(),一个用于绘制虚线和虚线的集成函数,它可以解决位图导出图像中这些虚线的糟糕渲染。

注意:在这个版本中,setCallback()被重命名为addCallback(),以支持新的plot()函数-如果你使用setCal万博1manbetxlback(),你将需要搜索/替换。

本米奇

嗨,艾略特

首先,答案是不优雅的,如果Panel提供固定尺寸的包装,而不是仅提供相对尺寸的包装,那就太好了。也许在未来的版本中。但是,您可以按照以下方法进行处理(是的,回调是正确的想法)。首先,你必须编辑面板。M本身允许自己访问"packpos"属性,添加这些行:

例“packpos”
Out = p.packpos;

大约在2289行,就在case 'figure'下面。重启Matlab。现在,你需要的关键特性是:

1)附加回调到“p”,根面板。这是更直观的一点,尽管您也可以通过自己的方式实现相同的事情。

2)在回调中通过"p = data.panel"访问p。然后是p, p(2)对象(即“u2”),get(p(2)。对象,'children')(即"tab"),等等。

现在,计算p(2)的正确包装大小,检查它是否是当前的包装大小(即检查它是否等于p(2).packpos),如果不是,则p(2).repack()它。

啊,真痛苦。作品。所以,是的,下一个版本的待办事项清单上的一项是允许固定尺寸的包装。

完整的代码在goo。gl/A1vnu,这不是我引以为豪的东西。

干杯

艾略特

我有一个小麻烦设置我想要的布局,其中包括上面的一个情节和下面的数据表。两个主要目标是:

1.让情节占据尽可能多的空间,而不切断任何桌子
2.当窗口调整大小时,调整plot的大小,但保持表的高度固定。

下面是我到目前为止所拥有的,但我必须蒙混表的高度,调整大小不起作用,因为我不知道如何访问我的uipanel和uitable的属性从一个回调函数。

有谁能给点指导吗?

-----------------

创建数据和表
X = randn(100,3);
tableData =[均值(X,1);性病(X, [], 1)];

设置图形
clf
Set (f, 'units', 'normalized');

创建uipanel
U1 = uipanel('units', 'normalized', 'position', [0 0 1 1], 'backgroundcolor', [1 1 1]);
U2 = uipanel();

创建uitable并获得相关的大小
tab = uitable('Parent', u2, 'Data', tableData, 'units', 'normalized', 'position', [0 0 1 1]);
Pos = get(u2, 'position');
Ext = get(tab, 'extent');
Set (u2, 'position', [pos(1:3) ext(4)]);

设置面板
P =面板(u1);
P.margin = [5 5 5 5];

包装两个子面板,与底部面板的高度固定(以容纳
%场上)
我可以自动计算页边距而不需要添加
%缓冲像这样?
p.pack (ext (4) + 0.02 [1]);

%添加绘图
p (1) .select ();
情节(X);

%添加u2
p (2) .select (u2);

去掉滚动条
Jtab = findjobj(tab);
set(jtab, 'VerticalScrollBarPolicy', 21);
set(jtab, 'HorizontalScrollBarPolicy', 31);

如果我设置了回调,我如何访问u2的位置和
% TAB的范围从'data'参数?
% p (2) .setCallback (@callbacktest);

Pio Nonus

谢谢。它工作得很完美。

本米奇

嗨,蒂姆-谢谢你的反馈:)

是的,的确,这是可行的,就像你可以用数字做的任何其他事情一样(至少,我希望如此)。面板应该与任何其他你想做的图形交互良好,所以请让我知道,如果有任何兼容性问题。

干杯

蒂姆

Ben -伟大的屈服!
使用;
图('units','normalized','outerposition',[0 0 1 1])
而不是通常的figure命令使创建的图形全屏。谢谢。

法尔

嗨,凯特-不确定,可能吧。我以前没有用过copyobj。如果你想出了,请给我一个样本收集:)

干杯

凯特

是否可以打开一个已保存的图形,然后将该图形中的所有内容插入到面板的子图中?类似于使用copyobj和subplot。我没有看到相关的演示,但也许我只是错过了它?谢谢你的指点!

非常强大的工具。适合图形专业人员。

本米奇

...现在可用的2.6版也增加了对SVG的导出,并包括了文档更新。

本米奇

信息:2012年7月23日的版本没有标签,但是2.5版本。

本米奇

嗨Kuo-Hsien

我想你可能是想这么做? ?在布局方面:

P = panel();
p.pack (2);
(2页)。pack('h', 2);

也就是说,在第二个pack命令中使用'h'来切换为水平打包,而不是包括这些标量维度。你使用它的方式工作得很好,但它使引用相当复杂(例如p(2,1,1,1))。尝试p.select('all'), p.identify(),看看你最终得到了什么。

接下来,为了使现在的p(2,1)在2/3处打包,你应该将最后一行更改为:

(2页)。pack('h', [2/3 -1]);

注意-1表示“拉伸到适合”。完整示例请参见demopanel4。

希望这能有所帮助
干杯,本

Kuo-Hsien

如何让p(2,1,1)占据p(2,1).pack(1,2)的2/3面积??

这是我的代码:
P = panel();
p.pack (2, 1);
P (2,1).pack(1,2);

本米奇

Brendan——关于多轴的管理,见2.5版(见demopanelG)。

请注意,这个版本(2.5)可能会有bug,在这个相当重要的变化之后-如果你有问题,请回到2.4,并在这里报告。谢谢:)

本米奇

很高兴对你有帮助,卡尔,谢谢你的评论:)

卡尔

伟大的功能。超级有用——我可能再也不用在Illustrator中修改另一个人物了。令人难以置信的良好记录,演示是无价的。

卡尔

本米奇

布伦丹-

我已经看了一下,它看起来将有可能管理两个或更多的轴每个面板,没有问题。但是,这需要一点时间来一步一步地进行,尽量不产生任何错误,所以我不得不另找时间来做。我尽量下周开始。

干杯,本

本米奇

丹-

我已经找到了。Panel将自动创建的轴的“NextPlot”属性设置为“replacechildren”,而默认为“replace”。这是为了保护轴标签的修改,由于面板(即字体,我认为)。一个副作用是高级绘图函数半对数/半对数不改变轴的比例。看起来似乎没有任何方法可以分别控制这些东西,所以我想我们只能这样了。然而,它提出了另一种解决问题的方法,而不是我上面所建议的方法。在要求面板管理它之前,您可以使用下面的方法来创建轴-效果是用适当的比例创建轴,然后将其交给面板进行位置和字体管理。两种方法的结果都是一样的,所以你觉得哪种更直观。

干杯,本

---

> >图;P =面板;
> > semilogy (x, y,“r”,“线宽”,2.5);
> > p.select (gca);

本米奇

嗨Jesper

我不知道这是否与EPS有关……

谷歌“matlab导出虚线eps”

无论如何,我怀疑这和面板有关。面板使用“打印”来导出,所以尝试直接使用打印功能,看看效果如何。如果跟面板有关就来找我。

干杯

附注:你可以尝试不同的渲染图,看看是否有帮助。不过,每个渲染器都有做得不好的地方。

Jesper

嗨,我有一个问题,当输出虚线或虚线的数字。当我使用-rh和-rp分辨率时,它们几乎显示为实线。有解决办法吗?渲染吗?
谢谢

本米奇

这个评论页真的很烦人,它吞噬问题的方式!我刚刚注意到我给埃里克的回答也被吞了。分析。

Eric -简单的回答是,当你设置p(1).de.margintop为50时,你设置了所有p(1)(左列)的子代到50mm的顶边距,总的250mm的边距要在垂直尺寸中找到。这是不太可能适合你的屏幕,因此警告和隐藏面板。也许你只是想设置p(1)的上边距,即p(1)。Margintop = 50?

干杯

本米奇

嗨,布兰登,你的问题似乎消失了。无论如何,我都会简单地回答这个问题——因为ax1是托管的,而ax2不是,所以每当窗口调整大小时,它们就会失去同步(在你的例子中,它们可能永远不会调整大小,因为你使用了'defer',但没有在最后调用refresh())。如果panel同时管理ax1和ax2就好了。当我旅行回来的时候,我会研究这个问题,应该很容易,可能会发布一个新版本(大约一周后)。与此同时,你总是可以使用set(ax2, 'position', get(ax1, 'position'))来重新同步两个轴,但这不是一个可行的导出解决方案。谢谢你把它捡起来,我认为这将是一个有用的解决方案。

干杯

本米奇

(注意最后一个例子,p(1)。Rightmargin,是demopanel6中使用的特定布局,即两列,而不是一般规则!)

本,非常感谢你的贡献。然而,关于边际,有几件事我不太明白。例如:

> > demopanel6
> > p (1) .de.margintop = 50;
警告:一个面板的大小为零,被管理对象被隐藏…
> > p (1) .de.margintop = 0;
> > p (2) .de.margintop = 50;
(没有警告)

看了你的文档。再次感谢,

嗨,丹,谢谢你的评论。我不确定为什么面板轴不响应符号学,因为它应该,我会调查它,如果它需要一个更广泛的更新。在任何情况下,semilogy()只是设置值“yscale”,所以你可以使用:

Plot (x, y,等等)
Set (gca, 'yscale', 'log')

我认为这是一回事。

干杯

Ben,很棒的代码,谢谢你的提供。我最近经常用这个词。我试着在我的一个面板上使用符号学函数,但是这个图只显示了一个正常的y轴。下面是示例代码:

semilogy (x, y,“r”,“线宽”,2.5)

有没有办法在panel.m中使用符号学?

谢谢,

谢谢本!

嗨,德里克。

参见demopanel4,或尝试以下方法:

P = panel();
P.pack ([70 30], [80 20]);
p (1,1) .select ();情节(y1);
p(1、2).select ();情节(y2);
...

这样你们就能在同一空间了,

干杯

在以前版本的面板中,我曾经做过这样的事情:

P =面板(gcf, [2 2], [70 30],[80 20]);
选择(p {1});情节(日元)
选择(p {2});情节(y2)
选择(p {3});嘘(y1,100)
选择(p {4});嘘(y2,100)

如何在最新版本的面板中做这样简单的事情?

本米奇

你好/

I)如果你已经安装了opt工具箱,现在:

在我的机器上,linprog对demopanel1大约需要80毫秒。如果你的linprog需要1秒,而且它是mathworks版本,我猜这只是使用LP来做布局的成本。我可能会在某些时候尝试优化问题的定义,但我不确定这是否可行,我想我去年就尝试过了。

Ii)如果你没有:

包含的linprog求解器没有优化,运行缓慢。如果你能找到一个更快的,免费的,求解器,我很乐意在未来的版本中试用它。

在我的机器上,demopanel1需要1.25秒。其中,0.45s是绘图代码。一旦这被剪掉,剩下的大部分是缓慢的属性引用和函数嵌套,这坦率地说很尴尬,但我恐怕我现在没有时间来优化这一点(也许在4月份:))。公平地说,demopanel1是一个复杂的布局;在我的日常使用中(比如一个网格中有一到六个面板),我没有注意到任何开销。但一如既往,你的里程可能会有所不同。

干杯

每Nordlow

这个表演对我来说仍然是近乎不能接受的。demopanel1运行。M需要1.8秒,其中1秒用于linprog代码。为什么这么久?我坐在一台漂亮的笔记本电脑上,双核4 Gb内存,DELL PRECISION M6400, MATLAB 2011b。

本米奇

注意:在2008b上,可能还有我没有测试的后续版本,resizeCallback()和closeCallback()是私有的,这使得事情无法工作。你可以通过删除“方法”部分的“Access = Private”修饰符来解决这个问题。它在后来的版本中工作得很好,我猜他们一定改变了访问规则。

伊姆兰

[经过编辑的与“Steffen”的电子邮件交流]

>>我想知道:是否可以设置导出图形的背景颜色?我试着
>>
> >设置(gcf,“颜色”,(0,0,0))
>>
在matlab窗口中背景是黑色的。但是在p.export之后,背景又变白了。
>>
我哪里做错了:?

> set(gcf, 'Color', [0 0 0], 'InvertHardcopy', 'off')
>
>干杯
>本

嗨Jesper

原谅我,我自己今天刚刚使用面板,注意到关于平滑和导入Word的奇怪行为。我突然发现我看到了你那天标记的东西。抱歉,我之前确实做了一些测试,以为我已经了解了你所看到的情况。显然不是——但我现在明白了:)。

这是固定的PNG和TIF文件类型现在导入正确,无论平滑与否。看起来JPEG根本不包括DPI设置,或者至少没有一个我可以使工作。JPEG在这里不是很有用。Panel的下一个版本将包括修复。

谢谢你的提醒。

由于本。这正是我所期待的答案。我错误地认为我只能从实例p中访问方法,但是您救了我!

致以最亲切的问候

本米奇

嗨,Mukhtar,你试过…

P = panel.recover(gcf);

?

干杯

对不起,我忘了一句台词。以下是我使用的正确代码

Cvars = who;
Foundpanel = false;
i = 1:元素个数(cvars)
试一试
foundpanel = evalin(“基地”,[' isa(“cvars{我}’,“委员会”)'));
抓住erri
结束
如果foundpanel
打破;
结束
结束

本米奇

嗨Jesper

是的,没错。通过缩放,您可以覆盖文件中设置的或Word假设的默认DPI。

一些图像格式可以包含分辨率设置(TIFF、PNG、JPEG?)但是,这些设置不会通过Matlab的print()函数传播到图像文件(至少在我的测试中不会)。在调用print()之后,Panel不会尝试修复此信息,因为,嗯,因为您是第一个标记它的人:)。我在文档中使用Latex,它忽略了图像DPI,所以我没有注意到。

嗯…我想,要修复它,要么需要二进制破解,要么需要耗时的imread()/imwrite()周期。Matlab的imwrite()似乎没有为jpeg提供对这些字段的访问。这有可能实现,对你来说会有很大的不同吗?在任何情况下,我都不会优先考虑它,因为扩展非常容易。

如果你使用的是PNG(看起来就像PNG),你可以在p.export()之后自己添加一个读/写步骤,就像这样:

函数set_png_dpi(文件名,dpi)

Im = imread(文件名);
DPM = dpi / 25.4 * 1000;
Imwrite (im, filename,…
'XResolution', dpm,…
'YResolution', dpm,…
“ResolutionUnit”、“米”);

效率很低,但会做你想做的事。如果有人有更聪明的解决方案,我很乐意考虑将其添加到Panel。

干杯

Jesper

谢谢,Ben,我在两种情况下都得到了4016x2482。但未平滑的图形可以直接放入A4的Word文档中,而平滑的图形需要缩小尺寸以适应……
干杯
jesper

本米奇

嗨,Jesper -谢谢你的反馈。

该命令在我的机器上生成的图像大小为4019 * 2486像素。没有平滑,即。'-rp',它是4019乘2487(即只有一个像素不同)。你们有什么尺寸的?

请注意,这是“170x105mm”,如果你以600 DPI(由“p”选择)打印/显示位图文件,它的大小将是170x105mm,图像中的字体、线条和符号将是你创建它们时使用的点大小。这个元信息(600 DPI)并没有编码在图像文件中,我相信它可以编码在jpeg文件中。因此,如果你在photoshop之类的东西中打开它,你可能会对它显示的大小感到惊讶,但这只是缩放级别的问题。

希望这能有所帮助

Jesper

嘿,这看起来还不错!但我在出口方面有问题。
我期待一个170x105mm的数字,包括:
p.export (' myfig ' ' rp / 2 ')
但事实证明它要大得多。如果没有平滑,它就像预期的那样。我遗漏了什么吗?

感谢本·米奇的最新消息。我希望其他人也能从中受益。

刚刚上传了一个新版本(2.2),带有你需要的标志,Mukhtar。欢呼。

亲爱的本,谢谢你的及时回复。正如您所猜测的那样,注释掉这些行确实解决了问题。是的,如果你加上那个标志会很有用。我需要为不同的文本对象使用不同的字体的原因是,具有数学公式的文本对象在罗马字体中更好,而不是默认的只适合纯文本的Arial字体。
欢呼,
穆赫塔尔

嗨,穆赫塔尔。谢谢你的意见。

是的,面板处理字体(面,大小)全局为每个面板布局。因此,每当你做任何事情导致面板布局被重新渲染(例如,改变一个面板上的边距,重绘不延迟,就像你的情况),所有管理对象的所有字体将被设置回默认布局。我没有想过有人可能想用不同的字体来表示不同的对象。现在…该怎么办呢?

一种方法是为构造函数提供另一个标志,关闭该布局的字体管理,以便用户可以自己完成(字体将恢复到由Matlab管理,并且您可以做您正在尝试做的事情)。您可以通过注释掉第3010行到3015行(假设您使用的是2.1版本)来尝试这一点。这是你想要的吗?如果是这样,我将添加这个标志并发布一个新版本。

干杯

亲爱的本·米奇,这个问题又出现了,我想我找到了原因。这取决于你是在绘图之前还是绘图之后设置面板边距。下面的方法是可行的
P = panel();包(2,2);
P.de.margin = 2;
(1页)。Marginbottom = 10;
P.margin = [10 8 2 8];
%你的绘图命令,其中%改变fontname属性

但下面的内容会给你带来问题:

P = panel();包(2,2);
%你的绘图命令,其中%改变fontname属性
P.de.margin = 2;
(1页)。Marginbottom = 10;
P.margin = [10 8 2 8];

它快把我逼疯了。如果你能修好就太好了。谢谢。

我不得不收回我的评论。罪魁祸首是另一段代码。

这个函数非常有用。然而,有一件事是作者可以修正的:它不尊重个人的字体规范。虽然可以指定全局的FontName属性,但它不尊重特定文本对象的规范。例如,下面的语句不会给出预期的结果:
xlabel('X(t)', 'FontName', 'Times-Roman');

你好/。是的,不幸的是,如果没有安装opt工具箱,它会很慢。在某些时候,我可能会找到时间为布局整合一个快速求解器;在那之前,这将是一个复杂的布局没有工具箱的问题。如果你使用面板来生成最终的图形,你可以使用“defer”参数(参见“doc panel/panel”),并且布局只会在调用export时计算。不理想,我知道。

关于边距,你看过文档里的例子了吗?特别是,参见“demopanel5”。或者,尝试“p.de.margin = 0”作为起点,然后增加单个面板或父面板的页边距,直到得到所需的布局。

希望这能有所帮助。

想法是好的。然而,由于某些原因,对于包含大约20个轴的网格,性能变得不可用。我得花十秒钟重画。我没有安装“选择工具箱”。我使用Linux和HW OpenGL在nvidia装备的戴尔精密M6400。我还发现很难以最佳方式填充坐标轴网格,以便标题和标签在不相互覆盖的情况下显示。如果这些东西是固定的,我会把它评为五星产品。

georg

我的一篇文章丢失了,这就是为什么最后一条消息没有意义…不管怎样,现在一切都正常了

georg

对不起,我错了。我只是想知道你是如何在数字关闭后恢复的,所以我偶然发现了持久变量和mlock调用。但是mlock并不在调度器中,所以这与它无关……

你好,葛格,我查过了。长和短的是,如果你叫“clf”,而一个面板是管理数字,你从面板下拉出地毯,没有办法我可以看到检测这一点。我已经更新了代码,使所产生的“无效句柄”错误被隐藏,呈现这种情况无害,但似乎仍然调用“clf”以这种方式不是“正确”的事情要做。这些选择中有适合你的吗?

1)如果你想从头开始构建一组新的面板,只需这样做(调用“p=panel”来创建根)。任何现有的面板将被自动删除(尽管参见“demopanelE”)。

2)如果你想清除图形并在不使用面板的情况下再次绘图,使用“delete(p)”,其中“p”是你的根面板。图中现在没有任何面板和面板轴。如果你留下了一些其他的东西在那里,你可以调用“clf”之后清理它。

如果这些选择合理请告诉我。我可以看到,CLF上的预期行为将是删除所有相关的面板,以及所有图形句柄对象。不过,我想知道是否有办法做到这一点。如果有人知道如何检测对clf的调用,请务必传递给我。

问候

嗨,georg。你说得对,上面有东西。它应该在CLF调用后脱离自身;我一定是瞎弄,把东西弄得乱七八糟。我一有机会就去查。欢呼。

georg

太棒了!喜欢它,尤其是打印功能。不过,我认为删除功能有问题。我不断得到错误的情况下,我使用clf和重置之后的数字位置。(我试图重复使用同一个数字多次,但其中有不同数量的子图。)建议:要么提供panel.clf()函数,要么从父句柄中注销回调函数(以及任何属于panel的东西)

你好沃里克-我认为这一定是你当地的“linprog”的问题,因为一个提供的面板不命名相同。尝试“which linprog”或“edit linprog”查看它解析为什么,并根据需要删除或移动它。然后面板应该开始工作。

georg

沃里克

试图运行demopanel1,等等。

不断出错。
“错误:文件:linprog。m行:27列:4
一个BREAK语句出现在循环之外。用RETURN代替。”

伊恩-抱歉,我还没时间看这个。与此同时,你可以调用这个函数来禁用布局过程:

集(p。数字,'ResizeFcn', [])

严格来说是黑客,但我不知道为什么会有副作用。欢呼。

嗨,斯图尔特-提取它的任何地方,并只是添加文件“面板。m”到你的Matlab路径(使用“addpath”或“pathtool”)。干杯

新手问题!我下载了面板,我要把它提取到哪里?谢谢. .

伊恩

我删除了所有空间和刻度,因此15x15实际上在一个体面的显示器上工作得很好!不过,15x15可能是一个上限(更多是因为从大型矩阵记录数据需要很长时间):-P

是的,我确实调整了很多大小——我使用Matlab作为来自神经元记录的数据的在线显示,并根据其他程序和当前数据网格的大小调整大小。同样,如果它仍然很慢,我只知道*不*调整大小,但能够打开/关闭物理大小将是伟大的!

本米奇

15连接!哇,你太疯狂了,不可能是真的,这么大的数字电脑根本无法处理!说真的,这真的适合屏幕吗?

哦……是啊,也许还能从中挤出点什么。但调整大小的事情-因为面板执行布局到一个物理大小,它需要重做布局时,物理大小的窗口改变。Subplot使用相对单位,因此在调整大小时不需要重新布局。对于面板来说,提供一个标志在调整大小时关闭物理大小,或者关闭图形窗口的物理大小(让它只在导出时操作)是很容易的。这对你有用吗?你经常调整Windows的大小吗?:)

我可能不得不做一个临时发布与这些mods -这需要一段时间来得到这个linprog许可证整理。

伊恩

原始面板大约4.8秒,次要情节大约1.5-2秒。注意subplot似乎也做了很多属性枚举…

我通常不会担心,但我使用面板来显示数据,因为它是实时进入的,长时间的绘图时间导致matlab冻结,以至于我失去了数据同步(我用15x15矩阵看到了这个)…

调整图形的性能现在也改善了吗?

本米奇

现在只慢了25-30%使用subplot的9x9布局大约2.45秒,使用面板的9x9布局大约3.15秒。这些数字能和你看到的相比吗,伊恩?

本米奇

Ian -不知道发生了什么,我想我重写了我自己的第一个评论。在任何情况下,上面的注释都告诉了最终结果,即使它读起来有点好笑:)。欢呼。

本米奇

你提出来后,我很快看了一下。正如您所建议的,我使用demopanel2(N=9)作为测试用例。一些代码整理使速度从比subplot长3倍降低到1.6倍。你突出显示的那一行是一个开销,但预分配似乎没有帮助。

无论如何,只比subplot长60%,我不太担心,但我可能会再看一次,就像我说的,今年晚些时候。剖析者建议我们可以通过更有效的属性解析获得另外10-15%的加速,这将使我们非常接近subplot。当用户没有指定不同的字体时,也可以避免大多数控制字体的调用。所有这些,可能会得到的时间与次要情节的时间没有什么不同。

干杯

伊恩

嗨,本,当我增加要管理的轴的数量时,面板开始变得非常缓慢。为了重现,将demopanel2更改为使用9 x 9轴,面板开始比subplot花费更长的时间。分析,最大的时间是调用这一行(839次):

p.state.lin(暗)。A = [p.s state.lin(dim).A;一个);

想知道预分配是否没有帮助?我认为调整图形的大小也会触发这个(称为2264次)。

我喜欢它。我想在这里提出一些建设性的批评,但我还没有足够的时间来这样做。到目前为止一切顺利。保持下去。

谢谢-我的matlab没有文档-dpdf选项,否则我找不到它。

好了,已经做过了,好像还行。这将出现在下一个版本中(正在等待包含linprog…的许可)。

我通常的打印命令是这样的:

figname = '测试';
wh = [2 3];要打印的页面的宽度和高度的%
集(gcf, PaperSize, wh PaperPosition, [0 0 wh],“颜色”,“w”);
打印(-dpdf, figname)

我经常在字体大小上遇到问题,因为轴标签会被部分切断。我希望该面板将在一定程度上缓解这个问题(除了它拥有的所有其他不错的功能之外)。

不管怎样,这就是你要找的吗?

本米奇

你好,约书亚-我很高兴包括pdf支持。万博1manbetx也许你可以告诉我如何用命令行导出一个数字到pdf ?我在文档中查看了“打印”功能,但没有看到任何提及。

约书亚

看起来很棒!然而,在我采用它之前,我需要导出为pdf。为此我修改了一些代码,但它并不完美(纸张大小也需要更新)。不管怎样,我可以为我自己做。如果代码托管在像github这样的地方,你会非常容易看到我的更改。但我想你可以做得更好,更快。任何想法吗?

——jovo

Ps -我想要PDF而不是Ps /eps的原因是,在mac上,PDF查看器很好,而且是内置的,所以我总是将矢量图形存储为PDF。

丹尼尔

非常感谢你的大量工作:)

本米奇

谢谢你,丹尼尔,这个确实有用。我正在与作者联系授权事宜,希望尽快发布一个不需要opt工具箱的重新包。谢谢你的提醒。

丹尼尔

在FEX中有一个名为linprog的函数(参见//www.tianjin-qmedu.com/matlabcentral/fileexchange/97-linprog).但是输入与optimtool linprog不同。也许你会找到解决办法的。

本米奇

嗨,丹尼尔。我从来没想过。呃……世界上每个人都有优化工具箱吗?

LP的问题很简单。想知道编程一个LP求解器有多难,可能不会太难。或者可能有一些源代码在互联网上到处乱跑……任何建议都很感激…

与此同时,Daniel是对的,您需要优化工具箱。对不起。

丹尼尔

似乎需要优化工具箱(linprog())。我们有解决办法吗?

伊恩

panel的V2.0更新非常棒,有很好的文档代码(包括很多演示),重构成一个单独的类定义,并且现在它可以在uipanels中工作,现在可以用作subplot。面板非常灵活,可以用非常直观的类方法优雅地控制超级标签、字体和空白管理。

谢谢Ben,这是一个非常好的贡献!

伊恩

本,谢谢你把这个添加到你的待办事项!我也非常期待这个句柄类版本——希望它是一个简单的classdef m文件,方便懒人安装:)

欢呼,伊恩

本米奇

嗨,伊恩

我现在正在准备一个新版本的面板(基于句柄类)。我会在发布之前把它放在TODO清单上。听起来很简单,不是吗?我想知道是否有人想要使用其他东西作为面板的父母…

顺便说一句,您可能可以使用现有版本做任何您想做的事情。在整个图形上设置panel,然后用一个具有绝对定位的子元素来打包它,该子元素的位置等于uipanel的位置。虽然没那么圆滑,但我觉得应该能行。如……

U = uipanel;
Set (u, 'position', pp)
P =面板;
Q = p.pack(pp);
R = q.pack(…等等)。

干杯

伊恩

如果我们不仅能把它连接到图形上,还能把它连接到图形中的面板上,那就太棒了。我有一个现有的UI使用subplot设置父作为一个uipanel。这允许我在一个面板中设置一组UI按钮等,而在另一个面板中设置我的图形。我喜欢使用面板,但试图强迫它使用一个uipanel作为父失败…

本米奇

嗨,Niko -我按照你的建议做了,是个好主意。请尝试更新,当它通过,并让我知道如果你有任何问题。

本米奇

嗨,Niko -谢谢。我想,您的意思是,xlabel/ylabel的定位就好像四个(比如说)子面板都是一个轴。这是个好主意。我猜另一种可能是,您可能想通过一个命令来设置所有子面板的所有xlabels/ylabels。这两种情况都是可能的,但第一种听起来特别有用。我会调查的。

谢谢你的反馈。

妮可

非常有用的工具。

如果能够轻松地添加跨越多个子节点的面板范围的xlabel/ylabel,那就太好了。

雷纳·

Ben,谢谢你的及时回复,但是我应该阅读你的手册!以下是我所需要的:

集(p.figure,“可见”,“关闭”)

这将关闭屏幕更新。谢谢你这么好的包裹。

看不见的?我不明白你的意思,你能再解释一下吗?

问候

雷纳·

谢谢你这么好的包裹。

我将如何使导出面板的过程“不可见”。

问候

本米奇

仅供参考-最新版本包含了上述两个建议。你现在可以使用p = panel(gcf,[2 2])来返回一个2x2(或任何)的面板网格(进一步的参数控制大小-见上面的截图)。处理xlabel, xtick和xticklabel现在与相应的matlab函数是无缝的(我认为,无论如何:)。谢谢你的反馈。

你好-谢谢你的评论。

是的,您可以更改xtick标签。使用p.xticklabel ={1 2…}其中p是一个面板。我认为应该与set(gca, 'xticklabel',{12…})一样工作。不幸的是,这并没有被写入文件,抱歉。下一个版本将对此进行记录。

p = panel(2,2)应该没问题吧,只要你想要一个常规的网格布局我想我们经常这么做。我看看能不能加上去。用于调整尺寸的额外par…嗯,我会调查的。

使用HANDLE类实现:是的,这是在黑暗的日子里写的,当时这样的事情是不可能的。我确实想在某个时候重新实现,会更圆滑。如果我有时间的话

关于默认的想法,是的,我明白你的意思。我会把它写在待办事项清单上。

干杯

有办法改变xtick标签的值吗?我试着用set(axis,'XTickLabel',[新值])来做,它曾经在我使用subplot时工作,但似乎不与面板一起工作。

谢谢,
Heeten

LP

这似乎有很好的潜力,但有一些建议;

*应该有一个类似的界面subplot
例如p =面板(2,2);
这将返回(2,2)面板对象数组
也许还有一些额外的参数用于每个子面板的相对大小a-la用于" pack "的输入

使用HANDLE类继承实现

*允许单独设置页边距,以保持默认值
例如axismargin (10 [] [] .10);

好运!

更新

2.14

增加了find()方法,删除了一个不必要的约束,修复了无法在xlabel/ylabel组轴覆盖的轴上鼠标的问题。

2.13

修正了Jiri报告的错误。

1.26

2.12版:修复了导出语法中的小错误,并添加了返回访问对象到x/y/zlabel和title函数。

1.25.0.0

Release 2.11:修复了Matlab R2014b图形改进的一两个问题。还有一些性能优化。

1.24.0.0

增加了FAQ链接。

1.23.0.0

2.10版:从布局中移除优化(LP)问题,以支持分析解决方案(更快,不需要opt工具箱)。万博1manbetx支持固定物理尺寸的面板。万博1manbetx支持以前不支持的各种包装模式。

1.22.0.0

2.9版本。导出从文件扩展名推断图像格式;单位可以在构造函数中设置;添加组描述符“family”;添加panel.version ();增加LNCS页面大小。

1.20.0.0

2.8版本。撤销panel.plot(),转而使用panel.fixdash(),后者具有相同的目标,但不那么粗糙。

1.18.0.0

2.7版。更改:添加演示的insets (tx安希考克斯);增加panel.plot()来解决虚线渲染不好的问题。

1.17.0.0

2.6版本。增加对SV万博1manbetxG导出的支持(通过plot2svg),以及改进的文档。

1.15.0.0

每个面板增加万博1manbetx了对多个对象的支持(例如,由Brendan建议的2个轴,见demopanelG)。修复了几个bug。

注意:重大变化,请考虑这个测试版:如果有问题,请恢复到2.4。但也没发现有什么问题。

1.14.0.0

2.4版本。修复了一个错误,即图形中的单个面板在图形调整大小之前无法定位。

1.13.0.0

2.3版,修复了几个bug。

1.12.0.0

2.2版。对文档的一些改进,增加了“no-manage-font”标志来禁用面板的字体管理。否则,不变,直接交换。

1.11.0.0

2.1版(2011年7月20日)包括一个内置的线性规划求解器(由于Jeff Stuart,在FEX上可用)。这允许没有优化工具箱的用户使用面板。一些性能改进,并添加了一个导出为PDF的选项。

1.10.0.0

更新信息:R2008a,基于http://tinyurl.com/3tlzjo4

1.8.0.0

发布2.0版。这个版本转移到一个实现文件,并转移到一个更简单的系统来控制布局。

1.7.0.0

根据Niko的建议,添加了递归和组标签和标题。

1.6.0.0

渲染速度提高了20%,修正了几年前的数字单位错误,实现了对“孤立”面板引用的正确处理。

1.5.0.0

集成了原生轴属性的实现,这样像xlabel()和title()和set(gca, 'xticklabel',…)这样的函数现在可以与面板无缝地工作。文档也很整洁。

1.4.0.0

希望这次真的修复了所有标记标签的bug。添加独立创建的轴(如颜色条)的管理,由Arthur Ward的想法。向pack()添加网格样的打包,就像之前添加到构造函数panel()一样。

1.2.0.0

修正了上次更新中引入的一个小错误。

1.1.0.0

增加缺少的文件;修正了错误应用tick标签在导出bug;为一次性构建面板网格添加了简单的构造函数语法。

MATLAB版本兼容性
使用R2010a创建
与任何版本兼容
平台的兼容性
窗户 macOS Linux