I want to open a tab-delimited XY text file in matlab, use the numerical values of the XY columns to create a matrix and plot the signal.
25 views (last 30 days)
Show older comments
Erwin Arias Hervert
on 13 Dec 2022
Commented: Erwin Arias Hervert
on 14 Dec 2022
I have a tab-delimited text file with two columns: time and voltage. I'd like to open the file in matlab and put the data into a matrix (n x 2) to make an XY scatter plot. So far, I am able to open and read the file, create the matrix and initialize variables, but I'm struggling to find a way to put the data into the matrix.
Here is what I have:
% pointer to the file
fid = fopen("AxographSampleData\220812_WT_MO_H134R_EA_1391 015.txt","r");
% first line contains headers
headers = regexp( fgetl(fid) ,'\t','split');
timestamp = headers{1};
membrvolt = headers{2};
%% reads data from file and creates a matrix
% initialize matrix
nColumns = 2;
nRows = 40000;
data = zeros(nRows,nColumns);
% set a toggle switch and begin while loop
toggle = true;
while toggle
% get a line of tab-delimited data
aline = regexp( fgetl(fid), '\t','split');
% check whether we are at the end of data
if strcmpi(aline(1,2),'\s')
toggle = false;
else
% put the data point into the matrix at the appropiate position
end
end
I was following an example using a text file with six columns. What they did was to put the value of the 6th column in the matrix using columns 2 and 4 as indexes for data(rows,cols) with the following line of code:
% put the data point into thr matrix at the appropiate position
data(str2double(aline{2}), str2double(aline{4})) = str2double(aline{6});
But when I change the code to match the structure of my text file like this:
% put the data point into thr matrix at the appropiate position
data(str2double(aline{1})) = str2double(aline{2})
I get the following error message "Index in position 1 is invalid. Array indices must be positive integers or logical values".
Does anyone know how to fix this error? The text file is attached for reference.
Thanks in advance.
Erwin
0 Comments
Accepted Answer
millercommamatt
on 13 Dec 2022
fid = fopen("AxographSampleData\220812_WT_MO_H134R_EA_1391 015.txt","r");
C = textscan(fid,'%f %f',"Delimiter",'\t','HeaderLines',1);
fclose(fid);
Sec_voltage_array = [C{1},C{2}];
% check out the textscan documentation in you want to import the seconds
% column as a duration and not a float
More Answers (1)
Les Beckham
on 13 Dec 2022
T = readtable('https://www.mathworks.com/matlabcentral/answers/uploaded_files/1230202/220812_WT_MO_H134R_EA_1391%20015.txt')
scatter(T.Time_s_, T.MembraneVoltage_1_V_)
grid on
xlabel 'Time (s)'
ylabel 'Membrane Voltage 1 (V)'
In my opinion this looks better as a regular plot instead of a scatter plot.
figure
plot(T.Time_s_, T.MembraneVoltage_1_V_)
grid on
xlabel 'Time (s)'
ylabel 'Membrane Voltage 1 (V)'
See Also
Categories
Find more on Annotations in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!