# Plotting Selected Items from a List

61 views (last 30 days)
autumn on 5 Jun 2019
Commented: Geoff Hayes on 6 Jun 2019
I have been trying to figure out how I can plot one or more items that the user chooses from a list. I have 22 items in total that each have their own specific plots. Is there any way I can do this? So far, I have used listdlg() and if-else statements, but that only works if I only want to plot one item.

autumn on 5 Jun 2019
I'm pulling the coordinates (x,y,z) from a 1x22 structure. I don't get an 'error' in my code if I attempt to plot multiple things, but nothing is plotted. If I select one object from my list, I can still plot it. I hope that makes more sense.
And [objects] is a 1x2 double, defined as [1,8] by my workspace.
Star Strider on 5 Jun 2019
Consider using the any function:
any(objects == 1)
Geoff Hayes on 5 Jun 2019
Since objects is a 1x2, does that mean you have selected the first and eigth item in the list box? How are you then extracting the coordinates from the structure? Please show the code to do this.

Geoff Hayes on 5 Jun 2019
Edited: Geoff Hayes on 5 Jun 2019
autumn - try the following
[objects] = listdlg('ListString',... % my 22 objects are inserted here
'PromptString','Select an item:',...
'SelectionMode','multiple',...
'OKString','Plot',...
'CancelString','Exit');
for k = 1:length(objects)
index = objects(k);
% get the coordinates for this object
plot3(coordinates);
hold on;
end
The above code will iterate over each selection (index) that you have selected in the list. The coordinates for that selection will be drawn and then, using hold on be retained when you try to draw the next selection.
Or you could combine your coordinates (from each selected object) in such a way that you just call plot3 once with the combined coordinates for the X, Y, and Z. See plot3 for details.

Geoff Hayes on 5 Jun 2019
in this code
for k = 1:length(objects)
index = objects(k);
% get the coordinates for this object
plot3(coordinates);
hold on;
end
objects is an array of one or more indices depending upon the items you have selected from your list. The length(objects) tells us the number of items that you have selected. We iterate over each one and obtain the index for each. Your code will then do something with that index, accessing something from your struct. If I use your code as a guide, then this would become
for k = 1:length(objects)
index = objects(k);
% get the coordinates for this object
plot3(id(index).pos(x),id(index).pos(y),id(index).pos(z))
hold on;
end
I'm not sure what your code means by pos(x) or pos(y) etc. Presumably that extracts the x and y and z coordinates (I just don't know the data type for these variables - integers?).
autumn on 5 Jun 2019
I got everything to work! Thank you so much for all of your help!
Geoff Hayes on 6 Jun 2019
You're welcome! :)

R2019a

### Community Treasure Hunt

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

Start Hunting!