aguntuk
aguntuk

Reputation: 127

Graphs is not plotting properly in the subplot in MATLAB

I have I have a data file which has 3 columns, 1st column is the field for the data, or you can say different index. 2nd column is the x-axis data, and the 3rd column is the y-axis data. Now I have similar data files for different variables like 8 files. I want to plot all the graph in one figure in MATLAB. For my problem, I am showing only one subplot. This subplot data file should plot 5 "line plots" for 5 indexes (1st column). But when I plot it as subplot it shows only 1 plot. here is my code in the below:

% open Zdiff Odd Mode data file
fid = fopen('Data_test.txt');
% Read data in from csv file
readData = textscan(fid,'%f %f %f','Headerlines',1,'Delimiter',',');
fclose(fid);

% Extract data from readData
index_Data = readData{1,1}(:,1);
% Identify the unique indices
uni_idx=unique(index_Data);
xData = readData{1,2}(:,1);
yData = readData{1,3}(:,1);


% Plot Data
f = figure;
%Top Title for all the subplots
p = uipanel('Parent',f,'BorderType','none'); 
p.Title = 'Electrical Characteristics'; 
p.TitlePosition = 'centertop'; 
p.FontSize = 14;
p.FontWeight = 'bold';

cla; hold on; grid on, box on;

ax1 = subplot(2,4,1,'Parent',p);
% Loop over the indices to plot the corresponding data
for i=1:length(uni_idx)
   idx=find(index_Data == uni_idx(i));
   plot(xData(idx,1),yData(idx,1))
end

The plot results like below: enter image description here

When I plot the data as a full figure, the plot is perfect. But as I have lots of data to plot in one figure as subplots, I need to know what is wrong in my subplot code.

Here is my code for the whole figure of the data without the subplot

Before plotting code it is same as before:

% Plot Data
f1 = figure(1);
cla; hold on; grid on;

% Loop over the indices to plot the corresponding data

for i=1:length(uni_idx)
   idx=find(index_Data == uni_idx(i));
   plot(xData(idx,1),yData(idx,1))
end

The resulting figure is below: enter image description here

What is wrong with my plotting code in the subplot? Can anyone help me out?

Upvotes: 1

Views: 755

Answers (1)

Cris Luengo
Cris Luengo

Reputation: 60444

This is your sequence of commands, and what they do:

f = figure;

Creates an empty figure, there are no axes yet defined here.

cla

Clears the current axes, since there is no current axes, it creates one.

hold on

Sets the "hold" property on the current axes

grid on, box on

Sets some other properties of the current axes

ax1 = subplot(2,4,1,'Parent',p);

Creates new axes. Because it overlays the previously created axes, those are deleted.

plot(xData(idx,1),yData(idx,1))

Plots to the current axes (i.e. the one created by subplot). These axes don't have the "hold" property set, so subsequent plot commands will overwrite the data plotted here.

The solution, as suggested by Ander in a comment, is to set the "hold" property of the axes created by subplot. Replace:

cla; hold on; grid on, box on;
ax1 = subplot(2,4,1,'Parent',p);

with:

ax1 = subplot(2,4,1,'Parent',p);
hold on; grid on, box on;

(note that cla is not necessary, since you're drawing to a new, empty figure).

Upvotes: 1

Related Questions