Matlab:沿每个轴创建物理长度相等的线
Matlab: create lines with equal physical length along each axis
我想制作带刻度的比例尺,并且我希望 X 和 Y 条上的刻度具有相同的物理长度,而不管相对长度、尺寸或轴的 "modes" (至少在创建刻度时)。我希望 daspect() 能给我我需要的信息,但 daspect() 似乎对询问宽高比几乎没有用。例如,如果我生成一个绘图,其中 Matlab 给出的 XLim 为 [0 3.5],YLim 为 [0 1],则 daspect() 给出 [3.5 1 ...],无论我如何在屏幕上调整图形大小.这显然不准确或没有帮助。是否有其他功能,或者是否有一种方法可以使 daspect() 在不操纵情节的情况下提供有用的信息?
daspect() returns 典型地块上的垃圾。这是因为 stretch-to-fill 功能会扭曲绘图以填充图形 space,从而导致 DataAspectRatio 中的值不准确。可以在 here.
中找到关闭 stretch-to-fill 的说明
如果您想保持 stretch-to-fit 开启,我还找到了一个解决方法,即临时将 PlotBoxAspectRatioMode 设置为 'manual,',其效果是更改 DataAspectRatio 的值以匹配屏幕上的内容.
figure;plot(0.1:0.1:pi,sin(0.1:0.1:pi))
pbaspect manual
val = daspect
pbaspect auto
如果您想要一个普遍有用的脚本(例如,如果 PlotBoxAspectRatioMode 已经是手动的并且您不想更改它),则更安全的方法是:
pbaspectMode = get(gca,'PlotBoxAspectRatioMode');
pbaspect manual;
val = daspect;
set(gca,'PlotBoxAspectRatioMode',pbaspectMode);
不过,我不确定这是否会产生任何间歇性或有害的副作用。
根据 The Mathworks 的支持:
The technique of setting bpaspect to manual and then back may be "safe" (although I wouldn't be surprised if there are side effects), but a better way is to divide:
real_daspect = daspect./pbaspect;
我想制作带刻度的比例尺,并且我希望 X 和 Y 条上的刻度具有相同的物理长度,而不管相对长度、尺寸或轴的 "modes" (至少在创建刻度时)。我希望 daspect() 能给我我需要的信息,但 daspect() 似乎对询问宽高比几乎没有用。例如,如果我生成一个绘图,其中 Matlab 给出的 XLim 为 [0 3.5],YLim 为 [0 1],则 daspect() 给出 [3.5 1 ...],无论我如何在屏幕上调整图形大小.这显然不准确或没有帮助。是否有其他功能,或者是否有一种方法可以使 daspect() 在不操纵情节的情况下提供有用的信息?
daspect() returns 典型地块上的垃圾。这是因为 stretch-to-fill 功能会扭曲绘图以填充图形 space,从而导致 DataAspectRatio 中的值不准确。可以在 here.
中找到关闭 stretch-to-fill 的说明如果您想保持 stretch-to-fit 开启,我还找到了一个解决方法,即临时将 PlotBoxAspectRatioMode 设置为 'manual,',其效果是更改 DataAspectRatio 的值以匹配屏幕上的内容.
figure;plot(0.1:0.1:pi,sin(0.1:0.1:pi))
pbaspect manual
val = daspect
pbaspect auto
如果您想要一个普遍有用的脚本(例如,如果 PlotBoxAspectRatioMode 已经是手动的并且您不想更改它),则更安全的方法是:
pbaspectMode = get(gca,'PlotBoxAspectRatioMode');
pbaspect manual;
val = daspect;
set(gca,'PlotBoxAspectRatioMode',pbaspectMode);
不过,我不确定这是否会产生任何间歇性或有害的副作用。
根据 The Mathworks 的支持:
The technique of setting bpaspect to manual and then back may be "safe" (although I wouldn't be surprised if there are side effects), but a better way is to divide:
real_daspect = daspect./pbaspect;