Matlab 在对数标度上绘制趋势线
我正试图将趋势线添加到Matlab 在对数标度上绘制趋势线,matlab,trendline,Matlab,Trendline,我正试图将趋势线添加到semilogx绘图中,但无法成功。我想要y(17)和y(20)之间的趋势线,但它不是以直线绘制的 这是我的代码: %// Define equation. x = [90868 68151 45434 34076 27261 13631 6816 3408 2273 1948 1705 1137 853 683 569 455 342 274 228 190]; y = [3680 3723 3800 3866 3920 4103 4250 4320 4340 4344
semilogx
绘图中,但无法成功。我想要y(17)
和y(20)
之间的趋势线,但它不是以直线绘制的
这是我的代码:
%// Define equation.
x = [90868 68151 45434 34076 27261 13631 6816 3408 2273 1948 1705 1137 853 683 569 455 342 274 228 190];
y = [3680 3723 3800 3866 3920 4103 4250 4320 4340 4344 4350 4364 4373 4379 4384 4393 4398 4402 4405 4407];
%// Plot it
semilogx(x,y, 'bo-', 'LineWidth', 3);
grid on;
%// Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
%// Give a name to the title bar.
set(gcf,'name','Demo by ImageAnalyst','numbertitle','off')
%// Fit the y data range with a line (limitedRange).
limitedRange = 17:20;
coeffs = polyfit(x(limitedRange), y(limitedRange), 1);
xFitting = linspace(200, 90000, 50);
yFitted = polyval(coeffs, xFitting);
%// Plot the fitted line over the specified range.
hold on;
plot(xFitting, yFitted, 'ro-', 'LineWidth', 2);
legend('Original Data', 'Line Fit');
如何使趋势线显示为一条线?对于
polyfit
,应该没有任何投诉。在这里,它是有效的
这是你的情节:
一切都有道理。线扭曲的原因是因为x轴具有对数比例(如果在对数x比例上绘制线ax+b
,则会将其视为alogx+b
曲线)
要将其视为对数x轴上的直线,需要引入适当的“反向”失真。在您的情况下,趋势线的计算应如下所示:
limitedRange = 17:20;
coeffs = polyfit(log10(x(limitedRange)), y(limitedRange), 1); %// Note the log10
xFitting = linspace(200, 90000, 50);
yFitted = polyval(coeffs, log10(xFitting)); %// Note the log10
这还不是全部。在对数尺度下,低x坐标往往间隔更大,且趋势线圆在x轴的较高值处更密集。要否定这一点,您需要将xFitting
中的点按线性比例以指数间隔排列,以便它们在对数比例上以线性间隔排列,例如:
xFitting = 10 .^ (1:.1:5);
或使用内置功能:
xFitting = logspace(1, 5, 50);
计算趋势线的最终代码应为:
limitedRange = 17:20;
coeffs = polyfit(log10(x(limitedRange)), y(limitedRange), 1);
xFitting = logspace(1, 5, 50);
yFitted = polyval(coeffs, log10(xFitting));
这应该给你以下的曲线图:
同样,请记住这是一个对数刻度
希望这有帮助:)谢谢你的回答。我想要实现的是使用多边形拟合在y(17:20)内得到一条直线,这样我就可以计算出原始数据曲线的该区域直线的斜率和截距。@user1641478哪个y(17:20)?
y
数据向量中的最后一个点,还是绘图本身中的最后一个点?正如我在回答中所解释的,这些是不同的点,因为您的y
数据向量不是按升序排序的。谢谢。请看我真正想要实现的是在这个链接中的图像显示。我已经绘制了相同的数据,并希望得到图中所示的直线。我真的很感谢你的帮助。@1641478啊,我现在明白了。那么请复习我修改过的答案。