【问题标题】:Resizing of axes when plotting in the same figure在同一图中绘制时调整轴的大小
【发布时间】:2014-10-08 08:46:05
【问题描述】:

请创建两个函数来重现我的意思:

第一个函数:

function testPlot1()

pointData = rand(20000,3);
figure;
%hold on;  % <- if commented out, does not work
plot3(pointData(:,1), pointData(:,2), pointData(:,3),'Marker', '.', 'MarkerEdgeColor', 'b','MarkerSize', 5, 'LineStyle', 'none');

axis equal;
xh = xlabel('X');
yh = ylabel('Y');
zh = zlabel('Z');
set([xh,yh, zh],...
    'fontweight','bold',...
    'fontsize',14,...
    'color',[0,0,0]);
view(0,20);

end

第二个功能:

function testPlot2(fighandle)
axes(fighandle);
hold on;
plot3([0 3],[0 3],[0 3], 'r', 'LineWidth', 10);
end

如果你现在打电话

testPlot1();testPlot2(gca)

您将获得以下信息:

如果您取消注释 testPlot1() 中的“hold on”行并再次调用上述语句,您将得到:

对我来说,这是不清楚的行为。在第一种情况下,testPlot1() 创建一个图形,将点云绘制到其中并修改轴属性。然后调用 testPlot2(gca) 将线添加到图中,但线被剪裁了。 然而,在第二种情况下,线条不再被剪裁。为什么现在不剪了,以前剪了?

这似乎与我在 testPlot1() 中的轴属性中所做的更改有关。有人可以向我解释这种行为吗? (为什么它可以与 hold on 一起使用,我对轴属性的更改会导致什么)

【问题讨论】:

  • 这是一个错字吗:“(为什么它在等待时有效,...”它适用于hold on,这不是你的意思吗在问吗?
  • 不,不是错字。无论如何我都会进行编辑,因为这样有点混乱。我第一次调用 testPlot1();testPlot2(gca) 是在“hold on”被注释掉的时候。我也会试着澄清一下我的困惑

标签: matlab matlab-figure


【解决方案1】:

hold on 是一个 Matlab 命令(hold off 再次将其关闭),您可以在其中在一个图形上绘制多个元素,而不会删除之前的元素。

会发生什么

如果您调用plot 函数,则会创建一个图形(或使用一个已经存在的图形!)并且Matlab 会在该图形中绘制一个 图。该图中的先前情节已消失。

如果您想为您的绘图添加更多点,您可以调用hold on,然后再次调用plot,这次使用不同的数字,可能还有不同的颜色。 但是,如果您忘记为活动人物再次转动hold off,您所做的任何绘图活动(如plot)都将添加到该人物中。这就是您问题中的第二张图片中发生的情况。您在 0 到 1 范围内绘制了一些点,然后在第二个函数中,您在 2 到 3 范围内添加了更多点。结果,轴扩展到 0 到 3 范围内。

或者,您可以拨打figure,这将导致一个新的数字出现。 figure_handle = figure(); 将返回一个图形句柄,您可以将其传递给您的函数,以防您有多个图形并想在一段时间后更改其中一个。

【讨论】:

  • 我知道,但上面的问题是调整轴限制的大小。在第一种情况下,两者都绘制在同一个图中,“线”只是不可见,因为它被剪裁了
  • 您对function1 中的hold on 有什么期望?我一开始就不想让它在那里,但它的作用完全在意料之中。
  • 如果我的评论没有意义,那是因为 user1809923 改变了他/她的评论...
猜你喜欢
  • 2016-05-06
  • 2017-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多