在图上插入间隔标签

时间:2014-01-29 15:18:36

标签: matlab plot labels

我有7个区间的情节:

t=0:0.001:10;
y_fcn = @(t) 0.2*cos(t) + cos(1.4*t) + 0.8*cos(5.2*t) + 0.02*randn(1, length(t));
plot(t, y_fcn(t), '-b');
hold on
I = [1, 1430, 2859, 4288, 5717, 7146, 8575, 10001];
plot(t(I), y_fcn(t(I)), '*r')

我希望在第7个标签上标明间隔为(w1,w2,w3,w4,w5,w6,w7)。 谢谢

3 个答案:

答案 0 :(得分:1)

这样的东西?

strings = {'w1';'w2';'w3';'w4';'w5';'w6';'w7'};
x_strings = (t(I(1:7))+t(I(2:8)))/2; %// center of each interval
y_strings = y_fcn(x_strings) + .9; %// height from y_fcn. Adjust ".9" as needed
text(x_strings,y_strings,strings)

答案 1 :(得分:0)

假设您想要在图例上看到不同的线条,我建议您单独绘制它们。这是一个小规模的例子:

plot(1:100,1:100,101:200,101:200)
legend('a','b')

答案 2 :(得分:0)

尝试使用textannotation(双箭头)表示您的间隔。但请注意,由于某些原因,annotation使用规范化的数字单位来指定注释的xy坐标,因此您可能希望使用文件交换中这个非常有用的实用程序函数将坐标从数据空间转换为标准化的数字单位:Data space to figure units conversion

修改 当我感到慷慨时,它可能看起来像那样:

t=0:0.001:10;
y_fcn = @(t) 0.2*cos(t) + cos(1.4*t) + 0.8*cos(5.2*t) + 0.02*randn(1, length(t));
plot(t, y_fcn(t), '-b');
axis([min(t) max(t) -2 3]);
hold on
I = [1, 1430, 2859, 4288, 5717, 7146, 8575, 10001];
plot(t(I), y_fcn(t(I)), '*r')

for k=1:length(I)-1
    [xa,ya] = ds2nfu([t(I(k)) t(I(k+1))],[2.5 2.5]);
    annotation('doublearrow',xa,ya,'Color','r')
    y_lim = get(gca,'ylim');
    line([t(I(k)) t(I(k))],y_lim,'Color','r','LineStyle',':')
    text(0.5*(t(I(k))+t(I(k+1))),2.7,['w' num2str(k)],'Color','r')
end