Manually adding plots and legends with a Button Press
Afficher commentaires plus anciens
I have a button call back that I want to plot a set of data in a particular colour and add the legend. I then want to be able to press the button and each time a different data set is plotted in a different colour and its legend text to match the colour.
I First count the number of times the button has been pressed (its initially set to 1)
nplts=getappdata(0,'NominalPlotcount')
%Then I define the colour of my plot depending on this value.
nplts=getappdata(0,'NominalPlotcount')
switch nplts
case 1
colour='r'
case 2
colour='b'
case 3
colour='g'
case 4
colour='k'
otherwise
colour='r'
end
I then perform the plot and increment my plot counter nplts, and add the legend.
plot(x,N(:,1),colour,'MarkerSize', 4, 'Marker','o','LineWidth',1)
legText=get(handles.editLegend,'String');
legend(legText)
setappdata(0,'NominalPlotcount',nplts+1);
My legend doesn't concatenate to whats already there. I have tried
txt1=get(legend(gca),'String');
txt1=[txt1,legText];
hleg=legend(txt1);
But this just adds all the legend items in a single colour. Im really stuck now, any suggestions please?
Thanks Jason
Réponses (2)
Ingrid
le 6 Mai 2015
if I understand your question correctly this should work, since you need to be placing brackets around each legend entry for matlab to interpret it is separate entries and hence assign a different colour
txt1=get(legend(gca),'String');
txt1=['''' txt1 '''' ',' '''' legText '''']
eval(['hleg=legend(' txt1 ')']);
6 commentaires
Ingrid
le 6 Mai 2015
because ' is required to define a string so you need two ' to define an apostrophe in a string and you need one apostrophe before and one after to define that it is a string (I know, complicated, but that's the way to work with strings in Matlab)
the error of cell type is probably because you get txt1 from the current legend. I think it is better if you store the txt1 each time in the handles structure so that you can use the correct format
so
txt1 = handles.txt1; % for this you first need to initialize an empty txt1 in the OpeningFcn of your gui
txt1=['''' txt1 '''' ',' '''' legText ''''];
eval(['hleg=legend(' txt1 ')']);
handles.txt1 = txt1;
% Update handles structure
guidata(hObject, handles);
Jason
le 6 Mai 2015
you are still getting the current legend for txt1 (second line in your code) instead of using
txt1 = handles.tx1;
to set the value of txt1;
also it is not clear how you obtain the legText, is this from an editText field or is it a user defined field?
Joseph Cheng
le 6 Mai 2015
why not try something like this out
clc; clear all;
nplts = 0;
legendstr = [];
figure(1),hold on;
cont = input('plot another rand plot?: ','s');
while ~isempty(cont)
nplts = nplts+1;
switch mod(nplts,5)
case 1
colour='r'
case 2
colour='b'
case 3
colour='g'
case 4
colour='k'
otherwise
colour='r'
end
plot(randi(1000,1,100),colour),legend('show');
hlegend = findobj(gcf,'Type','axes','Tag','legend');
legendstr = [legendstr;['another plot ' num2str(nplts)]];
% legendstr =get(legend(gca),'String');
legend(legendstr)
cont = input('plot another rand plot?: ','s');
end
2 commentaires
Jason
le 7 Mai 2015
Joseph Cheng
le 7 Mai 2015
well you would then convert what you want into a cell array which is a few edits to the example code of:
legendstr = {}; %note the { brackets
%and then down below
legendstr(nplts) = %user input text;
Catégories
En savoir plus sur Legend 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!
