Plot several signals but I want nudging or not overlap between them
8 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Milagros ARIETTI
el 25 de Nov. de 2015
Comentada: Milagros ARIETTI
el 26 de Nov. de 2015
Hello,
I have ERG responses, different traces to graph in a Excel file. I have the time in seconds and in different sheets the data for 10 different intensities. I want to graphs all the intensities in the same plot, but they overlap. I want to put offset or a nudging but I can´t make it work. Here is the code I run.
filename = 'C:\Users\Milagros\Desktop\24 Hs\meangraphs.xls';
time = xlsread(filename,1,'A1:A512');
y1 = xlsread(filename,2,'A1:A512');
y2 = xlsread(filename,2,'B1:B512');
y3 = xlsread(filename,2,'C1:C512');
y4 = xlsread(filename,2,'D1:D512');
y5 = xlsread(filename,2,'E1:E512');
y6 = xlsread(filename,2,'F1:F512');
y7 = xlsread(filename,2,'G1:G512');
y8 = xlsread(filename,2,'H1:H512');
y9 = xlsread(filename,2,'I1:I512');
y10 = xlsread(filename,2,'J1:J512');
hold on
plot(time,[y1,y2,y3,y4,y5,y6,y7,y8,y9,y10]);
hold off
What I get in fig 1 and what I want is in fig 2.
2 comentarios
Thorsten
el 25 de Nov. de 2015
Editada: Thorsten
el 25 de Nov. de 2015
You didn't ask for it, but you could probably make your life easier if you store the data in a single variable
ranges = 'A':'J';
for i=1:numel(ranges)
range = sprintf('%c1:%c512', ranges(i), ranges(i));
Y(:,i) = xlsread(filename,2,range);
end
Respuesta aceptada
Mike Garrity
el 25 de Nov. de 2015
There are a couple of approaches.
If you want to put all of the plots in the same axes, then they're going to share the same Y scale. This means that to offset them, you need to actually modify their YData. That's actually pretty easy. Let's say youre starting with this:
theta = linspace(0,2*pi,400);
y1 = cos(theta);
y2 = cos(2*theta);
y3 = cos(3*theta);
y4 = cos(4*theta);
plot(theta,y1)
hold on
plot(theta,y2)
plot(theta,y3)
plot(theta,y4)
hold off
You'd just do something like this:
plot(theta,y1)
hold on
plot(theta,y2+2)
plot(theta,y3+4)
plot(theta,y4+6)
hold off
But then you need to manage the offsets yourself, and the YData and YTick values aren't "real".
The other way is to create separate Y scales. The plotyy function can create 2, but you want more than that, so you'll need to create your own axes. This requires a bit of bookkeeping. You need to do things like turn off the XTicks which would overlap other axes.
h = .815/4;
a1 = axes('Position',[.13 .11 .775 h])
plot(theta,y1)
a2 = axes('Position',[.13 .11+h .775 h])
plot(theta,y2)
a3 = axes('Position',[.13 .11+2*h .775 h])
plot(theta,y3)
a4 = axes('Position',[.13 .11+3*h .775 h])
plot(theta,y4)
set([a1, a2, a3, a4],'Box','off')
set([a2, a3, a4],'XTick',[])
2 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Axis Labels en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!