【问题标题】:Different Axes Positions in MATLABMATLAB 中的不同轴位置
【发布时间】:2013-08-01 00:00:02
【问题描述】:

我目前正在尝试在 Matlab 图中移动坐标轴位置。我想实现与此类似的东西(在 gnuplot 中完成):

我完全不知道这是否可行,或者我可以在哪里找到答案,因此我们将不胜感激。

【问题讨论】:

  • 此链接希望对您有所帮助。mathworks.co.kr/kr/help/matlab/creating_plots/…
  • 发布你的代码到目前为止?
  • 到目前为止我还没有任何代码。我想一个简单的曲面图就足以测试这一点。
  • plot3 可能是一个好的开始
  • hm...Individual Axes Control Matlab Doc 站点中有很多东西,但不是我想要的。我需要重新定位整个轴,而不仅仅是刻度、刻度名称等。而且我真的不明白为什么plot3 应该是一个很好的开始,因为我知道在 Matlab 中绘图是如何工作的。我最初的问题更具体一些。

标签: matlab 3d plot axes


【解决方案1】:

嗯……

让我们来绘制:

x = zeros(1,21); y = -10:10; z = y/2;
figure; plot3(x,y,z); % a line from (0,-10,-5) to (0,10,5) similar to the example

嗯,一个问题是 matlab 不会像您在此处显示的那样自动绘制坐标轴。 这在这里讨论: How to show x and y axes in a MATLAB graph?

要绘制这些(以 3D 形式),一个廉价的解决方案是:

locs = axis; % get current axis boundaries
hold on; 
plot3([locs(1) locs(2)], [0 0], [0 0]); %plot xaxis, a line between(-x,0,0) and (x,0,0);
plot3([0 0], [locs(3) locs(4)], [0 0]); %plot y axis, the line (0,-y,0) and (0,y,0);
plot3([0 0], [0 0], [locs(5) locs(6)]); % plot z axis
hold off

就像那个 Gnu 图一样,3D matlab 图是“在一个盒子里”。与 Gnu 绘图不同,matlab 框没有轮廓。如果你想勾勒出你也必须画出那些线条......呃。

% lets plot the 12 lines to make this box in black ('k');
hold on;
% hold x constant and plot 4 parallel-to-x lines;
plot3([locs(1) locs(2)], [locs(3) locs(3)], [locs(5) locs(5)],'k'); % (-x,-y,-z) to (x,-y,-z)
plot3([locs(1) locs(2)], [locs(3) locs(3)], [locs(6) locs(6)],'k');
plot3([locs(1) locs(2)], [locs(4) locs(4)], [locs(5) locs(5)],'k');
plot3([locs(1) locs(2)], [locs(4) locs(4)], [locs(6) locs(6)],'k');
% plot parallel-to-y lines
plot3([locs(1) locs(1)], [locs(3) locs(4)], [locs(5) locs(5)],'k');
plot3([locs(1) locs(1)], [locs(3) locs(4)], [locs(6) locs(6)],'k');
plot3([locs(2) locs(2)], [locs(3) locs(4)], [locs(5) locs(5)],'k');
plot3([locs(2) locs(2)], [locs(3) locs(4)], [locs(6) locs(6)],'k');
% plot parallel-to-z lines
plot3([locs(1) locs(1)], [locs(3) locs(3)], [locs(5) locs(6)],'k');
plot3([locs(1) locs(1)], [locs(4) locs(4)], [locs(5) locs(6)],'k');
plot3([locs(2) locs(2)], [locs(3) locs(3)], [locs(5) locs(6)],'k');
plot3([locs(2) locs(2)], [locs(4) locs(4)], [locs(5) locs(6)],'k');
hold off;

现在我们有了盒子;

如果我们只想要区域 y>0,z>0;我们可以使用axis命令。 在绘制所有其他线之后使用轴对我来说真的搞砸了一切,所以我会在一开始就决定你的限制。

大家一起:

figure; 
plot3(x,y,z); % a line from (0,-10,-5) to (0,10,5) similar to the example
locs = axis;
axis([locs(1) locs(2) 0 locs(4) 0 locs(6)]);
locs = axis;

hold on; 
% plot axis
plot3([locs(1) locs(2)], [0 0], [0 0]); %plot xaxis, a line between(-x,0,0) and (x,0,0);
plot3([0 0], [locs(3) locs(4)], [0 0]); %plot y axis, the line (0,-y,0) and (0,y,0);
plot3([0 0], [0 0], [locs(5) locs(6)]); % plot z axis

% plot box
% hold x constant and plot 4 parallel-to-x lines;
plot3([locs(1) locs(2)], [locs(3) locs(3)], [locs(5) locs(5)],'k'); % (-x,-y,-z) to (x,-y,-z)
plot3([locs(1) locs(2)], [locs(3) locs(3)], [locs(6) locs(6)],'k');
plot3([locs(1) locs(2)], [locs(4) locs(4)], [locs(5) locs(5)],'k');
plot3([locs(1) locs(2)], [locs(4) locs(4)], [locs(6) locs(6)],'k');
% plot parallel-to-y lines
plot3([locs(1) locs(1)], [locs(3) locs(4)], [locs(5) locs(5)],'k');
plot3([locs(1) locs(1)], [locs(3) locs(4)], [locs(6) locs(6)],'k');
plot3([locs(2) locs(2)], [locs(3) locs(4)], [locs(5) locs(5)],'k');
plot3([locs(2) locs(2)], [locs(3) locs(4)], [locs(6) locs(6)],'k');
% plot parallel-to-z lines
plot3([locs(1) locs(1)], [locs(3) locs(3)], [locs(5) locs(6)],'k');
plot3([locs(1) locs(1)], [locs(4) locs(4)], [locs(5) locs(6)],'k');
plot3([locs(2) locs(2)], [locs(3) locs(3)], [locs(5) locs(6)],'k');
plot3([locs(2) locs(2)], [locs(4) locs(4)], [locs(5) locs(6)],'k');
hold off;

我相信你可以做得更好,但我认为这是一个非常好的开始。我会把所有这些乱七八糟的东西放到一个函数中来保存打字。

【讨论】:

  • 看起来很棒弗雷德里克!这绝对是我可以与之合作来实现我的目标的东西。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-10-08
  • 2012-12-16
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
  • 2017-08-06
  • 2015-09-26
  • 1970-01-01
相关资源
最近更新 更多