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

xlabel und ylabel

 

furkan-karatas
Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 11.08.15
Wohnort: München
Version: ---
     Beitrag Verfasst am: 11.08.2015, 12:45     Titel: xlabel und ylabel
  Antworten mit Zitat      
Hallo,

ich habe über ein Pushbutton eine Excel-Datei eingelesen.
In 2 Popupmenüs werden dann sofort die Spaltennamen der Excel-Datei angezeigt.
Je nachdem was angeklickt wird, wird es als 2-D geplotet.

Ich möchte die zwei ausgewählten Spaltennamen, die geplotet werden auch als Achsenbeschriftung verwenden. Wie funktioniert das?

Mein Code sieht folgendermaßen aus:

Code:
function Lade_xls_Callback(hObject, eventdata, handles)

handles.fileName = uigetfile('*.xlsx')
guidata(hObject, handles)
 
 setPopupmenuString(handles.popupmenuX, eventdata, handles)
 setPopupmenuString(handles.popupmenuY, eventdata, handles)
 
 set(handles.popupmenuX, 'callback', 'Test2(''updateAxes'',gcbo,[],guidata(gcbo))')
 set(handles.popupmenuY, 'callback', 'Test2(''updateAxes'',gcbo,[],guidata(gcbo))')
 
 function setPopupmenuString(hObject, eventdata, handles)
       
 fileName = handles.fileName;
 [numbers, colNames] = xlsread(fileName);
 set(hObject, 'string', colNames);
 
 
function [x,y] = readExcelColumns(fileName, xColNum, yColNum)

a = xlsread(fileName);

x= a(:,xColNum);
y= a(:,yColNum);

function updateAxes(hObject, eventdata, handles)

xColNum  = get(handles.popupmenuX, 'value');
yColNum  = get(handles.popupmenuY, 'value');        
fileName = handles.fileName;

[x,y] = readExcelColumns(fileName, xColNum, yColNum)

plot(handles.axes1, x,y)


[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke]
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: 13.08.2015, 12:53     Titel: Re: xlabel und ylabel
  Antworten mit Zitat      
Hallo furkan-karatas,

Du liest das Excel-File jedes mal wieder ein. Ei8nmal Lesen ist viel effizienter.

Code:
function Lade_xls_Callback(hObject, eventdata, handles)

handles.fileName = uigetfile('*.xlsx')
[numbers, colNames] = xlsread(fileName);
handles.numbers = numbers;
handles.colNames = colNames;

guidata(hObject, handles);
 
 setPopupmenuString(handles.popupmenuX, eventdata, handles)
 setPopupmenuString(handles.popupmenuY, eventdata, handles)
 
 set(handles.popupmenuX, 'callback', 'Test2(''updateAxes'',gcbo,[],guidata(gcbo))')
 set(handles.popupmenuY, 'callback', 'Test2(''updateAxes'',gcbo,[],guidata(gcbo))')
 
function setPopupmenuString(hObject, eventdata, handles)
set(hObject, 'string', handles.colNames);

function updateAxes(hObject, eventdata, handles)

xColNum  = get(handles.popupmenuX, 'value');
yColNum  = get(handles.popupmenuY, 'value');        

x = handles.numbers(:, xColNum);
y = handles.numbers(:, yColNum);

plot(handles.axes1, x, y);
xlabel(handles.axes1, handles.colNames{xColNum});
ylabel(handles.axes1, handles.colNames{yColNum});

Die Verwendung von Strings als Callback ist schlecht. Besser:
Code:
set(handles.popupmenuX, 'callback', @updateAxes)

Und in updateAxes kannst Du den handles-Struct immer noch mit guidata erhalten.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 11.08.15
Wohnort: München
Version: ---
     Beitrag Verfasst am: 13.08.2015, 13:49     Titel:
  Antworten mit Zitat      
Danke für die Antwort.
Jedoch zeigt er mir die Achsenbeschriftung immer noch nicht an.

Gruß

Furkan
Private Nachricht senden Benutzer-Profile anzeigen
 
furkan-karatas
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 11.08.15
Wohnort: München
Version: ---
     Beitrag Verfasst am: 13.08.2015, 13:57     Titel:
  Antworten mit Zitat      
Mein Code sieht jetzt folgendermaßen aus:
Code:

function Daten_Laden_Callback(hObject, eventdata, handles)
% hObject    handle to Daten_Laden (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


handles.fileName = uigetfile('*.xlsx')

 [numbers, colNames] =xlsread(handles.fileName);
 handles.numbers = numbers;
 handles.colNames = colNames;
 
 guidata(hObject, handles)
 
 setPopupmenuString(handles.popupmenuX, eventdata, handles)
 setPopupmenuString(handles.popupmenuY, eventdata, handles)
 
 set(handles.popupmenuX, 'callback', 'Test2(''updateAxes'',gcbo,[],guidata(gcbo))')
 set(handles.popupmenuY, 'callback', 'Test2(''updateAxes'',gcbo,[],guidata(gcbo))')
 
[data, txt] = xlsread(handles.fileName);
assignin('base','data',data);
assignin('base','txt',txt);


% Schreibe Input in die GUI-Tabelle
set(handles.eingabe_tabelle,'data',data)

SOC=data(:,1);
SOC=unique(SOC);
temp=data(:,2);
temp=unique(temp);
pulsdauer=data(:,3);
pulsdauer=unique(pulsdauer);

% Weise Datem jeweils einem Pointer zu
handles.data=data;
handles.SOC=SOC
handles.temp=temp
handles.pulsdauer=pulsdauer
handles.txt=txt
guidata(hObject,handles)

 function setPopupmenuString(hObject, eventdata, handles)
       
 set(hObject, 'string', handles.colNames);
 
 
% function [x,y] = readExcelColumns(fileName, xColNum, yColNum)
%
% a = xlsread(fileName);
%
% x= a(:,xColNum);
% y= a(:,yColNum);

function updateAxes(hObject, eventdata, handles)

xColNum  = get(handles.popupmenuX, 'value');
yColNum  = get(handles.popupmenuY, 'value');        

x = handles.numbers(:, xColNum);
y = handles.numbers(:, yColNum);

plot(handles.axes1, x,y);
xlabel(handles.axes1, handles.colNames{xColNum});
ylabel(handles.axes1, handles.colNames{xColNum});
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: 13.08.2015, 14:12     Titel:
  Antworten mit Zitat      
Hallo furkan-karatas,

Den Base-Workspace als Zwischenlager für Daten zu verwenden ist eine tückische Idee. Bist Du ganz sicher, dass Du das brauchst?

Wieso die Achsenbeschriftungen nicht angezeigtz werden, weiß ich nicht. Verwende doch mal den debugger um herauszufinden, was in den entsprechenden Zeilen geschieht.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 11.08.15
Wohnort: München
Version: ---
     Beitrag Verfasst am: 13.08.2015, 14:16     Titel:
  Antworten mit Zitat      
Ohne den Base Workspace wüsste ich nicht, wie ich meine eingelesene Excel-Datei in einer Tabelle in gui darstellen lassen soll?
könntest du mir da helfen?
ich lass mal den Debugger durchlaufen.

Gruß

Furkan
Private Nachricht senden Benutzer-Profile anzeigen
 
furkan-karatas
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 11.08.15
Wohnort: München
Version: ---
     Beitrag Verfasst am: 13.08.2015, 14:19     Titel:
  Antworten mit Zitat      
Eine ganz doofe Frage, da ich erst seit einer Woche mich mit Matlab beschäftige.
Wie lass ich den Debuger durchlaufen?`

Vielen Dank schonmal.

Gruß

Furkan
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: 13.08.2015, 16:02     Titel:
  Antworten mit Zitat      
Hallo furkan-karatas,

Speichere die Daten lieber in der ApplicationData oder UserData der Figure. Siehe guidata und setappdata .

Zitat:
Eine ganz doofe Frage, da ich erst seit einer Woche mich mit Matlab beschäftige.
Wie lass ich den Debuger durchlaufen?

Nein, das ist eine sehr gute Frage! Der Debugger ist der beste Freund des Programmierers - sogar noch besser als dieses Forum. Smile

Du kannst auf der linken Seite im Editor-Fenster einen roten Punkt setzen mit der Maus. Dann läuft Matlab so lange, bis es an diese Zeile kommt. Nun kannst Du die Werte der lokalen Variablen im Workspace-Browser oder im CommandWindow kontrollieren (und ändern). Nun kannst Du zeilenweise durch den Code gehen, indem Du die dazugehörigen Icons in der Toolbar des Editor-Fensters benutzt (oder die entsprechenden Funktionstasten). Das Ganze ist auch in der Dokumentation prima beschrieben:
Code:
docsearch debugger


Viel erfolg, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
furkan-karatas
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 11.08.15
Wohnort: München
Version: ---
     Beitrag Verfasst am: 14.08.2015, 13:14     Titel:
  Antworten mit Zitat      
Code:
function Daten_Laden_Callback(hObject, eventdata, handles)
% hObject    handle to Daten_Laden (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

handles.fileName = uigetfile('*.xlsx')

[numbers, colNames] = xlsread(handles.fileName);
handles.numbers = numbers;
handles.colNames = colNames;

 guidata(hObject, handles)
 
 setPopupmenuString(handles.popupmenuX, eventdata, handles)
 setPopupmenuString(handles.popupmenuY, eventdata, handles)
 
 set(handles.popupmenuX, 'callback', 'Test2(''updateAxes'',gcbo,[],guidata(gcbo))')
 set(handles.popupmenuY, 'callback', 'Test2(''updateAxes'',gcbo,[],guidata(gcbo))')
 
%Daten werden in der UserData der figure gespeichert
[data, txt] = xlsread(handles.fileName);
f=figure('visible','off');
setappdata(f, 'data', data);
setappdata(f, 'txt', txt);



% Schreibe Input in die GUI-Tabelle
set(handles.eingabe_tabelle,'data',data)

SOC=data(:,1);
SOC=unique(SOC);
temp=data(:,2);
temp=unique(temp);
pulsdauer=data(:,3);
pulsdauer=unique(pulsdauer);

% Weise Datem jeweils einem Pointer zu
handles.data=data;
handles.SOC=SOC
handles.temp=temp
handles.pulsdauer=pulsdauer
handles.txt=txt
guidata(hObject,handles)

 function setPopupmenuString(hObject, eventdata, handles)
       
 set(hObject, 'string', handles.colNames);
 
 
% function [x,y] = readExcelColumns(fileName, xColNum, yColNum)
%
% a = xlsread(fileName);
%
% x= a(:,xColNum);
% y= a(:,yColNum);

function updateAxes(hObject, eventdata, handles)

xColNum  = get(handles.popupmenuX, 'value');
yColNum  = get(handles.popupmenuY, 'value');        

x = handles.numbers(:, xColNum);
y = handles.numbers(:, yColNum);

plot(handles.axes1, x,y);
xlabel(handles.axes1, handles.colNames{xColNum});
ylabel(handles.axes1, handles.colNames{yColNum});


So sieht jetzt mein Code aus aber ich bekomme die x-label und y-label immer noch nicht angezeigt. Es wird auch keine Fehlermeldung angezeigt
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: 16.08.2015, 00:34     Titel:
  Antworten mit Zitat      
Hallo furkan-karatas,

Wir können Deinen Code mangels Daten nicht laufen lassen. Ich kann nicht erraten, was der String 'Test2(''updateAxes'',gcbo,[],guidata(gcbo))' tut, wenn er als Callback ausgeführt wird, weil ich nicht weiß, was "Test2" ist. Da Strings als Callbacks sowieso seit über 10 Jahren nur noch wegen der Rückwärtskompatibilität erlaubt sind, würde ich Dir unbedingt raten, auf die üblichen Function-Handles überzugehen.

Setze doch mal einen Breakpoint in die Zeile, in der die XLabels gesetzt werden und prüfe so, ob sie überhaupt aufgerufen wird. Ist das entsprechende AXES-Objekt sichtbar?
Ohne den lauffähigen Code zu sehen, kann man nur wild raten, wo das Problem liegen könnte. Aber mit dem Debugger solltest Du das selbst herausfinden können.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 11.08.15
Wohnort: München
Version: ---
     Beitrag Verfasst am: 17.08.2015, 11:10     Titel:
  Antworten mit Zitat      
Hallo Jan,

super danke für deine Hilfe.

Jetzt klappt alles einwandfrei.

Gruß

Furkan
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.