如何在同一个绘图上绘制2个图形,以便我可以比较它们

时间:2012-07-30 07:38:27

标签: matlab plot

我有两个财务图形,我需要分析它们相互比较的效果。我写了这样的程序:

clear

fLog = fopen('log.log');
data = textscan(fLog, '%f:%f:%f:%f %f %f %f');
fclose(fLog);

% hh:min:sec:millisec
secvec = [60*60 60 1 1e-3];
x = [data{1:4}] * secvec';

y = data{5};
yPrice = data{6};

xindays = x / (24*60*60);

plot(xindays, y);
hold on
plot(xindays, yPrice);

ticklabelformat(gca,'y','%g')
ticklabelformat(gca,'x',{@tick2datestr,'x','HH:MM:SS'})

log.log文件示例

问题在于,由于两个图形具有完全不同的“Y”值,因此它们看起来都像“直线”。所以我需要以某种方式有两个Y轴,可能一个在左边,一个在右边,但它们应该具有相同的比例,这意味着两个图形上的1%变化应该是相同的,所以我应该能够比较哪个股票表现优于在哪里如果可以这样做以及如何做到?

我也想用不同的颜色绘制这些图形,但我可能会自己谷歌一旦上面的问题得到解决就怎么做。

2 个答案:

答案 0 :(得分:1)

您正在寻找plotyy。因为你也改变了xticks,我建议从两个结果轴之一中删除xticks,否则它们会重叠:

[AX,H1,H2] = plotyy(xindays,y,xindays,yPrice);
set(AX(1),'xtick',[])

ticklabelformat(AX(2),'y','%g')
ticklabelformat(AX(2),'x',{@tick2datestr,'x','HH:MM:SS'})

这给出了下图:

enter image description here

编辑:

如您所见,plotyy只是确保所有数据都在可见窗口中。所以y轴标度不相等。如果你真的想要它,你可以在使用plotyy之后改变它。例如:

[AX,H1,H2] = plotyy(xindays,y,xindays,yPrice);
set(AX(1),'xtick',[]);

ylim(AX(1),[<lower bound>   <upper bound>]);
ylim(AX(2),[<lower bound>   <upper bound>]);

ticklabelformat(AX(2),'y','%g')
ticklabelformat(AX(2),'x',{@tick2datestr,'x','HH:MM:SS'})

理想的可见范围取决于数据本身的范围,因此您必须自己修复此问题。

答案 1 :(得分:1)

如果只是表现优异,试试这个: 假设值在向量x和y中,通过以下方式得到相对变化: x_rel = X /平均值(x)的 y_rel = X /平均值(y)的

现在1%的变化(与平均值相比)将在图表中显示完全相同的变化。