在Matlab中添加标签和轴到Surf

时间:2012-10-10 18:10:03

标签: matlab

  

可能重复:
  Creating Surf() with Labels

title('Euro Swap Rates');

xlabel('Maturity');

ylabel('Date');

zlabel('Swap Rate');

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

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

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

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

还有两个问题: 1。 2。

  1. 我希望x勾选为1y然后10y20y...50y这样第一步的大小为9y,然后10y为所有剩余的分数,分开从255y的最后60y开始,5y应该间隔keydates={'01/01/2000','01/06/2000','01/01/2001','01/06/2001','01/01/2002','01/06/2002','01/01/2003','01/06/2003','01/01/2004','01/06/2004','01/01/2005','01/06/2005','01/01/2006','01/06/2006','01/01/2007','01/06/2007','01/01/2008','01/06/2008','01/01/2009','01/06/2009','01/01/2010','01/06/2010','01/01/2011','01/06/2011','01/01/2012','01/06/2012'}; keydates2=datenum(keydates,'dd/mm/yyyy'); dates2=datenum(dates,'dd/mm/yyyy'); [index]=ClosestDate(dates2,keydates2); ytick = index; yticklabels = keydates; set(gca, 'YTick', ytick); set(gca, 'YTickLabel', yticklabels); ,我该如何处理这种不规则的间距?
  2. 我希望这些日期只显示1月1日和每年6月的日期(或者是那些日期最接近的工作日)。 (目前上面的代码只是采用向量的长度并按照指示将其拆分,我需要在某处查看数组中的值并相应地进行拆分。
  3. 确实做到了,似乎是一种稍微狡猾的方式,但它完成了

    {{1}}

    ClosestDate是我的函数,它在dates2中找到第一个日期,这比keydates2中的每个日期都要多。

1 个答案:

答案 0 :(得分:0)

对于Q1,只需按照您的描述完全设置XTick属性:[编辑:将双引号(“)的错误使用更改为单引号(')]

xtick = [1, 10, 20, 30, 40, 50, 55, 60];
xticklabels = {'1y', '10y', '20y', '30y', '40y', '50y', '55y', '60y'};

set(gca, 'XTick', xtick);
set(gca, 'XTickLabel', xticklabels);

如果没有关于dates数组包含的内容的信息,很难回答Q2,但你可以做同样的事情:

ytick = 1:6:60; % or whatever is appropriate according to the scale you are using
yticklabels = {'Jan 2005', 'Jun 2005', 'Jan 2006', 'Jun 2006', ...etc };

set(gca, 'YTick', ytick);
set(gca, 'YTickLabel', yticklabels);

当然你也可以从刻度值自动生成字符串 - 如果你需要帮助就可以这样做。只需要它就可以了。