不同数据类型的 matlab plot(x,y)

matlab plot(x,y) of different data type

我得到了作为元胞数组导入的不同类型的数据 (2945 * 3)。第一列数据类型已导入为文本(时间,例如 1/1/1990),而第二列和第三列是数字。

到目前为止,我使用 cell2mat 将第 2 列和第 3 列转换为双倍。因此 plot(y) 有效 {y 是第二列或第三列数据},但是我想知道如何处理第一列中的文本数据类型以尝试使用 plot(x,y)。

如有任何想法,我们将不胜感激。干杯

    --------sample.csv-------------
   Date        LAST       Rt
   1/27/2018    20       0.234556
   1/26/2019    20.05   0.184556
   1/23/2040    20.1    0.134556
   1/22/1990    20.15   0.084556
   1/21/1991    20.2    0.034556
   1/20/1993    20.25   -0.015444
   1/19/1998    20.3    -0.065444
   1/16/2050    20.35   -0.115444
   1/15/2030    20.4    -0.165444

--------cell array appearance------------
      1          |    2     |  3
1|   '1/27/2018'   20        0.234556
2|  '1/26/2019'    20.05     0.184556
3|  '1/23/2040'    20.1      0.134556
4|  '1/22/1990'    20.15     0.084556
5|  '1/21/1991'    20.2      0.034556
6|  '1/20/1993'    20.25     -0.015444
7|  '1/19/1998'    20.3      -0.065444
8|  '1/16/2050'    20.35     -0.115444
9|  '1/15/2030'    20.4      -0.165444

您可以使用 XTickXTickLabel。前者将设置你想要在 X 轴上的位置和数量(我想你会想要每个 X 数据一个,但你也可能想要跳 10 x 10)。第二个将在这些刻度位置设置标签。如果标签小于刻度,它们会重复,所以要小心。

举个例子:

x = [0 1 2 3];
y = [2 0 1 1];
plot (x, y);

yourstrings={'Banana', 'T', 'Potato', '45'};
set(gca,'XTick',x(1):x(end))
set(gca,'XTickLabel',yourstrings)

第二种选择是使用 text。你可以把文字放在情节中任何你喜欢的地方。我再举例说明一下。当然我并不是想把它写成 "nice",但是如果 you/d 喜欢,你可以尝试偏移文本的位置等等以获得更多 "beautiful" 的情节.

x = [0 1 2 3];
y = [2 0 1 1];
plot (x, y);

yourstrings={'Banana', 'T', 'Potato', '45'};
for ii=1:length(yourstrings)
    text(x(ii),y(ii),yourstrings{ii})
end

您还可以使用 datenum 将文本转换为日期序列号(从 Octave 命令行复制):

>> test
test =
{
  [1,1] = 1/1/2000
  [1,2] = 1/2/2001
  [1,3] = 10/2/2001
  [1,4] = 10/3/2001
  [1,5] = 10/3/2005
}
>> x_dates = cellfun('datenum',test(:,1))
x_dates =

   730486   730853   731126   731127   732588
>> y = rand(size(x_dates));
>> plot(x_dates,y)
>> datetick('x','dd/mm/yyyy')

更新:

看起来 cellfun 需要 MATLAB 中的函数句柄,因此您可能需要执行如下操作:

x_dates = cellfun(@datenum,test(:,1))

您可以使用 cellfun 函数循环遍历您的矩阵 (:,1) 来转换字符串,从而创建一个包含可用数据的新矩阵(或重写您当前的矩阵)。

或者只是为了绘制:

plot(cellfun(@(x)str2double(x), Measures(:,i)))

其中 i = 1:长度(矩阵)