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

时间:2015-03-19 17:08:29

标签: matlab matlab-figure

如果我有这个表示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轴绘制线条,这两条线将相互交叉。

图像:

enter image description here

3 个答案:

答案 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); 

enter image description here

答案 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');

输出:

enter image description here

答案 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