如果我有这个表示X轴的矩阵:
Data1=[1
1;
2;
3;
3;
6;
9;
14;
15;
16;
28;
31;
97;
152;
226]
我有这个等式来得到Y =轴中每个元素的代表值:
for i=1:numel(Data1)
p1(i)=(i - 0.3 )/( numel(Data1) + 0.4)
end
因此,X轴是Data1,Y轴是p1。 我的问题是:如何在Y轴上绘制一条直线(e.x在p1 = 0.62)和从X轴绘制线条,这两条线将相互交叉。
图像:
答案 0 :(得分:2)
您需要interp1
才能找到给定y值的相应x值。
Data1 = [1;1;2;3;3;6;9;14;15;16;28;31;97;152;226]
for i=1:numel(Data1)
p1(i)=(i - 0.3 )/( numel(Data1) + 0.4);
end
plot(Data1,p1); hold on
%// given y-value
pY = 0.62;
%// determine according x-value
pX = interp1(p1,Data1,pY);
%// plot
plot( [pX,pX], [0,pY],'k-','LineWidth',3); hold on
plot( [0,pX], [pY,pY],'k-','LineWidth',3);
答案 1 :(得分:1)
通过查看p1
中与最感兴趣的值最接近的元素,可以通过以下方式来实现此目的。也就是说,从p1
中减去该值并找到最小的元素。为了计算正值和负值,我将差值向量平方,然后取平方根得到正值。否则,min
函数将查找距离0最远的负值。
请注意,此方法会找到最接近实际曲线的点,因此不如使用插值精确。要了解如何使用interp1
查看@thewaywewalk的答案。
代码评论很容易理解:
Value = .62
%// Find index in p1 closest to the value of interest.
Diff = sqrt((p1-Value).^2);
[~,b] = (min(Diff));
%// Plot the curve
plot(Data1,p1)
%// Adjust axis limits
axis([0 max(Data1(:)) 0 max(p1(:))])
%// Add lines
hLine1 = line([0 Data1(b)],[Value Value],'LineWidth',3,'Color','k');
hLine2 = line([Data1(b) Data1(b)],[0 Value],'LineWidth',3,'Color','k');
输出:
答案 2 :(得分:0)
hold on;
plot(Data1, p1, 'b-');
p1Val = 0.62;
idx = find(p1 == p1Val, 1);
plot([0, Data1(idx)], repmat(p1Val, 1, 2), 'k-', 'LineWidth', 2); % Horizontal line
plot(repmat(Data1(idx), 1, 2), [0, p1Val], 'k-', 'LineWidth', 2); % Vertical line