## Plotting Selected Items from a List

### autumn (view profile)

on 5 Jun 2019
Latest activity Commented on by Geoff Hayes

on 6 Jun 2019

### Geoff Hayes (view profile)

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

### autumn (view profile)

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

### Star Strider (view profile)

on 5 Jun 2019
Consider using the any function:
any(objects == 1)
Geoff Hayes

### Geoff Hayes (view profile)

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.

R2019a

### Geoff Hayes (view profile)

on 5 Jun 2019
Edited by Geoff Hayes

### Geoff Hayes (view profile)

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

### Geoff Hayes (view profile)

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

### autumn (view profile)

on 5 Jun 2019
I got everything to work! Thank you so much for all of your help!
Geoff Hayes

### Geoff Hayes (view profile)

on 6 Jun 2019
You're welcome! :)