WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Umgang mit set(gca,prop,value)... Problem mit XTickLabel

 

Sporisha
Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 05.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2015, 12:40     Titel: Umgang mit set(gca,prop,value)... Problem mit XTickLabel
  Antworten mit Zitat      
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 (line 64)
  set(h,args{:})

Error in bar (line 101)
                h = [h specgraph.barseries('YData',datachk(y(:,k)), ...

Error in Ergebnisvergleich>push_Starten_Callback (line 278)
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

Error in gui_mainfcn (line 96)
        feval(varargin{:});

Error in Ergebnisvergleich (line 42)
    gui_mainfcn(gui_State, varargin{:});

Error in
@(hObject,eventdata)Ergebnisvergleich('push_Starten_Callback',hObject,eventdata,guidata(hObject))

 
Error while evaluating uicontrol Callback
 



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 Confused
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.05.2015, 13:07     Titel: Re: Umgang mit set(gca,prop,value)... Problem mit XTickLabel
  Antworten mit Zitat      
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.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Sporisha
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 05.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2015, 13:57     Titel:
  Antworten mit Zitat      
Genau Smile
Code:
iscellstr(x) = 0
iscellstr(x{1}) = 1



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 Laughing


Es funktioniert nun aber scheinbar alles nachdem ich den XTick definiert habe Smile Dachte der wird automatisch durch die Anzahl der Balken definiert^^
Code:
set(gca,'XTick',[1,2,3,4,5]);
set(gca,'XTickLabel',[x{:}]);



Vielen Dank für die schnelle und einfache Lösung, das hab ich nicht erwartet! Very Happy


edit: noch eine kleine Anpassung, da sonst die Anzahl der XTickLabel nicht zur Anzahl der Balken passt Smile
Code:
xtic = 1:1:numel(handles.Data_selected(1,:))
set(gca,'XTick',xtic);
set(gca,'XTickLabel',[x{:}]);
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.05.2015, 15:52     Titel:
  Antworten mit Zitat      
Hallo Sporisha,

Noch ein kleiner Tipp:
Code:
xtic = 1:1:numel(handles.Data_selected(1,:))

Effizienter, weil nicht erst handles.Data_selected(1,:) erzeugt wird:
Code:
xtic = 1:size(handles.Data_selected, 2)

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.