Matrix data plot

I have 4 vectors, x1,y1,x2,y2. where x1 and y1 represent starting points and x2 and y2 are end points of lines, which I want to plot. Each i-th pair [x1(i), y1(i) x2(i) y2(i)] represents new separated line.
I would like to execute the plotting with a single plot command. I plot my data with set(h1,'xdata',...,'ydata',...) command for speed optimization. Is it possible to execute the plotting with a single plot command ?
I appreciate your help!

 Réponse acceptée

the cyclist
the cyclist le 20 Jan 2012

1 vote

The best way is to use x and y as data sources. I don't have much experience with this, but here is a working example. I tried to initialize with (0,0) or empty sets for x and y, but that choked for reasons that I do not understand. Maybe this will get you started, though.
x1 = rand(8,1);
x2 = rand(8,1);
x = [x1 x2]';
y1 = rand(8,1);
y2 = rand(8,1);
y = [y1 y2]';
figure
h = plot(x,y,'XDataSource','x','YDataSource','y');
for np = 1:10,
x1 = rand(8,1);
x2 = rand(8,1);
x = [x1 x2]';
y1 = rand(8,1);
y2 = rand(8,1);
y = [y1 y2]';
refreshdata(h,'caller')
drawnow
pause(0.5)
end

1 commentaire

Gustl
Gustl le 20 Jan 2012
Cyclist, thank you very much for your help ! Works like a charm!

Connectez-vous pour commenter.

Plus de réponses (3)

the cyclist
the cyclist le 20 Jan 2012

0 votes

Does this do what you mean?
x1 = rand(8,1);
x2 = rand(8,1);
y1 = rand(8,1);
y2 = rand(8,1);
plot([x1 x2]',[y1 y2]')
Gustl
Gustl le 20 Jan 2012

0 votes

Thank you very much for the answer. Yes, this does exactly what I want to do. But the problem is, if I want to make the plot faster by setting the data to the plot handle, it reports "Value must be a column or row vector"..
So this is my code:
figure
h1=plot(0,0,'r-');hold on;
x1 = rand(8,1);
x2 = rand(8,1);
y1 = rand(8,1);
y2 = rand(8,1);
plot([x1 x2]',[y1 y2]'); %this does what i want to do
set(h1,'xdata',[x1 x2]','ydata',[y1 y2]') % this doens't work
Any ideas?
Gustl
Gustl le 20 Jan 2012

0 votes

I've also tried by assigning the variable to the properties "xdatasource" and "ydatasource" by using
h1=plot(0,0,'r-');
x1 = rand(8,1);
x2 = rand(8,1);
y1 = rand(8,1);
y2 = rand(8,1);
xx=[x1 x2]';yy=[y1 y2]';
set(h1,'xdatasource','xx','ydatasource','yy');
refreshdata;
...but still without success...Is it somehow possible to get the this work?

1 commentaire

Sean de Wolski
Sean de Wolski le 20 Jan 2012
h = plot([x1 x2]',[y1 y2]')
You will see that h is a vector with a handle to each line data point. You could manually set the xdata/ydata for each line, this would likely be fast.
I would use a for-loop to generate n lines, each with it's own xdata/ydata.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Line Plots dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by