Verfasst am: 07.05.2015, 12:40
Titel: Umgang mit set(gca,prop,value)... Problem mit XTickLabel
Hallo zusammen,
bin gerade mal wieder am verzweifel...
Ich habe innerhalb eines GUIs 3 verschiedene bar plots erstellt, die je nach Dateninput bis zu 5 bars mit unterschiedlichen Farben darstellen sollen. Unterhalb der bars sollen verschiedene Materialnamen anstelle von 1,2,3... stehen.
Hier eine kurze Erklärung zum Code:
Code:
% handles.Data_selected ist der Input für die 3 bar plots % Daten für plot 1 --> 1. Zeile % Daten für plot 2 --> 2. Zeile % Daten für plot 3 --> 3. Zeile % Material 1 (Data1) --> 1. Spalte % Material 2 (Data2) --> 2. Spalte usw. % Die Indizes i und j werden mittels Popupmenu bestimmt, sind hier aber nicht wichtig
handles.Data_selected(:,1) = [handles.Data1.Hyst(i,j); handles.Data1.Eddy(i,j); handles.Data1.Ano(i,j)];
handles.Data_selected(:,2) = [handles.Data2.Hyst(i,j); handles.Data2.Eddy(i,j); handles.Data2.Ano(i,j)];
handles.Data_selected(:,3) = [handles.Data3.Hyst(i,j); handles.Data3.Eddy(i,j); handles.Data3.Ano(i,j)];
handles.Data_selected(:,4) = [handles.Data4.Hyst(i,j); handles.Data4.Eddy(i,j); handles.Data4.Ano(i,j)]
handles.Data_selected(:,5) = [handles.Data5.Hyst(i,j); handles.Data5.Eddy(i,j); handles.Data5.Ano(i,j)]
% Die Materialnamen fürs XTickLabel werden aus mehreren Editboxen eingelesen und in die Variable x geschrieben
x{1}= get(handles.edit1,'String');
x{2}= get(handles.edit2,'String');
x{3}= get(handles.edit3,'String');
x{4}= get(handles.edit4,'String');
x{5}= get(handles.edit5,'String')
% Da die Anzahl der Materialien variabel sein soll, benutze ich eine Schleife zum Erstellen der einzelnen bars % FaceColor wird ebenfalls innerhalb der Schleife gesetzt % Hier der Code für den 1. plot (1. Zeile von handles.Data_selected)
colors = ['b' 'g' 'r' 'c' 's'];
axes(handles.axes_Hyst);
for i=1:numel(handles.Data_selected(1,:)) bar(i,handles.Data_selected(1,i),'FaceColor',colors(i)); hold on;
end
% Nun fehlt nur noch XTickLabel, das mach ich so set(gca,'XTickLabel',[x{:}]);
Das Problem ist nun, dass das XTickLabel lediglich für den ersten Balken angezeigt wird, unter den restlichen Balken steht gar nix.
Hab deshalb auch schon versucht das XTickLabel innerhalb der Schleife zu setzen, dabei kommt allerdings eine Fehlermeldung mit der ich nicht viel anfangen kann...
Code:
for i=1:numel(handles.Data_selected(1,:)) bar(i,handles.Data_selected(1,i),'FaceColor',colors(i),'XTickLabel',[x{i}]); hold on;
end
Error using specgraph.barseries/set
The name 'xticklabel' is not an accessible property for an instance of class
'barseries'.
Error in specgraph.barseries(line64) set(h,args{:})
Error in bar(line101)
h = [h specgraph.barseries('YData',datachk(y(:,k)), ...
Error in Ergebnisvergleich>push_Starten_Callback (line278) axes(handles.axes_Hyst); for i=1:numel(handles.Data_selected(1,:));
bar(i,handles.Data_selected(1,i),'FaceColor',colors(i),'XTickLabel',[x{i}]);
hold on; end
Sieht jemand was ich falsch mache? Hab das Gefühl dass der bar plot falsch "aufgebaut" ist, sodass der set-Befehl nicht richtig funktioniert... erklären kann ichs mir aber nicht
Verfasst am: 07.05.2015, 13:07
Titel: Re: Umgang mit set(gca,prop,value)... Problem mit XTickLabel
Hallo Sporisha,
Neben den XTickLabels solltest Du noch die XTicks passend dazu definieren.
[x{:}] fügt alle Elemente aus X als einen String zusammen. Du mächtest aber unterschiedliche Strings, also einen Cell String, oder? Oder sind die Elemente von "X" wieder cell strings?
Du siehst dass "X" ein schlechter Name ist. "NamesCStr" wäre sinnvoller.
Das Hauptproblem steht aber in der Fehlermeldung:
Zitat:
Error using specgraph.barseries/set
The name 'xticklabel' is not an accessible property for an instance of class
'barseries'.
Du musst die XTickLabel des AXES-Objektes setzen, nicht die des BARSERIS Objektes.
Also deine Hilfestellung zur Fehlermeldung leuchtet mir halbwegs ein... umsetzen kann ich das aber so nicht, dafür hab ichs dann doch nicht richtig kapiert
Es funktioniert nun aber scheinbar alles nachdem ich den XTick definiert habe Dachte der wird automatisch durch die Anzahl der Balken definiert^^
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.