0

我有两张财务图表,我需要分析它们的表现如何相互比较。我写了这样的程序:

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% 的变化应该是相同的,所以我应该能够比较哪些股票表现更好和在哪里。如果可以做到这一点以及如何做到这一点?

我也想用不同的颜色来绘制这个图形,但是一旦上述问题得到解决,我可能可以自己谷歌自己如何做到这一点。

4

2 回答 2

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'})

这为您提供了下图:

在此处输入图像描述

编辑:

如您所见,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'})

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

于 2012-07-30T07:49:15.530 回答
1

如果它只是为了超越,试试这个:假设值在向量 x 和 y 中,得到相对变化: x_rel=x/mean(x) y_rel=x/mean(y)

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

于 2012-07-30T13:07:20.560 回答