图片缩略图

紧密子地块(Nh、Nw、gap、边缘h、边缘w)

version 1.1.0.0 (2.03 KB) by 佩Kumpulainen
用坐标轴子图填充图形,坐标轴之间的边距和间距易于调节。
4.6
123评级

284次下载

更新2016年3月3日

视图版本历史

查看许可证

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

Subplot倾向于在坐标轴周围留下很多空白。Tight_subplot允许调整轴之间的间距以及轴周围的边距。
例如:
[ha, pos] = tight_subplot(3,2,[。01 . 03]、[。1 . 01],[。01 . 01])
对于ii=1:6;轴(ha(ii));绘图(randn(10,ii));结束
一组(ha(1:4),‘XTickLabel’,‘);设置(ha、'YTickLabel'、'')

引用作为

佩Kumpulainen(2021)。紧密子地块(Nh、Nw、gap、边缘h、边缘w)(//www.tianjin-qmedu.com/matlabcentral/fileexchange/27991-tight_subplot-nh-nw-gap-marg_h-marg_w), MATLAB中央文件交换。检索.

评论和评级(136)

尤里antonacci

维多利亚荷兰

嗨,我在尝试重新排序matlab用于我的一个子图的面积图的颜色,我得到了一个错误的集合函数,这是我之前没有得到的,我试图用这个函数收紧我的子图。我需要在这一行添加什么才能使它工作?

>集合(gca、'ColorOrder',FlippedColor,'NextPlot','ReplaceChildren')

谢谢

非常有用!帮助我为我的论文格式化了一些情节,这些情节在默认子情节中呈现得非常小。

奥马尔·莫拉德

阿瑟·查维翁

大卫波定

太好了,非常有用!

王志文

Dominika Thiede

我有一个2x1子地块,我希望第二个子地块的高度是第一个子地块高度的1/3。子地块之间的距离不应改变。可能吗?

埃德蒙·皮克林

亲爱的开发,

干得好这是一个很好的函数,可以绘制多个图形以进行更好的比较。

非常感谢您的分享!

阿列克斯帕里

王勇

约拿珍珠

这真是太棒了!MATLAB给出警告“循环中调用的轴(h)可能很慢”。有没有办法避免调用轴?

劳伦特·贾拉伯特

嗯…有21个次要情节,似乎有些麻烦。请尝试以下代码:

公顷= tight_subplot(3 7。01 . 03]、[。1 . 01],[。01 . 01])
对于ii=1:21;轴线(ha(ii));地块(randn(10,ii));终止
一组(ha(1:4),‘XTickLabel’,‘);设置(ha、'YTickLabel'、'')

马特·马基奇

SkliUoD

马丁米勒

蔡彼得

约翰

亲爱的Pekka,假设一个经典的3行2列的子图,你如何设置:
子批次(3,2,[1:2])????

不可能将一个图形跨越到垂直或水平的两个连续面板上?

非常感谢你的评论,当然也感谢你的贡献。

考希克山路

瓦迪姆·法里纳

少林

王兴勇

伊桑Kyzivat

杰罗姆·巴朗格

正是我需要的,谢谢。

满意的

真管用!感谢分享

新航谢

丹尼尔·布鲁隆

Nicolaj汉森

sezen onol

王英轩

丹尼·艾伦

迪米特里·丘丁佐

马克·菲瓦兹

安托尼斯

Siyao胡

奥利弗·保罗

安德里亚·詹尼

易于使用!问题:当面板靠近时,我的一些子图将不显示(例如,间隙=0)。我可以通过增加边缘的间隙或边距来解决这个问题。这是一个可以解决的bug吗?或者有没有其他人经历过这种情况,并且知道一个简单而快速的解决方案?

赵Honglong

非常感谢分享这个功能!

安德斯·博格

城市温斯迟

请注意,有时TickLabels会被删除使用这个函数,如果你想使用export_fig可靠地打印它们,你必须调用:
集(gca, XTickLabel, cellstr (num2str ((gca, XTick))))
set(gca,'yticklab',cellstr(num2str(get(gca,'YTick')))
这似乎是唯一一个不会导致错误标签问题的解决方法。小心!

王Mengling

伟大的功能!谢谢!

齐汉

伟大的工作。

黄少新

赛义德m

穆罕默德Emin Mumcuoglu

菲利普·科尔默斯

Pakorn Wongwaitayakornkul

加布里埃拉·尼特莱

莎拉·莫利纳里

马赫迪·托拉比

谢谢你的有用脚本。有没有办法为所有的X和Y轴添加一个公共替换?使用其他应用程序可以腾出额外的空间。

Shahrin伊斯兰教

你好我是一个新的学习者。我需要精简我的子地块。请帮我把代码附在下面。我不明白如何在代码中使用上述函数。请帮帮我。

%显示原始图像
形象= imread(“boardday.jpg”);
%读取彩色图像并将其转换为灰度图像
myimage = rgb2gray(图片);
图;
次要情节(2,1,1);
imshow(图像);标题({'Original';'image'});
次要情节(2,1,2);
imshow(模板);标题({“灰度”;“图像”});

克里斯的人

艾丹•barazani

维克多·雨果·苏扎

非常有用的功能!祝贺

蓬纳格·查特吉

鲍勃·达

Mengyao愣

用非常简洁的计算是非常有用的。

彼得Gormsen

伟大的工具!非常感谢

希瑟·米勒

田局域网

Yochai benkler布劳

功能很好。谢谢

亚当·丹兹

此方法直观且易于使用。我只希望创建轴后XTickLabel和YTickLabel不是空的。若要重新启用它们,应在每个轴上调用:

集(h,“XTickLabelMode”,“汽车”)
集(h,“YTickLabelMode”,“汽车”)

Changyong他

乔治维奥拉

艾曼纽老板

约翰·马丁内斯

谢谢你的贡献!;)

罗克珊娜Stefanescu

这是一个很棒的功能!!非常感谢你的帖子!!:-)

塞巴斯蒂安·库克拉

@Megan福勒
您可以使用set和get的组合。这对我很管用。
originalSize = get(gca, '位置');
cb=色条;
设置(gca,‘位置’,原始尺寸);

谢谢

梅根·福勒

这是非常有用的!我不清楚的一个问题是,如何在不破坏与图中所有其他面板对齐的情况下将颜色条添加到一个子图中-是否有解决方案?

乔纳斯斯坦

谢谢你!注:三个if后面的“;”是不必要的。

如果元素个数(gap) = = 1;
...

bravomuse

真的很有用,谢谢!

Grzegorz Knor

梁先生

非常感谢作者提供的函数命令,非常有用!(非常感谢您的这段代码,它对我很有帮助!)

乔纳森弯曲

这真的使我的论文工作很好地结合在一起。我已经用过几百次了,非常欣赏它!现在有一个问题,我正在使用这个函数来生成一些不同的图:是否可以指定两个子图的底部所占的图形面积小于顶部?也就是说,上面的图形有500像素高,下面的图形有200像素高?欢呼。

摩卡

ABehrooz

grega

肖恩Mikula

何塞mejia

安德鲁·戴蒙德

很好,但是我不得不添加一个shift参数来阻止我左边的记号标签被截断(如下所示,“bias”参数是一个新的2元素向量输入arg,只是添加到如下位置

'Position',[px+bias(2) py+bias(1) axw axh],…

我想它将是很好的完全自动居中(不是我知道如何off the top of my head),但我真的很高兴你写了这个。谢谢。

佩Kumpulainen

这个函数不遵循subplot的默认语法,因为它不是subplot而是另一个函数。第三个输入参数是轴之间的间隙。不是子图中要设置为“CurrentAxes”的轴的序号。有关输入参数的描述,请参阅帮助。
在Fex中似乎有一个古老的版本,我更新了一个mre最近的版本,这使得它更容易使用颜色条和其他功能,修改现有轴的位置。

SL

关于这里的子情节的问题的讨论http://stackoverflow.com/q/35770961/54964其中颜色条的例子和子图的第三个参数被讨论。

SL

不遵循subplot的默认语法,省略了第三个参数。失败与彩色的。

SL

桑儿

完美!谢谢你!

犹尼亚安约瑟芬D

K E

pingfanyu

未定义的函数或变量'tightfig'。
为什么我遇到这个问题,我该怎么做?

纳坦

这是我遇到过的最有用的FEX贡献之一。谢谢您的努力!

阿什利·张

优秀的功能!
但我有一个问题。当我绘制奇数个子图时,比如说7个以4*2排列的图,总是有一个空白图,即使我删除了ha中的最后一个值,我也无法删除它。
有谁有办法修好它吗?

*通过将最后一个绘图的轴、X颜色和Y颜色设置为不可见,解决了此问题。

副地块(ha(8));集合(gca、'Color'、'none'、'XColor'、'none'、'YColor'、'none');

Naveen Gowdayyanadoddi

功能卓越。对我来说很好。

泰罗

喂料辊

非常好的功能,谢谢。我缺少的一点是:是否有一种方法可以连接不同的子地块,如子地块(4,2,[1,3,5])?

哈迪

佩特

tnx,伟大的工作

恩里科方达

丽娜

Panagiotis Papagiannopoulos

这个文件真的帮了我大忙!然而,我有一个问题。我想在每个子图中设置x,y轴的固定极限。例如:(轴([0 700 -500 10000]))。我试着去做,但没有结果。你有什么建议吗?

艾哈迈德·法西

贝丝

费利佩•g . Nievinski

这是伟大的,它提供了可变的外部边缘除了内部的差距。我希望它能够支持非对称绘图,其中一个面板跨越多个行/列。万博1manbetx

卢卡斯·库尔内夫

菲利普·瓦伦西亚

很好,非常方便,尽管在默认情况下我更喜欢我的勾号标签留下…其他人谁想要这可能只是修改文件..只需在内部循环中删除它设置的滴答声…即。

对于ix=1:Nw
ii=ii+1;
ha(ii)=轴('单位','标准化'。。。
'Position',[px py axw axh]);
px = px + axw +差距(2);
终止

托马斯。

加尔哈斯佩尔

有用,并做它声称的

乔凡尼

这是一个很棒的脚本。我正经历一种让我的虱子消失的虫子。这是一个示例:

图(‘位置’,[100 1000 600])
ha=紧_子批次(1,3,[.02,02]、.12,08]、.1,02]);
对于一个=哈'
保持(a,“全部”)
箱(a,“上”)
xlim(a,[1 10])
ylim(a,[-90-10])
终止
设置(ha、'xscale'、'log'、'fontsize'、fontsize、'ytick'、-100:10:20、'yticklabel'、[]、'yminortick'、'on')
集(ha (1) yticklabel, 100:10:20)
% 1
散射(ha (1) x11 10 * log10(去年),30日[0 5 0],' x ');
散射(ha(1),x12,10*log10(y12),30,[01],'filled');
% 2
散射(ha(2),x21,10*log10(y21),30,[0.50],'x');
散射(ha(2)将10 * log10 (y22)、30日(0 0 1),“填满”);
% 3
散射(ha(3),x31,10*log10(y31),30,[0.50],'x');
散射(ha (3) x32 10 * log10 (y32)、30日(0 0 1),“填满”);

我希望在1、1和10处看到xticks,但在我的系统中,它们会消失。如果我尝试手动添加它们对数尺度就会出错,所以肯定有其他方法。我用的是Matlab R2012a。
谢谢

马林

非常棒的文件,谢谢。为了让Matlab新用户更好地学习使用这个文件,在注释中添加一个额外的示例可能不是一个坏主意。

我有两个问题,如果我可以问的话……

1.如何在y轴上添加数字?(当然只在最右边)

2.如何写x和y标签?(只有一个适用于所有轴)

先谢谢你。

alexpapi

凯文Claytor

非常好,需要像这样的东西,而且很容易使用。

江民张

除了给五星,我什么都做不了!绝对比mathworks聪明!

再见

伟大的功能。遗憾的是,我花了很多时间写了一个类似的函数之后才发现它。正如一些人在上面所说的,我希望这个函数能够处理多行/多列的子图。所以我在下面的函数中包含了这个功能:

//www.tianjin-qmedu.com/matlabcentral/fileexchange/35464-spaceplots

只是觉得这可能对一些人有用。

卡尔

我同意Dan的说法。跨越多个列/行将非常有用。例如:
ha=紧_子批次(2,2,0.1,0.1,0.1)
轴(ha(1));图(x1,y1);
轴(ha(2));情节(x2, y2);
轴(ha([3 - 4]))情节(x3, y3);

拉克什Chalasani

拉维

非常感谢你的剧本。

马修·施罗德

很好的工作。如果能够让子窗口填充uipanel而不是整个图形(在GUI中不起作用),那就太好了。

马修·施罗德

卡洛斯·贝兹

很好的功能,也是我一直依赖的功能。如果轴可以跨多个列/行,就像使用内置子地块一样,那就太好了。否则,很好。

布伦特·博勒

Oops——我不知道对提交进行评级意味着提交。出色的功能让我在通过GIS生成图形时节省了大量时间。不知道为什么subplot命令会出现此问题,但感谢您解决此问题!

布伦特·博勒

戈斯

埃纳尔·奥拉森

非常好的小剧本!非常感谢!

不过,我有一个建议:在这个例子中,与其说“axes(ha(ii));”,不如说“subplot(ha(ii));”。当并排设置两个绘图时,使用轴会使我产生不可预测的行为。我会(几乎总是)绘制右边的坐标轴,不管我多么频繁地尝试发出“坐标轴(ha(1))”命令(或“坐标轴(ha(2))”)。使用子图解决了这个问题。不知道为什么。。。

托马斯。

良好的工作。我需要在一个循环中创建若干带有若干副情节的情节。有麻烦与空的地块作为结果和Matlab是坏了,直到我重新启动它。即使是一个plot(1:100, rand(1,100))也会返回一个空的数字。无论如何,我返回了轴位置矩阵的值“ha”,并删除了内部的轴命令。当我准备在我已经创建的一个图形中绘制一个特定的副plot位置时,我称之为:

图(h4);
子批次('位置',ha4(fc4).pos);p=绘图(1:100,兰德(1100));

上,ha4 (fc4)。Pos对应于图中带有手柄“h4”的fc4子图位置。

亚力山大

谢谢你的贡献。我非常喜欢它。
我认为输入检查应该是这样的:
如果nargin<3 | |为空(间隙);差距=.02;终止
如果nargin<4 | |是空的(marg|h);marg_h=.05;终止
如果纳金<5 | |是空的(marg|w);marg_w=.05;终止

因此,您可以修改marg_w并接受其他参数的默认值。
tight_subplot (nrows ncolumns,[][],[。1 . 05]);

亚历克斯

我不知道mathworks的子情节程序是怎么想的……这样好多了

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

社区寻宝

在MATLAB Central中查找宝藏,了解社区如何帮助您!

开始打猎吧!