如何在Matlab中将日期标记放在x轴上?

时间:2014-10-08 18:31:43

标签: matlab date plot

我有一个由两列组成的文本文件,第一列包含日期(格式为yyyy-mm),第二列是整数。文本文件是2 * 144的矩阵,如下所示:

   1996-06   23
   1996-07   53
   1996-08   12
   1996-09   21
   ...

通过importdata我只读了文件的第二列,我在第二列上做了一些操作,但最后它们仍然是144.我可以在x轴上用随机数绘制结果,但是我无法在x轴,因为我需要一个相同大小的矢量,但我只想在1996年到2007年的12年内,而不是x轴上的所有月份。 我是MATLAB的新手,我将不胜感激。

以下是我的代码和错误的完整版本,我发现问题在于我需要一个1 * 144的矩阵表示日期: Ploting dates on x-axis in octave

2 个答案:

答案 0 :(得分:2)

最好的办法是首先正确导入日期向量。因此,您获得的time向量长度与数据相同。

为此,您可以使用textscan(而非importdata),它可以为您提供更多控制权。因此,查看您在上一个问题中详细说明的代码,通过执行以下操作导入数据:

%% // Import your data (textscan gives you more control)
fid = fopen( '2.txt' , 'r') ;  %// open your file
data = textscan(fid,'%s %f') ; %// import the content
fclose(fid) ;                  %// close the file

%% // parse your variables
time = datenum( data{:,1} , 'yyyy-mm' ) ; %// convert text strings into matlab serial date format
C = data{:,2} ; %// isolate your variable

之后,C中的importdata变量与time相同,但变量%% // display the results f = figure; plot( time , C , '.'); hold on plot( time , L_Tilde, 'g-.'); plot( time , U_Tilde, 'g-.'); dateFormat = 10; datetick('x',dateFormat) 中也有原始时间向量(相同长度)

然后运行您的计算代码(此处不重复,只是您编写的代码)。然后在显示时,使用:

datetick

提示:在之后使用plot指令dateFormat命令可能会重置您的勾选否则) 如上所述,这只会显示年份,但由于您导入了原始日期/时间值,您还可以选择不同的tickStep = 2 ; %// choose the number of years you want tickDates = datenum( 1996:tickStep:2008 ,1,1) ; %// creates a vector of tick positions set(gca, 'XTick' , tickDates , 'XTickLabel' , datestr(tickDates,'yyyy') ) %// set the position and label of each tick ,这也会显示月份和年份。


编辑: 根据评论完成答案。默认情况下,Matlab会自动分隔刻度线,网格线和标签,尽量不要在每个数据点添加勾号来重载图形。如果要覆盖此行为并控制刻度线的确切间距或位置,则必须告诉Matlab将它们放在何处。

为此,我们将根据您的喜好定义一个日期向量,然后告诉matlab仅在这些位置绘制刻度。

1

您可以将年份步骤更改为datetick或任何看起来适合您身材的内容。如果你这样做,请忘记上面解决方案中的最后两行代码。我们不需要再使用XTickLabel,因为我们在强制其位置的同一行设置了刻度线(XTick)(通过设置{{1}})。

如果要修改输出格式,请查看不同的datestr format

答案 1 :(得分:1)

除了AnonSubmitter85的评论之外,我想说你必须在生成情节后使用函数datetick。我认为您需要采取的步骤是:

  1. 使用importdata将日期数据导入为字符串单元格。
  2. 通过将该单元格数组传递给datenum函数来创建一个串行时间向量:

      
        

    datevect = datenum(cellofdatestrings,' yyyy-mm')

  3.     
  4. 调用绘图功能:        情节(datevect,ydata)
  5.     
  6. 将日期字符串应用于轴的刻度线        datetick(' x',' yy-mm')
  7.