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

In GUI mit 2 Checkboxes subplot erstellen

 

mokkabaer
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 12.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2014, 19:55     Titel: In GUI mit 2 Checkboxes subplot erstellen
  Antworten mit Zitat      
Hallo,

letzte Mal wurde mir so klasse geholfen, ich hoffe dieses Mal klappt es genauso.
Ich habe in einer GUI 2 Checkboxes, die wenn ich sie einzeln anwähle und ausführe den gewünschten Plot bringt.

In einer weiteren Bedingung habe ich festgelegt dass wenn ich nun beide Checkboxes betätigt habe, beide Grafiken als subplot in einem Fenster erscheinen.
Problem: Die Grafiken sehen z.T. anders aus und bei dem einen wird das Gitternetz überdeckt.

Hier mal der Quellcode
Code:
if (get(handles.checkbox2D,'Value') == get(handles.checkbox2D,'Max'))
    figure(figureNr)
    if length(xAxisArr)==0
        close(figureNr)
        figure(figureNr)
    end
    % plot route data
    if (get(handles.checkbox3D,'Value') == get(handles.checkbox3D,'Max'))
        subplot(1,2,1)
    end
   
    if (get(handles.checkboxDifferenz,'Value') == get(handles.checkboxDifferenz,'Max'))
        % Calculate Difference Plot
        for index = 2 : length(yAxisArr)
            yAxisArr(index-1) = yAxisArr(index) - yAxisArr(index-1);
        end
        yAxisArr = yAxisArr(1:end-1);
        xAxisArr = xAxisArr(1:end-1);
    end      
             

    if (get(handles.checkboxSum,'Value') == get(handles.checkboxSum,'Max'))
        xAxisArr=cumsum(xAxisArr);
        yAxisArr=cumsum(yAxisArr);
    end
   
    plot(xAxisArr, yAxisArr, 'r', 'LineWidth', 2);
   
    if  (get(handles.checkboxSum,'Value') == get(handles.checkboxSum,'Max')) && (get(handles.checkboxDifferenz,'Value') == get(handles.checkboxDifferenz,'Max'))
            xAxisArrCum=cumsum(xAxisArr);
            yAxisArrCum=cumsum(yAxisArr);
             subplot(2,2,1)
             plot (xAxisArrCum,yAxisArrCum, 'r', 'LineWidth', 2);
             title('Summation')
             
             subplot(2,2,2)
             for index = 2 : length(yAxisArr)
                yAxisArr(index-1) = yAxisArr(index) - yAxisArr(index-1);
             end
               yAxisArr = yAxisArr(1:end-1);
               xAxisArr = xAxisArr(1:end-1);
               plot(xAxisArr,yAxisArr, 'r', 'LineWidth', 2);
               title ('Differenz')
               
                  if length(xAxisArrCum)>0
                         line(xAxisArrCum(1), yAxisArrCum(1), 'Marker', 'o', ...
                             'Color', 'b', 'MarkerFaceColor', 'b', 'MarkerSize', 10);
                            line(xAxisArrCum(end), yAxisArrCum(end), 'Marker', 's', ...
                             'Color', 'b', 'MarkerFaceColor', 'b', 'MarkerSize', 10);
                  end
               
    end
     
    if (get(handles.checkboxMark,'Value') == get(handles.checkboxMark,'Max'))
        hold on
        plot(xAxisArr, yAxisArr, 'mx', 'LineWidth', 2,'Markersize',8);
        hold off
    end
    if length(xAxisArr)>0
        line(xAxisArr(1), yAxisArr(1), 'Marker', 'o', ...
            'Color', 'b', 'MarkerFaceColor', 'b', 'MarkerSize', 10);
        line(xAxisArr(end), yAxisArr(end), 'Marker', 's', ...
            'Color', 'b', 'MarkerFaceColor', 'b', 'MarkerSize', 10);
    end
    xlabel(xAxisName,'Interpreter','none')
   
   
   
    if (get(handles.checkboxDifferenz,'Value') == get(handles.checkboxDifferenz,'Max'))
        yName = {['Differenz ' yAxisName]};
        ylabel(yName,'Interpreter','none')
    else
        ylabel(yAxisName,'Interpreter','none')
    end
   
    if (get(handles.checkboxSum,'Value') == get(handles.checkboxSum,'Max'))
        yName = {['Summation ' yAxisName]};
        ylabel(yName,'Interpreter','none')
    else
        ylabel(yAxisName,'Interpreter','none')
    end
    title(tStr2,'interpreter','none')
    grid on
   
end


Vielen Dank schon vorab
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.11.2014, 08:51     Titel:
  Antworten mit Zitat      
Hallo,

das ist viel Code und für uns schwierig zu sehen, wo das eigentliche Problem liegt. Bitte entweder
- den Code auf den wirklich relevanten Teil reduzieren oder
- ein komplett reproduzierbares Beispiel posten (bei GUIDE GUIs komplettes .m und .fig, sowie was in welcher Reihenfolge geklickt werden soll)

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mokkabaer
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 12.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2014, 16:55     Titel:
  Antworten mit Zitat      
okay habe es mal auf das wichtigste gekürzt.
Fehler ist nun dass beim plotten von der Differenz und cumsum diese falsch angezeigt werden. Hoffe es ist verständlich

Code:
if (get(handles.checkbox2D,'Value') == get(handles.checkbox2D,'Max'))
    figure(figureNr)
   
    if (get(handles.checkboxDifferenz,'Value') == get(handles.checkboxDifferenz,'Max'))  %plottet nur Differenz 2D
        % Calculate Difference Plot
        for index = 2 : length(yAxisArr)
            yAxisArr(index-1) = yAxisArr(index) - yAxisArr(index-1);
        end
        yAxisArr = yAxisArr(1:end-1);
        xAxisArr = xAxisArr(1:end-1);
    end      
             

    if (get(handles.checkboxSum,'Value') == get(handles.checkboxSum,'Max'))  %%plottet nur cumsum 2D
        xAxisArr=cumsum(xAxisArr);
        yAxisArr=cumsum(yAxisArr);
    end
   
    plot(xAxisArr, yAxisArr, 'r', 'LineWidth', 2);
   
    if  (get(handles.checkboxSum,'Value') == get(handles.checkboxSum,'Max')) && (get(handles.checkboxDifferenz,'Value') == get(handles.checkboxDifferenz,'Max'))  %soll subplot cumsum+differenz plotten
            xAxisArrCum=cumsum(xAxisArr);
            yAxisArrCum=cumsum(yAxisArr);
             subplot(2,2,1)
             plot (xAxisArrCum,yAxisArrCum, 'r', 'LineWidth', 2);
             title('Summation')
             
             subplot(2,2,2)
             for index = 2 : length(yAxisArr)
                yAxisArr(index-1) = yAxisArr(index) - yAxisArr(index-1);
             end
               yAxisArr = yAxisArr(1:end-1);
               xAxisArr = xAxisArr(1:end-1);
               plot(xAxisArr,yAxisArr, 'r', 'LineWidth', 2);
               title ('Differenz')
               
       
               
    end
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.11.2014, 17:45     Titel:
  Antworten mit Zitat      
Hallo,

und worin besteht nun genau die "falsche Anzeige"? Ich habe keine Ahnung, von welchem Gitternetz du sprichst.
Dass Plots z.B. die Achsenskalierung anders gewählt wird, wenn weniger Platz ist, ist ja so gedacht. Wenn du das nicht möchtest, musst du die Achsen eben selbst nach Wunsch anpassen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mokkabaer
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 12.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2014, 20:04     Titel:
  Antworten mit Zitat      
Der Differenz plot zeigt beim subplot die falschen Werte an und ich verstehe nicht warum weil ich die ja in der if Bedingung drinstehen habe. Und ich habe ja grid in und dieses wird beim subplot über deckt so dass an der Seite nur ganz wenig von dem Gitternetz zu sehen ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.11.2014, 21:24     Titel:
  Antworten mit Zitat      
Hallo,

wenn beide Bedingungen erfüllt sind, werden alle Blöcke ausgeführt. Das bedeutet insbesondere, dass im ersten Block xaxisarr und yaxisarr bereits überschrieben werden. Im zweiten Block wird von den neuen Werten die kumulative Summe berechnet, und wieder überschrieben.
Mit anderen Worten: wenn du Originalwerte zur Verfügung haben willst, dann musst du darauf achten, die Variablen nicht zu überschreiben.
Eine Möglichkeit:
Code:
if checkbox 1 & checkbox 2 aktiviert
...
elseif checkbox 1 aktiviert
...
elseif checkbox 2 aktiviert
...
end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mokkabaer
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 12.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2014, 10:58     Titel:
  Antworten mit Zitat      
Super vielen Dank so hats hingehauen!
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.