使用标签创建Surf()

时间:2012-10-10 14:18:59

标签: matlab

[ndata, text, alldata] = xlsread('Euro swap rates.xlsx',3);
%(although created from text dates is still a cell array?) 
dates=text(:,1);  
%(Same problem here)
rates_header=text(1,:);  
rates=ndata;
surf(rates);
colormap(jet);  

>> surf(rates,dates); %but when I try to add wither of the labels I get a problem?
??? Error using ==> surf at 78
X, Y, Z, and C cannot be complex.

>> surf(rates,dates,rates_header);
??? Error using ==> surf at 78
Z must be a matrix, not a scalar or vector.`

我假设问题是因为date和rates_header仍然是单元格数组?

如何将它们转换为文字?有没有办法直接作为xlsread的一部分来做?

最后在图中我想制作数组中的第一个单元格date和header_header,这是冲浪图的那个轴的名称,其余的数据用于填充轴。

越来越近了

  
    

title('Euro Swap Rates');

         

xlabel( '成熟');

         

ylabel( '日期');

         

zlabel('掉期率');

         

set(gca,'YTick',1:100:length(dates));

         

set(gca,'YTickLabel',date(1:100:length(dates)));

         

set(gca,'XTick',0:10:length(rates_header));

         

set(gca,'XTickLabel',rates_header(0:10:length(rates_header)));

  

还有两个问题:

  1. 我希望x Tick为1y然后10y20y ... 60y所以第一步的大小是9y然后是10y所有剩余的分数
  2. 我希望这些日期只显示1月1日和每年6月的日期(或者是那些日期最接近的工作日)。

1 个答案:

答案 0 :(得分:1)

看起来您想要在x轴上设置标签。

您不是通过surf执行此操作,而是在使用set之后执行此操作,如下所示:

set(axHandle, 'XTickLabel', xlabels);

这是一个完整的例子:

[x  y] = meshgrid(-4:.25:4;);
z = x.^2 + y.^2;
xlab = {'one','two','three','four'};

surf(x,y,z);
set(gca,'XTickLabel', xlab);

您可以使用任何标签,只要它们是字符串并保存到单元格数组中即可。这就是我上面对xlab所做的。