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

Punkte färben, die außerhalb der Grenzen liegen

 

remix92
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 61
Anmeldedatum: 11.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2017, 16:25     Titel: Punkte färben, die außerhalb der Grenzen liegen
  Antworten mit Zitat      
Hallo zusammen,

ich hänge an ein Problem fest...

undzwar würde ich gerne Punkte, die außerhalb der Standardabweichung liegen, gerne rot markieren.
Mein Code sieht folgendermaßen aus:
Code:

b=7;
TestData = randn(100);
for k=1:size(TestData,2);
   
mean_new(k,:) = mean(TestData(:,k));    
std_big(k,:)  = mean(TestData(:,k))  +  std(TestData(:,k));
std_low(k,:)  = mean(TestData(:,k))  -  std(TestData(:,k));

plot(TestData(:,b),'b.')

 line(xlim,[mean_new(b,1),mean_new(b,1)],'Color','green')
 line(xlim,[std_low(b,1),std_low(b,1)],'Color','red')
 line(xlim,[std_big(b,1),std_big(b,1)],'Color','red')

if TestData(:,b) > std_big(b,1)    
   plot(TestData(:,b),'r.')
end    
if TestData(:,b) < std_low(b,1)    
   plot(TestData(:,b),'r.')
end    

lgd= legend (['Data Points'],['Ideal = ' num2str(mean_new(b,1))],['UpperLimit = ' num2str(std_big(b,1))], ['LowerLimit = ' num2str(std_low(b,1))]  );
set(lgd,'Location','northEastoutside','FontSize',12);        
end
 


In Diesem Beispiel erzeuge ich ein 100x100 matrix, bei dem ich dann die Punkte von Spalte 7 plotten lasse. Dazu berechne ich den Ideal Wert mit der Funktion mean und setzte jeweils als Grenzen fest:
obere Grenze: IdealWert + Standardabweichung
untere Grenze: IdealWert - Standardabweichung

nun würde ich gerne alle Punkte, die außerhalb der Grenzen liegen als Rote Punkte im Plot darstellen lassen...

Leider weiß ich nicht wie....

Wäre für jede Hilfe sehr Dankbar Smile

Gruß
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.447
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.11.2017, 18:36     Titel:
  Antworten mit Zitat      
Hallo,

Code:
datavec = TestData(:,b);
plot(datavec(datavec > std_big(b,1)),'r.')


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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 61
Anmeldedatum: 11.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.11.2017, 18:45     Titel:
  Antworten mit Zitat      
Vielen Dank für deine Antwort Smile

Es funktioniert,aber nicht so wie es gerne haben würde Smile
Es werden zusätzliche rote Punkte eingefügt.
Ich würde aber gerne mir wünschen, dass die "Außreiser" durch rote Punkte ersetzt werden.
Siehe Bilder Smile

Ist es denn möglich die Ausreißer durch rote Punkte zu ersetzen ?

Vielen Dank nochmal für die Hilfe Smile

Gruß

STD_Bild.jpg
 Beschreibung:

Download
 Dateiname:  STD_Bild.jpg
 Dateigröße:  20.29 KB
 Heruntergeladen:  244 mal
STD_Bild.fig
 Beschreibung:

Download
 Dateiname:  STD_Bild.fig
 Dateigröße:  499.44 KB
 Heruntergeladen:  278 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.447
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.11.2017, 22:39     Titel:
  Antworten mit Zitat      
Hallo,

dann solltest du den vorherigen Plot durch eine logische Bedingung auf die gewünschten Punkte beschränken.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 61
Anmeldedatum: 11.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2017, 18:28     Titel:
  Antworten mit Zitat      
Hallo,
das habe ich versucht, aber leider ohne Erfolg...

Code:

hold on
datavec = TestData(:,b);
plot(datavec(std_low(b,1) < datavec < std_big(b,1)) ,'b.')
plot(datavec (datavec > std_big(b,1)),'r.')
plot(datavec (datavec < std_low(b,1)),'r.')
 line(xlim,[mean_new(b,1),mean_new(b,1)],'Color','green')
 line(xlim,[std_low(b,1),std_low(b,1)],'Color','red')
 line(xlim,[std_big(b,1),std_big(b,1)],'Color','red')
 


Wo liegt mein Feher ?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.447
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.11.2017, 20:03     Titel:
  Antworten mit Zitat      
Hallo,

ein Fehler ist hier:
Code:
plot(datavec(std_low(b,1) < datavec & datavec< std_big(b,1)) ,'b.')


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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 61
Anmeldedatum: 11.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2017, 20:48     Titel:
  Antworten mit Zitat      
Vielen Dank Smile

Ist es denn möglich, die Ausreißer (rot markierte Punkte) auf die ursprüngliche Position zu versetzen ?

Die Bilder "orginal" und "bearbeitet" im Anhang zeigen den Unterschied Smile
Ich habe es versucht mit folgendem Code, leider ohne Erfolg...
Code:

datavec(m,1) = TestData(:,b);

for m=1:size(datavec,1);

hold on
 plot(datavec(std_low(b,1) < datavec & datavec< std_big(b,1)) ,'b.')
 plot(datavec(m,1) (datavec > std_big(b,1)),'r.')
 plot(datavec(m,1) (datavec < std_low(b,1)),'r.')
end
 


orginal.jpg
 Beschreibung:

Download
 Dateiname:  orginal.jpg
 Dateigröße:  42.52 KB
 Heruntergeladen:  253 mal
bearbeitet.jpg
 Beschreibung:

Download
 Dateiname:  bearbeitet.jpg
 Dateigröße:  35.21 KB
 Heruntergeladen:  249 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.447
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.11.2017, 22:43     Titel:
  Antworten mit Zitat      
Hallo,

ich würde generell die Syntax plot(x,y) verwenden. In deinem Fall mit x = 1:length(y) . Dann kannst du aus y und x die nicht gewünschten Punkte entfernen, und die verbleibenden Punkte bleiben an der ursprünglichen Position.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 61
Anmeldedatum: 11.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.11.2017, 17:49     Titel:
  Antworten mit Zitat      
Hallo,

Vielen Dank für deinen Tipp...

Leider weiß ich nicht so recht, dein Tipp umzusetzen...
Der Befehl
Code:
ist mir zwar bekannt, aber kann den für mein Fall leider nicht umsetzen.....

Im Anhang befindet sich auch das M.File

Wenn du eventuell mal zeit hättest könntest du da mal reinschauen ?
Wäre sehr nett Smile

Der Interessante Teil vom Code wäre nur der:
Code:

datavec = TestData(:,k);
figure(k)
x = 1:length(datavec);

hold on
plot(datavec (std_low(k,1) < datavec  & datavec < std_big(k,1)) ,'b.')


plot(datavec (datavec  > std_big(k,1)),'r.')
plot(datavec (datavec  < std_low(k,1)),'r.')
 


Variable k greift Spaltenweiße auf alle Zeileneinträge zu!

Gruß

std_big_data.m
 Beschreibung:

Download
 Dateiname:  std_big_data.m
 Dateigröße:  864 Bytes
 Heruntergeladen:  237 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Code:
TestData = randn(1000,3);
for k=1:size(TestData,2);
   
mean_new(k,:) = mean(TestData(:,k));    
std_big(k,:)  = mean(TestData(:,k))  +  std(TestData(:,k));
std_low(k,:)  = mean(TestData(:,k))  -  std(TestData(:,k));

datavec = TestData(:,k);
figure(k)
x = 1:length(datavec);

hold on
filt1 = std_low(k,1) < datavec  & datavec < std_big(k,1);
plot(x(filt1), datavec(filt1) ,'b.')

 
line(xlim,[mean_new(k,1),mean_new(k,1)],'Color','green')
line(xlim,[std_low(k,1),std_low(k,1)],'Color','red')
line(xlim,[std_big(k,1),std_big(k,1)],'Color','red')


filt2 =  datavec  > std_big(k,1);
plot(x(filt2), datavec (filt2),'r.')

filt3 =  datavec  < std_low(k,1);
plot(x(filt3), datavec (filt3),'r.')

lgd= legend (['Data Points'],['Ideal = ' num2str(mean_new(k,1))],['UpperLimit = ' num2str(std_big(k,1))], ['LowerLimit = ' num2str(std_low(k,1))]  );
set(lgd,'Location','northEastoutside','FontSize',12);
hold off
end


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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 61
Anmeldedatum: 11.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.11.2017, 18:19     Titel:
  Antworten mit Zitat      
Perfekt Smile
Vielen Dank Smile
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 - 2024 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.