MATLAB Answers

autumn
0

Plotting Selected Items from a List

Asked by autumn
on 5 Jun 2019
Latest activity Commented on by 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.

  6 Comments

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.
Consider using the any function:
any(objects == 1)
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.

Sign in to comment.

1 Answer

Answer by Geoff Hayes
on 5 Jun 2019
Edited by Geoff Hayes
on 5 Jun 2019
 Accepted Answer

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.

  6 Comments

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?).
I got everything to work! Thank you so much for all of your help!
You're welcome! :)

Sign in to comment.