如何从特定点的 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
如果我有这个表示 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