多个X轴在不同的规模,但一个y轴
148(30天)
显示旧的评论
接受的答案
亚当Danz
2020年7月28日
编辑:亚当Danz
2022年4月14日
Matlab以外的不支持多重x轴万博1manbetx的轴上、下边界的阴谋。
包括多轴单元的一个方法是创建多行轴蜱虫。上轴将你的主要轴用于策划你的数据。然后定义轴限制所有额外的pseudo-axes和计算每个pseudo-axis蜱虫值所以他们结合x-ticks主轴。使用这些值来创建多行x-tick标签。
按照下面的演示和调整,以适应您的需要。
演示
%建立主轴(上)
clf ()
ax =轴();
斧子。XTick = 0:200:2800;
ax.XLim= [0,2800];
%为所有其他轴轴设定限制
additionalAxisLimits = […
0,1400;%轴2
19.2、23.4;%轴3
0.2,3);%轴4
%计算蜱虫值为每个轴与主轴对齐
additionalAxisTicks = arrayfun (@ (i) {linspace (additionalAxisLimits(我,1),…
additionalAxisLimits(我,2),元素个数(ax.XTick))}, 1:尺寸(additionalAxisLimits,1));
%设置多行蜱虫
allTicks = [ax.XTick;cell2mat (additionalAxisTicks '));
tickLabels =组成(' % 4 d \ \换行符% 4 d \ \换行符% .1f \ \换行符% .1f 'allTicks (:)。');
% % 4 d添加空间左边的标签为中心。
%你需要添加“%。1f\\newline" for each row of labels (change formatting as needed).
%或者,您可以使用下面的柔性生产线,适用于任何数量
%的行但对所有行使用相同的格式。
% tickLabels =组成(repmat (% .2f \ \换行,1,大小(allTicks, 1)), allTicks (:)。');
%减少轴高度和宽度,为标签
ax.Position (3:4) = ax.Position(3:4) *炮;%减少到75%
ax.Position (2) = ax.Position (2) + 2;%上升
%加上x标记标签
集(ax,“XTickLabel”tickLabels,“TickDir”,“出”,“XTickLabelRotation”,0)
%定义标签的每一行
ax2 =轴(“位置”,总和(ax.Position ([1,3])) * 1.08, ax.Position(2), .02点,0.001]);
linkprop ((ax, ax2) {“TickDir”,“字形大小”});
axisLabels = {“距离(t)”,“区域(m ^ 2)”,“问从0 (m)”,“KB (m)”};%每个轴
集(ax2,“XTick”,0.5,“XLim”[0,1],“XTickLabelRotation”0,“XTickLabel”strjoin (axisLabels“\ \换行符”))
ax2.TickLength (1) = 0.2;%根据需要调整使两个轴之间的蜱虫
类似的例子在论坛
34个评论
α的男孩
2020年7月28日
%建立主轴(上)
ax =轴();
斧子。XTick = 4000:5000:30000;% Disp
ax.XLim= [4000,30000];
%为所有其他轴轴设定限制
additionalAxisLimits = […
3500年,4500年;%轴2水渍险
0,6;%轴3 KB
20、30;%轴4 LCB
30、50;% 5轴TPC
200年,500年;%轴6 MCTC
0,50;%轴7 BMt
100年,1500年;%轴8 BMl
20,250;%轴9点
0,1;%轴10 CB
0,1;%轴11厘米
0,1;%轴12 CP
0,1;%轴13 CWP
0,1];%轴14本量利
输出::(帮助我请:(:(
α的男孩
2020年7月28日
%建立主轴(上)
ax =轴();
斧子。XTick = 4000:5000:30000;% Disp
ax.XLim= [4000,30000];
%为所有其他轴轴设定限制
additionalAxisLimits = […
3500年,4500年;%轴2水渍险
0,6;%轴3 KB
20、30;%轴4 LCB
30、50;% 5轴TPC
200年,500年;%轴6 MCTC
0,50;%轴7 BMt
100年,1500年;%轴8 BMl
20,250;%轴9点
0,1;%轴10 CB
0,1;%轴11厘米
0,1;%轴12 CP
0,1;%轴13 CWP
0,1];%轴14本量利
%计算蜱虫值为每个轴与主轴对齐
additionalAxisTicks = arrayfun (@ (i) {linspace (additionalAxisLimits(我,1),…
additionalAxisLimits(我,2),元素个数(ax.XTick))}, 1:尺寸(additionalAxisLimits,1));
%设置多行蜱虫
allTicks = [ax.XTick;cell2mat (additionalAxisTicks '));
tickLabels =组成(' % 14 d \ \换行符% 14 d \ \换行符% .1f \ \换行符% .1f 'allTicks (:)。');
% % 4 d添加空间左边的标签为中心。
%减少轴高度和宽度,为标签
ax.Position (3:4) = ax.Position(3:4) *炮;%减少到75%
ax.Position (2) = ax.Position (2) + 2;%上升
%加上x标记标签
集(ax,“XTickLabel”tickLabels,“TickDir”,“出”)
%定义标签的每一行
ax2 =轴(“位置”,(和(ax.Position ([1,3])) * 1.1, ax.Position(2),只有,0]);
linkprop ((ax, ax2) {“TickDir”,“TickLength”,“字形大小”})
axisLabels = {“距离(t)”,“区域(m ^ 2)”,“问从0 (m)”,“KB (m)”};%每个轴
集(ax2,“XTick”,0.5,“XLim”[0,1],“XTickLabel”strjoin (axisLabels“\ \换行符”))
在这儿。
亚当Danz
2020年7月28日
我看到你的错误。你没有扩大
组成()
函数之外的4行我演示。是很重要的,你经历的每一行代码来了解它你可以学到一些东西,所以你可以拥有你的工作,你叫它。
我已经更新我的回答如何灵活地创建
组成()
在蜱虫行不管有多少行标签。有几个小的变化我的答案,你应该找这里的三个主要变化你需要让你的代码。
1)取代旧的
组成()
与这一个。
tickLabels =组成(repmat (“% .2f \ \换行符”1、大小(allTicks,1)), allTicks (:)。');
请注意,所有的标签将有2 dp。
2)既然你有这么多的行标签,您将需要进一步缩小你的轴的高度。
%减少轴高度和宽度,为标签
ax.Position (3) = ax.Position(3) *炮;%宽度减少到75%
ax.Position (4) = ax.Position (4) * .40;%高度下降到40%
ax.Position (2) = ax.Position(2) +相关性较高;%上升
3)填写其余的轴标签(见
axisLabels
变量)。
亚当Danz
2020年7月28日
网格命令地方垂直和horiztonal网格线的轴。
图数据,使用绘图命令。值应该在同一单位作为主要的轴上(从4000年到30000年)。
策划如果你有麻烦,你可能想要通过Matlab斜坡弯道学习基础知识。
α的男孩
2020年7月28日
%建立主轴(上)
ax =轴();
斧子。XTick = 4000:5000:30000;% Disp
ax.XLim= [4000,30000];
%为所有其他轴轴设定限制
additionalAxisLimits = […
3500年,4500年;%轴2水渍险
0,6;%轴3 KB
20、30;%轴4 LCB
30、50;% 5轴TPC
200年,500年;%轴6 MCTC
0,50;%轴7 BMt
100年,1500年;%轴8 BMl
20,250;%轴9点
0,1,)%轴10 CB
网格在
draft_y = (2、4、6、8);
%
dispS = (4338.433882, 12602.51994, 20397.27172, 29240.4964);
% dispW = (4338.433882, 12602.51994, 20397.27172, 29240.49644);
% % bmT = (49.934497, 18.50834124, 11.99581801, 8.749939429);
KB = (1.69838, 2.41533, 3.48171, 4.66708);
% % LCB = [29.94300827, 29.8
情节(dispW draft_y KB, draft_y)
%计算蜱虫值为每个轴与主轴对齐
additionalAxisTicks = arrayfun (@ (i) {linspace (additionalAxisLimits(我,1),…
additionalAxisLimits(我,2),元素个数(ax.XTick))}, 1:尺寸(additionalAxisLimits,1));
%设置多行蜱虫
allTicks = [ax.XTick;cell2mat (additionalAxisTicks '));
tickLabels =组成(repmat (“% .2f \ \换行符”1、大小(allTicks,1)), allTicks (:)。');
% % 4 d添加空间左边的标签为中心。
%减少轴高度和宽度,为标签
%减少轴高度和宽度,为标签
ax.Position (3) = ax.Position(3) *炮;%宽度减少到75%
ax.Position (4) = ax.Position (4) * .40;%高度下降到40%
ax.Position (2) = ax.Position(2) +相关性较高;%上升
%加上x标记标签
集(ax,“XTickLabel”tickLabels,“TickDir”,“出”)
%定义标签的每一行
ax2 =轴(“位置”,(和(ax.Position ([1,3])) * 1.1, ax.Position (2), 0.2, 0]);
linkprop ((ax, ax2) {“TickDir”,“TickLength”,“字形大小”})
axisLabels = {“区域(m ^ 2)”,“距离(t)”,“区域(m ^ 2)”,“问从0 (m)”,“KB (m)”};%每个轴
集(ax2,“XTick”,0.5,“XLim”[0,1],“XTickLabel”strjoin (axisLabels“\ \换行符”))
我只试过2的14
亚当Danz
2020年7月28日
编辑:亚当Danz
2020年7月28日
你让我做你的整个项目。我可以帮助你学习,但我不会为你做你的工作。
你需要规范化你所有的x值,所以他们匹配你的主要x轴的规模。
这是一个例子。你需要理解的例子应用到您的数据。
首先,你需要决定轴的上下界限范围。
ax.XLim= [4000,30000];
然后你需要正常范围值。我演示的x值在20到30之间。
x = [22 30 26 25 24 25 25 22];
xBounds = (20、30);
% x轴限制的正常化
xNorm = (x - xBounds(1) /范围(xBounds) *范围(ax.XLim) + ax.XLim (1);
现在数据使用
xNorm
情节(xNorm, y)
重复这一行。y轴的值将自动调整您的数据的范围。
亚当Danz
2020年7月28日
“在这一行,“(1)”的意思是?”
看的价值
ax.XLim
。(1)选择第一个元素x-limit越低。
归一化
当你将一组数据转换成不同的规模。一个众所周知的例子是百分比。0.2,0.5,0.8可以转换为20%,50%,80%乘以100。标准化是有点复杂,因为数据必须按比例缩小的适合4000 - 30000。
“我必须写这个代码,我的意思是哪一行?最后?”
你可以在任何地方规范化数据ax后在您的代码中。XLim设置。
我建议做轴后的策划都成立。
亚当Danz
2022年3月15日
我的回答并不添加第二个轴。相反,它还附加了一排排x-tick-labels代表轴在不同尺度。你可以实现这个想法,但不会显示第二个轴心线和蜱虫的间隔会有所不同。Matlab目前并不提供一个方法增加额外轴添加统治者(线),但你可以问一个新的问题或者搜索论坛找到解决方法。
Adila Nalisa宾蒂穆罕默德纳
2022年3月16日
感谢亚当claryfication在这个问题。但是你知道,这样我可以添加第二轴在Matlab ?我会很感激如果你可以分享想法。提前谢谢你。
马修Mishrikey
2022年4月14日
注意,这种方法不使用uiaxes。
不幸的是换行没有呈现,你最终得到的只是一行每一秒标签。
这几乎是相同的代码,亚当斯,uiaxes,也迫使标签旋转为0。
%建立主轴(上)
clf ()
uif = uifigure (“HandleVisibility”,“上”);
ax = uiaxes (uif“位置”,20 100 500 300);
斧子。XTick = 0:200:2800;
ax.XLim= [0,2800];
%为所有其他轴轴设定限制
additionalAxisLimits = […
0,1400;%轴2
19.2、23.4;%轴3
0.2,3);%轴4
%计算蜱虫值为每个轴与主轴对齐
additionalAxisTicks = arrayfun (@ (i) {linspace (additionalAxisLimits(我,1),…
additionalAxisLimits(我,2),元素个数(ax.XTick))}, 1:尺寸(additionalAxisLimits,1));
%设置多行蜱虫
allTicks = [ax.XTick;cell2mat (additionalAxisTicks '));
tickLabels =组成(' % 4 d \ \换行符% 4 d \ \换行符% .1f \ \换行符% .1f 'allTicks (:)。');
% % 4 d添加空间左边的标签为中心。
%你需要添加“%。1f\\newline" for each row of labels (change formatting as needed).
%或者,您可以使用下面的柔性生产线,适用于任何数量
%的行但对所有行使用相同的格式。
% tickLabels =组成(repmat (% .2f \ \换行,1,大小(allTicks, 1)), allTicks (:)。');
%减少轴高度和宽度,为标签
ax.Position (3:4) = ax.Position(3:4) *炮;%减少到75%
ax.Position (2) = ax.Position (2) + 2;%上升
%加上x标记标签
集(ax,“XTickLabel”tickLabels,“TickDir”,“出”,“XTickLabelRotation”,0)
%定义标签的每一行
ax2 = uiaxes (uif,“位置”,总和(ax.Position ([1,3])) * 1.08, ax.Position(2), .02点,0.001]);
axisLabels = {“距离(t)”,“区域(m ^ 2)”,“问从0 (m)”,“KB (m)”};%每个轴
集(ax2,“XTick”,0.5,“XLim”[0,1],“XTickLabel”strjoin (axisLabels“\ \换行符”))
ax2.TickLength (1) = 0.2;%根据需要调整使两个轴之间的蜱虫
linkprop ((ax, ax2) {“TickDir”,“字形大小”,“XTickLabelRotation”});
亚当Danz
2022年4月14日
编辑:亚当Danz
2022年4月14日
@Matthew Mishrikey
谢谢你的评论。我记得有这个问题在过去,但现在当我在MATLAB R2022a与代码测试它,我不明白这个问题。我唯一的变化是增加轴的尺寸,这样我就能更清楚地看到蜱虫。我想知道你使用MATLAB的释放。
蜱虫标签旋转成为功能后我加入了答案,但是谢谢你的提醒更新我的答案设置旋转为0。
更多的答案(0)
一个错误发生
无法完成的行动,因为页面所做的更改。重新加载页面更新状态。
你也可以从下面的列表中选择一个网站
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。