Innerhalb von MATLAB kann der Boxplot-Befehl zum Generieren von Boxplots verwendet werden. Das Standardverhalten dieser Funktion hat eine Whiskerlänge von 1,5 * IQR (75. Perzentil - 25. Perzentil) und diese Whiskerlänge kann bei Bedarf auf ein anderes Vielfaches von IQR geändert werden. Es ist jedoch nicht möglich, spezifische Perzentile als Grenze der Whiskers zu verwenden, und das ist etwas, was ich benötige (in meinem Fall das 10. und das 90. Perzentil). Wie Sie im folgenden Beispiel sehen werden, bin ich soweit gekommen, habe aber ein Problem festgestellt.Entfernen bestimmter Ausreißer aus Matlab Boxplot
Betrachten Sie die folgenden Daten:
Box_Data_PFCA = [-3;1;2;3;4;5;5;5;6;40;45;77;7;9;1;2;3;7;7;7;10;11;11;40;30;101;110;150];
label = ['PFOS';'PFOS';'PFOS';'PFOS';'PFOS';'PFOS';'PFOS';'PFOS';'PFOS';'PFOS';'PFOS';'PFOS';'PFOS';'PFOS';...
'PFDA';'PFDA';'PFDA';'PFDA';'PFDA';'PFDA';'PFDA';'PFDA';'PFDA';'PFDA';'PFDA';'PFDA';'PFDA';'PFDA'];
Von dem mir einen boxplot mit der defualt Matlab-Funktion erzeugen:
h = boxplot(Box_Data_PFCA,label)
ich dann die Perzentil berechnen Ich benötige eine boxplot zu generieren:
PFOS_10=prctile([-3;1;2;3;4;5;5;5;6;40;45;77;7;9],10)
PFOS_25=prctile([-3;1;2;3;4;5;5;5;6;40;45;77;7;9],25)
PFOS_75=prctile([-3;1;2;3;4;5;5;5;6;40;45;77;7;9],75)
PFOS_90=prctile([-3;1;2;3;4;5;5;5;6;40;45;77;7;9],90)
PFDA_10=prctile([1;2;3;7;7;7;10;11;11;40;30;101;110;150],10)
PFDA_25=prctile([1;2;3;7;7;7;10;11;11;40;30;101;110;150],25)
PFDA_75=prctile([1;2;3;7;7;7;10;11;11;40;30;101;110;150],75)
PFDA_90=prctile([1;2;3;7;7;7;10;11;11;40;30;101;110;150],90)
Ich fahre dann fort, das Boxplot mit den grafischen Handles zu bearbeiten (ed die Box in meinem Fall iting ist, da die Standardeinstellungen von 25% bis 75% Anzug mich unnessary aber ich zeige es auf Vollständigkeit):
set(h(5,1), 'YData', [PFOS_25 PFOS_75 PFOS_75 PFOS_25 PFOS_25])
set(h(1,1), 'YData', [PFOS_75 PFOS_90])
set(h(2,1), 'YData', [PFOS_10 PFOS_25])
set(h(3,1), 'YData', [PFOS_90 PFOS_90])
set(h(4,1), 'YData', [PFOS_10 PFOS_10])
set(h(5,2), 'YData', [PFDA_25 PFDA_75 PFDA_75 PFDA_25 PFDA_25])
set(h(1,2), 'YData', [PFDA_75 PFDA_90])
set(h(2,2), 'YData', [PFDA_10 PFDA_25])
set(h(3,2), 'YData', [PFDA_90 PFDA_90])
set(h(4,2), 'YData', [PFDA_10 PFDA_10])
, die in den folgenden Ergebnissen:
Wie Sie sehen können, überschneiden sich einige meiner Ausreißer mit den Schnurrhaaren nach den Änderungen, die ich an den Schnurrhaaren vorgenommen habe.
Meine Frage ist, wie kann ich sicherstellen, dass Ausreißer in meinen Schnurrhaaren entfernt werden (und außerhalb meiner Schnurrhaare angezeigt werden) nach meinen Änderungen. Mir ist klar, dass ich den "Ausreißer" -Handgriff irgendwie verwenden muss, aber die Lösung stellt sich mir nicht vor ... Da dies nur ein Beispieldatensatz ist, müsste die Lösung an großen Datensätzen arbeiten.
'h = boxplot (Box_Data_PFCA, Label)' bereits tun, was Sie wollen. Ich verstehe nicht, warum du die Boxgrenze selbst einstellst? – obchardon
Natürlich, wenn Sie keine Ausreißer haben (dies ist Ihr Fall mit dem Fall PFDA), wird nichts geplottet. Sie haben keinen niedrigeren Wert als Q1 - 3 * IQ oder höher als Q3 + 3 * IQ – obchardon
@obchardon der Grund, warum ich die Grenzen selbst gesetzt habe ist, dass ich die 10. und 90. Perzentile und nicht einige Faktoren basierend auf dem IQR verwenden möchte. Auch das 90. Perzentil von PDNA ist 105.5 und es gibt einen Wert von 110 in diesem Datensatz, den ich als Ausreißer anzeigen möchte (da er größer ist als das 90. Perzentil). – user1912925