在Matlab,命令“轴相等”:设置纵横比,使等号标记X、Y轴和Z轴的增量在大小上是相等的。这个使球体(25)看起来像球体,而不是椭球体但是,当使用loglog绘图功能时,这不会“正常”工作我想发生的是,我得到一个纵横比,这样一个给定的因素占据相同的视觉距离实际发生的是>> loglog(2.^[1:20]*1e10,(2.^[1:20]).^2)>> axis equal结果而不是这样就可以很容易地观察到斜率2(从平方开始),这样就不会有额外的空白了。我的问题是:有没有一个Matlab命令可以帮我完成这个任务或者,以前有人解决过这个问题吗? 最佳答案 一种解决方案是让你自己修改 >和> >属性,这样一个轴上的十年就等于另一个轴上的十年。举个例子,你可以这样做:loglog(2.^[1:20]*1e10,(2.^[1:20]).^2); %# Plot your sample dataxLimits = [1e10 1e16]; %# Limits for the x axisyLimits = [1 1e12]; %# Limits for the y axislogScale = diff(yLimits)/diff(xLimits); %# Scale between the x and y rangespowerScale = diff(log10(yLimits))/... %# Scale between the x and y powers diff(log10(xLimits));set(gca,'Xlim',xLimits,'YLim',yLimits,... %# Set the limits and the 'DataAspectRatio',[1 logScale/powerScale 1]); %# data aspect ratioset(gca,'XTick',[1e10 1e12 1e14 1e16]); %# Change the x axis tick marks下面是结果图:注意,Y轴上的100和102刻度标记之间的空间跨越与x轴上的1010和1012刻度标记之间的空间相同的像素数,从而使一个轴上的十年等于另一个轴上的十年。如果您不想更改轴限制,而是想使用由MATLAB选择的默认限制,则只需从轴获取限制即可执行计算:xLimits = get(hAxes,'XLim');yLimits = get(hAxes,'YLim');但是,要禁用MATLAB的自动轴调整行为,在更新'DataAspectRatio'属性时,您仍然需要将轴限制设置为相同的值,或将axes limits设置为'manual':set(gca,'Xlim',xLimits,'YLim',yLimits,... 'DataAspectRatio',[1 logScale/powerScale 1]);%# OR...set(gca,'XLimMode','manual','YLimMode','manual',... 'DataAspectRatio',[1 logScale/powerScale 1]);如果所有这些看起来像是很多工作,那么您可以通过将其全部放入一个函数中来简化事情实际上,我将根据这个答案中的代码向'DataAspectRatio'提交一个函数decades_equal目前,您可以使用一个精简版本(即无错误检查或帮助):function decades_equal(hAxes,xLimits,yLimits) if (nargin < 2) || isempty(xLimits) xLimits = get(hAxes,'XLim'); end if (nargin < 3) || isempty(yLimits) yLimits = get(hAxes,'YLim'); end logScale = diff(yLimits)/diff(xLimits); powerScale = diff(log10(yLimits))/diff(log10(xLimits)); set(hAxes,'Xlim',xLimits,... 'YLim',yLimits,... 'DataAspectRatio',[1 logScale/powerScale 1]);end您可以如下调用函数:loglog(2.^[1:20]*1e10,(2.^[1:20]).^2); %# Plot your sample datadecades_equal(gca); %# Make the decades equal sizes工作原理。。。你可能想知道我如何选择上面的比例因子背后的逻辑是什么当试图使每个轴上显示的十年大小相等时,我们必须同时考虑轴范围内的十年数量和大小在上面的代码中,我基本上计算每个轴的平均十年大小,然后使用平均十年的比率来相应地缩放轴。例如,diff(yLimits)给出y轴的总大小,而diff(log10(yLimits))给出y轴上显示的几十个数(即十的幂)。如果我像这样重新排序上面代码中的操作,这可能更容易看到:yDecade = diff(yLimits)/diff(log10(yLimits)); %# Average y decade sizexDecade = diff(xLimits)/diff(log10(xLimits)); %# Average x decade sizeset(gca,'XLim',xLimits,'YLim',yLimits,... 'DataAspectRatio',[1 yDecade/xDecade 1]);这将提供与以前相同的缩放结果。关于matlab - Matlab对数图中的轴相等,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4133510/
10-11 18:24