如何从特定点的 x 轴和 y 轴绘制线

how to plot line from x-axis and y-axis for a specific point

如果我有这个表示 X 轴的矩阵:

Data1=[1
1;
2;
3;
3;
6;
9;
14;
15;
16;
28;
31;
97;
152;
226]

我有这个等式来获取 Y=axis 中每个元素的表示值:

for i=1:numel(Data1)
     p1(i)=(i - 0.3 )/( numel(Data1) + 0.4)     
 end

所以,X轴是Data1,Y轴是p1。 我的问题是:如何为 Y 轴(e.x at p1=0.62)和 X 轴上的特定点绘制一条线,这两条线将相互交叉。

图片:

这是一种通过查看 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');

输出:

您需要 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); 

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