【问题标题】:matlab - get date in month/year format from datenum number formatmatlab - 从 datenum 数字格式获取月/年格式的日期
【发布时间】:2016-04-04 12:51:58
【问题描述】:

我有一个表格,其中包含“双”格式的年份和月份。

然后我为表中的每个条目创建一个日期编号:

for j=1:number_of_rows
dates_returns_all_period_monthly(j,10)=datenum([year,month,1]);
end

首先,有没有一种方法可以每月获取日期,而不必在 datenum 命令上设置日期?

其次,前面的命令给了我731947等值

然后我想以日期格式获取日期,

我正在尝试运行以下命令:

dates_returns_all_period_monthly(j,11)=datestr(dates_returns_all_period_monthly(j,10));

但我收到一个错误"Assignment has more non-singleton rhs dimensions than non-singleton subscripts"

我该如何解决这个问题?理想情况下,我希望有类似 2004 年 1 月、2005 年 2 月等或 01/2004、02/2004 之类的东西,因为稍后我想在 x 轴上绘制日期,但我没有不想将731947 等作为值。

【问题讨论】:

  • 我认为您正在寻找 datetime 而不是 datenum

标签: matlab


【解决方案1】:

这里的问题是您试图将字符串输出放入矩阵数组中。这不起作用:它会尝试将字符串转换为数字数组,并且您的索引会告诉它尝试将您的数字数组放入单个矩阵位置,从而导致您看到的错误。

如果你想存储它们,你需要做的是创建一个元胞数组,它在每个元素位置存储任意数据,但需要不同的语法来访问:

text_dates = cell(1,number_of_rows);
for j=1:number_of_rows
    text_dates{j}=datestr(dates_returns_all_period_monthly(j,10));
end

但是,您将无法将它们直接用作 plot 命令的一部分 - Matlab 需要输入以绘制为数字,因此字符串将不起作用。你想要做的是使用你的数值创建你的绘图,然后访问当前轴属性(你可以使用gca 命令来获取它)并将“XTickLabel”属性更改为你想要的字符串,例如:

plot(dates_returns_all_period_monthly(:,10),whatever_your_y_values_are);
ax=gca;
set(gca,'XTickLabels',text_dates);

【讨论】:

  • 抱歉,似乎并非所有值都绘制在 x 轴上。似乎因为初始 x 轴值只打印了 6 个值,所以前 6 个值也是从文本值中任意选择的。有没有办法打印正确的值? plot(yearlab,sigmean(:,1)) datetick('x','keepticks','keeplimits') ax=gca; set(gca,'XTickLabels',yearlab_monthly); title('plot title')
  • 是的,您还需要手动设置“XTick”。将您的set(gca,'XTickLabels',yearlab_monthly); 修改为 `set(gca,'XTick',yearlab,'XTickLabels',yearlab_monthly);
  • 如果我使用set(gca,'XTick',yearlab,'XTickLabels',yearlab_monthly);,它会在 x 轴上放置很多值,以至于我什么也看不到。我该如何解决?
  • 嗯,你必须决定你认为多少刻度适合你的图表,并根据需要修改表达式,例如:set(gca,'XTick',yearlab(1:10:end),'XTickLabels',yearlab_monthly(1:10:end));set(gca,'XTick',yearlab(1:100:end),'XTickLabels',yearlab_monthly(1:100:end));
  • 谢谢休。你知道我怎么可以只绘制 xtick 和 xticklabel 选定的日期吗?假设我只想在 2004 年 1 月、2005 年 12 月、2010 年 11 月等等有一个 xtick 和一个 xticklabel。如果我使用 set(gca,'xtick',[yearlab(1);yearlab(10);yearlab(15)],'xticklabel',[yearlab_monthly(1);yearlab_monthly(10);yearlab_monthly(15)]); 它会在前三个刻度中连续绘制这些,但我希望它们是绘制在正确的位置。谢谢。
猜你喜欢
  • 2015-04-29
  • 1970-01-01
  • 2020-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多