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

Set subplot Position zerstört andere Funktionen

 

jochen0815

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.09.2013, 13:32     Titel: Set subplot Position zerstört andere Funktionen
  Antworten mit Zitat      
Hallo zusammen,

mit dem angefügten Code Teste ich gerade die Machbarkeit der Anforderungen an eine Grafik. Die Grafik soll verschiedenste Daten von unterschiedlichen Geräten veranschaulichen. Um die Achsen jeweils frei spezifizieren zu können, verwende ich mehrere Subplot, wobei auch die Reihenfolge leicht zu modifizieren sein soll. Um die jeweiligen Geräte erkennen zu können, werden die entsprechenden Punkte mit Linien in einer Farbe verbunden. Dies funktioniert auch soweit so gut.

Nun besteht aber auch noch die Anforderung die Größe der einzelnen Subplots in der Höhe anpassen zu können. wenn ich dies über den set-Position -Befehl definieren möchte, dann werden nur Punktsymbole des aktuellen Schleifendurchlaufes angezeigt und ein Teil der vorherigen Subplot Spezifikationen verlieren ihre Wirksamkeit. Zur verdeutlichung habe ich nochmal 2 Bilder angehangen.

Ich habe schon mehrere Anordnungen des
Code:
set(s(n-m),'Position',[0.13 0.4 0.775 0.3]);
Befehles ausprobiert und diesen auch mit dem anderen set-Befehl zusammengefasst. Leider hat bisher nichts geholfen.
Hat jemand von euch eine Idee woran dies liegen könnte?

Vielen dank schon mal.
Jochen



Code:
clear
clc
A=xlsread('GP8');

for i=1:length(A(:,1))
    if A(i,1)==1  
       B(i,:)=A(i,:);   %erstellt eine neue Matrix mit den gewünschten Datensätzen
    end
end
B(all(B==0,2),:)=[];

f=figure(2)
 
set(gcf,'Units','pixel','Position',[0 0  594 840]) %Position und Größe der angezeigten Grafik auf dem Bildschirm
n=3;
fsize=get(f,'position')
m=n-1;

for i=1:length(B(:,1))
   
    j=1;
    m=n-1
   
    s(n-m)=subplot(n,1,n-m);
    %set(s(n-m),'Position',[0.13 0.8 0.775 0.1]);
    if B(i,30)==0.796
        semilogx(B(i,34),1,'^','LineWidth',3,'MarkerEdgeColor','k','MarkerSize',20);
        x(j)=(B(i,34)); y(j)=(1); d=j; j=j+1;
           
    else B(i,30)==0.846
        semilogx(B(i,34),1,'s','LineWidth',3,'MarkerEdgeColor','k','MarkerSize',20);
        x(j)=(B(i,34)); y(j)=(1); d=j; j=j+1;
         
    end
    set(s(n-m),'YTick',[ ], 'XTick', [130 300 480],'XScale', 'log'); %Achsenbeschriftung    
    axis([100 1000 0 2])
    text(1000,-0.5,'m_G_t_r [kg]')
    text(74,1,'Getriebebauf.')
    box off
    grid off
    I=text(x(d),y(d),'','parent',s(n-m))
    set(I,'units','pixel')
    pos=get(I,'position')
    delete(I)
    temp=get(s(n-m),'position')
    xf(d)=temp(1)+(pos(1)/fsize(3))
    yf(d)=temp(2)+(pos(2)/fsize(4))
    m=m-1
    hold on
   
   
    s(n-m)=subplot(n,1,n-m);
    %set(s(n-m),'Position',[0.13 0.4 0.775 0.3]);
    semilogx(B(i,111),1,'o', 'LineWidth',3,'MarkerEdgeColor','k','MarkerSize',10);
    semilogx(B(i,114),3,'o', 'LineWidth',3,'MarkerEdgeColor','g','MarkerSize',10);
    x(j)=B(i,114);y(j)=3; b=j; j=j+1;
    x(j)=B(i,111);y(j)=1; c=j, j=j+1;
    set(s(n-m),'YTick',[ ], 'XTick', [200 300 400 600 800 1000 1200 1400 1700], 'XScale', 'log'); %Achsenbeschriftung
   
    axis([200 2000 0 5])
    text(2000,-0.5,'V_T_a_n_k [l]')
    text(150,1,'Diesel')
    text(150,3,'Hydraulik')
    box off
    I=text(x(b),y(b),'','parent',s(n-m))
    set(I,'units','pixel')
    pos=get(I,'position')
    delete(I)
    temp=get(s(n-m),'position')
    xf(b)=temp(1)+(pos(1)/fsize(3))
    yf(b)=temp(2)+(pos(2)/fsize(4))
    I=text(x(c),y(c),'','parent',s(n-m))
    set(I,'units','pixel')
    pos=get(I,'position')
    delete(I)
    temp=get(s(n-m),'position')
    xf(c)=temp(1)+(pos(1)/fsize(3))
    yf(c)=temp(2)+(pos(2)/fsize(4))
    m=m-1
    hold on
   
    s(n-m)=subplot(n,1,n-m);
   
    %set(s(n-m),'Position',[0.13 0.05 0.775 0.2]);
    if B(i,10)==1
        semilogx(B(i,14),B(i,13),'o','LineWidth',3,'MarkerEdgeColor','k','MarkerSize',0.9*B(i,12)); %erzeugt Motorsymbole nach Hersteller
        x(j)=(B(i,14)); y(j)=(B(i,13)); a=j; j=j+1,
           
    elseif B(i,10)==2
        semilogx(B(i,14),B(i,13),'o','LineWidth',3,'MarkerEdgeColor','r','MarkerSize',0.9*B(i,12)); %erzeugt Motorsymbole nach Hersteller
        x(j)=(B(i,14)); y(j)=(B(i,13)); a=j, j=j+1
    set(s(n-m),'YTick',[ ], 'XTick', [125, 150, 175 200, 250, 300, 350, 400, 500, 600, 700, 800, 1000], 'XScale', 'log'); %Achsenbeschriftung    
       
    axis([120 1200 1 5])
    text(90,2,'Tier 2')
    text(90,3,'Tier 3')
    text(90,4,'Tier 4f')
    text(1200,-1,'P_V_K_M [kW]')
    box off
    grid off
    end
    I=text(x(a),y(a),'','parent',s(n-m))
    set(I,'units','pixel')
    pos=get(I,'position')
    delete(I)
    temp=get(s(n-m),'position')
    xf(a)=temp(1)+(pos(1)/fsize(3))
    yf(a)=temp(2)+(pos(2)/fsize(4))
    m=m-1
    hold on
     
    A=[xf;yf]
    [mm,nn]=size(A)
    k=1
    color=rand(1,3)
  while k<=(nn-1)
     
      x=[A(1,k),A(1,k+1)]
      y=[A(2,k),A(2,k+1)]
      an=annotation('line',x,y,'Color',color,'LineWidth',2)
      k=k+1
  end
    %set(gcf,'paperunits','centimeters','paperposition',[0 0 42 29.7])
    print([[num2str((i))],'BG',num2str(B(i,5))] ,'-djpeg','-r150');    %speichert pro Schleifendurchlauf ein Bild im aktuellen Verzeichniss

end
 


ohne definierte Subplot Position.jpg
 Beschreibung:

Download
 Dateiname:  ohne definierte Subplot Position.jpg
 Dateigröße:  83.85 KB
 Heruntergeladen:  533 mal
mit definierter Größe.jpg
 Beschreibung:

Download
 Dateiname:  mit definierter Größe.jpg
 Dateigröße:  79.75 KB
 Heruntergeladen:  499 mal


Jochen0815

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2013, 12:06     Titel:
  Antworten mit Zitat      
Hat von euch keiner Idee, warum die Definition der Subplot Position solch ein Problem darstellt?

ch weiß mir bei dem Problem einfach nicht mehr zu helfen.

Danke und viele Grüße
Jochen
 
Rek

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.09.2013, 14:49     Titel:
  Antworten mit Zitat      
Dürfte nicht an dem subplot-Befehl liegen, sondern eher an dem überflüssigen semilogx-Befehl (s. angehängte Grafik 2).
Da du später die Achsenbeschriftung sowieso nochmal anpasst
Code:
set(s(n-m),'YTick',[ ], 'XTick', [125, 150, 175 200, 250, 300, 350, 400, 500, 600, 700, 800, 1000], 'XScale', 'log'); %Achsenbeschriftung

brauchst du diese gar nicht.
Versuch mal einfache plot- statt semilogx-Befehle zur Darstellung deiner Daten zu verwenden...

Gruß Rek
 
Jochen0815

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.09.2013, 16:07     Titel:
  Antworten mit Zitat      
Hallo Rek,
danke für deinen Hinweis. Habe alle semilogx gegen plot Befehle ausgetauscht.

Leider hat dies keinerlei Wirkung gezeigt. Siehst du vielleicht noch irgendwo Programmiertechnische Missstände?

Mein Hauptproblem besteht nach wie vor darin den Fehler zu finden, warum die Subplot Positionsbestimmung die Anzeige aller Markersymbole beinträchtigt.

Danke und viele Grüße
Jochen
 
Rek

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.09.2013, 20:41     Titel:
  Antworten mit Zitat      
Bei Änderung der Größe der einzelnen Subplots über ein Handle (Objektreferenz)
erstellt Matlab jedesmal eine neue Grafik und speichert diese in einem neuen Handle,
so dass sich s(n-m) stets ändert...
Dies lässt sich wie folgt vermeiden

Statt
Code:
set(s(n-m),'Position',[0.13 0.8 0.775 0.1]);
...


Folgendes
Code:

subplot('Position',[0.13 0.8 0.775 0.1]);
s(n-m) = plot(B(i),1,'^','LineWidth',3,'MarkerEdge','k','MarkerSize',20);
set(gca,'YTick',[ ], 'XTick', [130 300 480],'XScale', 'log');
...
subplot('Position',[0.13 0.4 0.775 0.3]);
s(n-m) = plot(B(7-i),1,'o','LineWidth',3,'MarkerEdge','b','MarkerSize',20);
set(gca,'YTick',[ ], 'XTick', [200 300 400 600 800 1000 1200 1400 1700], 'XScale', 'log');
...

usw..

Hoffe es funktioniert so...Rek
 
Jochen0815

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.09.2013, 10:16     Titel:
  Antworten mit Zitat      
Ja super Sache von dir, genau das war der springende Punkt.
Vielen vielen Dank, du hast mir damit sehr geholfen. Ich wäre daran echt fast verzweifelt.
 
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.