Octave - 从 csv 格式文件读取的数据创建绘图时出错

问题描述 投票:0回答:1

我有一个 CSV 格式的文本文件,如下:

name,mi,km,sp
Aa,2.6,4.1843024285,3
Bb,12.7,20.4387080162,5
Cc,104,167.3720971402,9
Dd,8816,14188.0039268069,40
Ee,11669,18779.4711685469,39
Ff,77793,125195.93800795,84
Gg,103723,166926.307996846,76

第一列是字符串类型,第二列和第三列是实数,第四列是整型数字。

我使用以下脚本来读取数据:

pkg load io
data = csv2cell("data.csv", 1)
sp = data(:,4) % Read 'sp' colunm

它看起来读起来很好,但是当我尝试使用“sp”变量中的数据创建条形图时,使用命令 bar(sp) 我收到错误:

error: bar: Y must be numeric

csv2cell 函数不是应该能够读取混合类型的数据吗?但读取后是否需要将数据转换为各自的值呢?如果是这样,我该怎么做?

预先感谢您提供的任何帮助。

编辑:尝试类似的事情

sn = str2num(sp) 

也没有帮助,因为在这种情况下我收到了消息:

error: str2num: S must be a string or string array

然后我尝试使用

datan = str2double(data)

刚刚返回了一个 NaN 矩阵

我还是很茫然。

csv octave
1个回答
0
投票

查看您正在创建的数据总是有帮助的。

使用相同的数据集,我看到:

pkg load io
data = csv2cell('data.csv',1)
data =
{
  [1,1] = Aa
  [2,1] = Bb
  [3,1] = Cc
  [4,1] = Dd
  [5,1] = Ee
  [6,1] = Ff
  [7,1] = Gg
  [1,2] = 2.6000
  [2,2] = 12.700
  [3,2] = 104
  [4,2] = 8816
  [5,2] = 11669
  [6,2] = 77793
  [7,2] = 103723
  [1,3] = 4.1843
  [2,3] = 20.439
  [3,3] = 167.37
  [4,3] = 1.4188e+04
  [5,3] = 1.8779e+04
  [6,3] = 1.2520e+05
  [7,3] = 1.6693e+05
  [1,4] = 3
  [2,4] = 5
  [3,4] = 9
  [4,4] = 40
  [5,4] = 39
  [6,4] = 84
  [7,4] = 76
}

sp = data(:,4)
sp =
{
  [1,1] = 3
  [2,1] = 5
  [3,1] = 9
  [4,1] = 40
  [5,1] = 39
  [6,1] = 84
  [7,1] = 76
}

请注意,您创建的不是数值数组。这是一个元胞数组。要将 sp 转换为数值数组,您可以使用

cell2mat
:

>> sp = cell2mat(sp)
sp =

    3
    5
    9
   40
   39
   84
   76

现在

bar(sp)
应该可以正常工作了。

© www.soinside.com 2019 - 2024. All rights reserved.