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啊,我现在明白了。那么请复习我修改过的答案。