我有一个 data file ,其中有3列,第一列是数据字段,或者您可以说其他索引。第二列是x轴数据,第三列是y轴数据。现在,我为不同的变量(例如8个文件)提供了类似的数据文件。我想在MATLAB中将所有图形绘制成一个图形。对于我的问题,我仅显示一个子图。该子图数据文件应为5个索引(第1列)绘制5个“线图”。但是当我将其绘制为子图时,它仅显示1个图。这是下面的代码:
% 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
当我将数据绘制成一个完整的数字时,该图是完美的。但是由于要在一个图中作为子图绘制大量数据,所以我需要知道子图代码中有什么问题。
这是我的整个数据图形的代码,没有子图
在绘制代码之前,它与之前相同:
% 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
子图中的绘图代码有什么问题?有人可以帮我吗?
答案 0 :(得分:1)
这是您的命令顺序及其作用:
f = figure;
创建一个空图,此处尚未定义轴。
cla
清除当前轴,因为没有当前轴,它将创建一个。
hold on
在当前轴上设置“保持”属性
grid on, box on
设置当前轴的其他一些属性
ax1 = subplot(2,4,1,'Parent',p);
创建新轴。因为它覆盖了先前创建的轴,所以这些轴将被删除。
plot(xData(idx,1),yData(idx,1))
绘制当前轴(即由subplot
创建的轴)。这些轴未设置“保持”属性,因此后续的plot
命令将覆盖此处绘制的数据。
作为suggested by Ander in a comment的解决方案是设置subplot
创建的轴的“保持”属性。替换:
cla; hold on; grid on, box on;
ax1 = subplot(2,4,1,'Parent',p);
具有:
ax1 = subplot(2,4,1,'Parent',p);
hold on; grid on, box on;
(请注意,cla
不是必需的,因为您将绘制到一个新的空白图形)。