Plot two graphs in the same figure, that have different number of points from text file

23 vues (au cours des 30 derniers jours)
Hello,
I am trying to plot 2 graphs in the same figure, but I am having a problem as the two datasets contain different number of points. How can I plot the graphs in the same figure but in different plots. That is, plot a will have (col 1, col2), plot 2 will have (col3, col4).
Here is what I have so far:
clear;
clc;
[FileName,PathName] = uigetfile('*.txt','Select data file');
fid = fopen( strcat(PathName,FileName) ,'rt' );
% Read the file and store into matrix v
i = 0;
v = [0 0];
while feof(fid) == 0
buffer = fscanf(fid, '%f', 4);
buffer = buffer';
if i == 0;
v = buffer;
else
v = vertcat(v,buffer);
end
i = i + 1;
end
% Frequency vector
freq1 = v(:,1);
freq2 = v(:,3);
% Phase noise vector
spectrum1 = v(:,2);
spectrum2 = v(:,4);
subplot(1, 2, 1);
plot(freq1,spectrum1);
ax.XTick = [380.0145:380.0345:.1];
grid on; axis([380.0145 380.0345 -130 -10]);
title('Silent Carrier (No Modulation)');
xlabel('Frequency (MHz)'); ylabel('Amplitude');
subplot(1, 2, 2);
semilogx(freq2,spectrum2)
grid on;
title('SSB Spectrum with 1kHz Tone');
xlabel('Frequency Offset (Hz)'); ylabel('Phase Noise (dBc/Hz)');
return

Réponse acceptée

Star Strider
Star Strider le 21 Oct 2015
I’m not sure what you mean by ‘different plots’. Here, figure(1) uses the subplot function, and figure(2) uses the hold function. One of these should work for you:
fidi = fopen('data_mod.txt', 'rt');
vc = textscan(fidi, '%f%f%f%f', 'CollectOutput',1);
v = cell2mat(vc);
% Frequency vector
freq1 = v(:,1);
freq2 = v(:,3) .* (~isnan(v(:,3)));
freqx = [min([freq1; freq2]) max([freq1; freq2])];
% Phase noise vector
spectrum1 = v(:,2);
spectrum2 = v(:,4) .* (~isnan(v(:,4)));
figure(1)
subplot(2,1,1)
plot(freq1, spectrum1)
axis([freqx, ylim])
grid
subplot(2,1,2)
plot(freq2, spectrum2)
axis([freqx, ylim])
grid
figure(2)
plot(freq1, spectrum1)
hold on
plot(freq2, spectrum2)
hold off
axis([freqx, ylim])
grid

Plus de réponses (1)

dpb
dpb le 21 Oct 2015
Modifié(e) : dpb le 21 Oct 2015
Try
[f1 s1 f2 s2]=textread('data_mod.txt','%f %f %f %f');
f2(f2==0)=nan; s2(s2==0)=nan;
subplot(2,1,1),plot(f1,s1)
subplot(2,1,2),plot(f2,s2)
You can even by the above do
figure
plot([f1 f2], [s1 s2])
because there are the same number of points; simply NaN for the shorter series which plot and friends smartly ignore.
If you only care about treating the two separately, then instead of NaN you can simply shorten the second via--
f2(f2==0)=[]; s2(s2==0)=[];
"Salt to suit" the labels axes limits and all, of course...

Catégories

En savoir plus sur Graphics Performance dans Help Center et File Exchange

Tags

Produits

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by