我正在尝试创建一个从文本文件中读取数据的脚本,并将数据绘制到散点图上。
例如,假设文件名是prices.txt并包含:
Pens 2 4
Pencils 1.5 3
Rulers 3 3.5
Sharpeners 1 3
Highlighters 3 4
第2列和第3列是两个不同商店的商品价格。
我的脚本应该做的是读取价格,计算(使用其他功能)商店的未来价格,并将这些价格绘制到散点图上,其中x是一个商店,y是另一个商店。这是一个我知道的愚蠢的例子,但它符合描述。
不要太担心进行计算的其他函数,只是假设它做了它应该做的事情。
基本上,我想出了以下内容:
pricesfile = fopen('Prices.txt');
prices = textscan(pricesfile, '%s %d d');
fclose(pricesfile);
count = 1;
while count <= length(prices{1})
for item = constants{1}
name = constants{1}{count};
store_A = prices{2}{count};
store_B = prices{3}{count};
(...other function goes here...)
end
end
这样做之后,我完全卡住了。我在这背后的思考过程是遍历每个项目名称,并创建一个分配给该名称的向量,其中两个对应的价格作为向量中的项目,例如:
pens = [2 4]
pencils = [1.5 3]
等。然后,我会以某种方式在散点图上绘制矢量中的那些项目,并使用矢量名称作为标签。
我不太确定如何执行我的其余代码,或者即使我写的内容也会让我找到解决方案。
请提前帮助和谢谢。
答案 0 :(得分:2)
pricesfile = fopen('Prices.txt');
data = textscan(pricesfile, '%s %d d');
fclose(pricesfile);
你是在正确的轨道上,但在此之后(通过一些hackery)你实际上并不需要循环:
plot(repmat(data{2},1,2)', repmat(data{3},1,2)', '.')
legend(data{1})
您不想做的是创建以字符串命名的变量。而是将它们存储在具有名称数组的数组中(这基本上就是您的textscan
代码为您提供的)。 Matlab非常擅长处理矩阵/数组。
您还可以将price
数组拆分为例如:
names = prices{1};
prices = [data{2:3}];
现在你可以很容易地对价格进行计算 prices_cents =价格* 100;
plot(prices_cents(:,[1,1]), prices_cents(:,[2,2]))
legend(names)
请注意,上面的[1,1]
等只是使用索引作为实现repmat
所做的简写...