boxplot() στο R: How to Make BoxΟικόπεδα στο RStudio
⚡ Έξυπνη Σύνοψη
BoxΤο διάγραμμα σε R συνοψίζει μια αριθμητική κατανομή μέσω της διάμεσης, των τεταρτημορίων, των μουστακιών και των ακραίων τιμών χρησιμοποιώντας τη συνάρτηση geom_boxplot() από το ggplot2. Αυτή η αναλυτική παρουσίαση δημιουργεί ένα διάγραμμα πλαισίου στο σύνολο δεδομένων ποιότητας αέρα και στρώσεις σε χρώμα, κουκκίδες, τρέμουλο, εγκοπές και συγκρίσεις ομάδων.
boxplot() στο R
boxplot() στο R βοηθά στην οπτικοποίηση της κατανομής των δεδομένων ανά τεταρτημόριο και στην ανίχνευση της παρουσίας ακραίων τιμών. Μπορείτε να χρησιμοποιήσετε το γεωμετρικό αντικείμενο geom_boxplot() από τη βιβλιοθήκη ggplot2 για να σχεδιάσετε ένα boxplot() στο R.
Θα χρησιμοποιήσουμε το σύνολο δεδομένων ποιότητας αέρα για να εισαγάγουμε την boxplot() σε R με ggplot. Το σύνολο δεδομένων καταγράφει καθημερινές μετρήσεις ποιότητας αέρα στη Νέα Υόρκη από τον Μάιο έως τον Σεπτέμβριο του 1973 και περιέχει 153 παρατηρήσεις. Θα χρησιμοποιήσουμε τις ακόλουθες μεταβλητές:
- Όζον: Αριθμητική μεταβλητή
- Άνεμος: Αριθμητική μεταβλητή
- Μήνας: Μάιος έως Σεπτέμβριος. Αριθμητική μεταβλητή
Πριν σχεδιάσετε ένα, αξίζει να μάθετε ακριβώς τι αντιπροσωπεύει κάθε μέρος του κουτιού.
Πώς να διαβάσετε α Box Διάγραμμα: Τεταρτημόρια, IQR και Ακραίες Τιμές
Κάθε στοιχείο ενός γραφήματος κουτιού κωδικοποιεί έναν αριθμό από το άθροισμα των πέντε αριθμών. Γνωρίζοντας ποιο είναι ποιο, το διάγραμμα μετατρέπεται από διακόσμηση σε ανάλυση.
- Κάτω μεντεσέ: το πρώτο τεταρτημόριο, Q1. Το είκοσι πέντε τοις εκατό των παρατηρήσεων βρίσκεται κάτω από αυτό.
- Διάμεση γραμμή: το δεύτερο τεταρτημόριο. Η θέση του μέσα στο πλαίσιο αποκαλύπτει ασυμμετρία: μια γραμμή που πιέζεται προς τα κάτω σημαίνει ότι τα δεδομένα είναι δεξιόστροφα.
- Άνω μεντεσέ: το τρίτο τεταρτημόριο, Q3. Το εβδομήντα πέντε τοις εκατό των παρατηρήσεων βρίσκονται κάτω από αυτό.
- Box Ύψος: το διατεταρτημοριακό εύρος, IQR = Q3 – Q1, το οποίο περιέχει το μεσαίο μισό των δεδομένων και αποτελεί το τυπικό ανθεκτικό μέτρο της διασποράς.
- Φαβορίτα: Εκτείνονται στην πιο ακραία παρατήρηση, η οποία βρίσκεται ακόμα εντός 1.5 IQR της πλησιέστερης άρθρωσης. Δεν είναι το ελάχιστο και το μέγιστο.
- Σημεία πέρα από τα μουστάκια: παρατηρήσεις που επισημάνθηκαν ως ακραίες τιμές από τον κανόνα του 1.5 IQR.
Δύο προειδοποιήσεις. Πρώτον, μια «ακραία τιμή» εδώ είναι μια στατιστική σημαία, όχι ένα σφάλμα: σε μια ασύμμετρη κατανομή όπως η συγκέντρωση όζοντος, αναμένονται υψηλές τιμές και δεν πρέπει να διαγραφούν. Δεύτερον, ένα διάγραμμα κουτιού αποκρύπτει το σχήμα της κατανομής, επομένως δύο ομάδες με πανομοιότυπα κουτιά μπορεί να έχουν πολύ διαφορετικά υποκείμενα δεδομένα. Η προσθήκη σημείων με διακύμανση, όπως φαίνεται παρακάτω, προστατεύει από αυτό.
Box Πλοκή vs Ιστόγραμμα vs Σχέδιο βιολιού σε R
Και τα τρία γραφήματα περιγράφουν μια αριθμητική κατανομή, αλλά το καθένα αποκαλύπτει κάτι που τα άλλα κρύβουν.
| Κριτήρια | Box Οικόπεδο | Ιστόγραμμα | Οικόπεδο βιολιού |
|---|---|---|---|
| Δείχνει | Διάμεσος, τεταρτημόρια, ακραίες τιμές | Συχνότητα σε κάθε κάδο | Καμπύλη πλήρους πυκνότητας |
| Revκαλύπτει πολλαπλές κορυφές | Οχι | Ναι | Ναι |
| Σημαίες ακραίων τιμών | Ναι, ρητά | Μόνο οπτικά | Όχι άμεσα |
| Σύγκριση πολλών ομάδων | Άριστη | Αδέξιος | Καλή |
| Χρειάζεται επιλογή συντονισμού | Οχι | Ναι, καταμέτρηση κάδων | Ναι, εύρος ζώνης |
| αντικείμενο ggplot2 | geom_boxplot() | geom_histogram() | geom_violin() |
Ένας συνηθισμένος συμβιβασμός είναι η σχεδίαση ενός διαγράμματος βιολιού με ένα στενό διάγραμμα κουτιού στο εσωτερικό του, το οποίο διατηρεί το σχήμα πυκνότητας και την περίληψη των τεταρτημορίων σε ένα μόνο διάγραμμα. Δείτε το σεμινάριο ιστογράμματος για την πλευρά της σύγκρισης που αφορά την αποθήκευση σε binning.
δημιουργώ Box Οικόπεδο
Πριν ξεκινήσετε να δημιουργείτε το πρώτο σας boxplot() στο R, πρέπει να χειριστείτε τα δεδομένα ως εξής:
- Βήμα 1: Εισαγάγετε τα δεδομένα
- Βήμα 2: Απόρριψη περιττών μεταβλητών
- Βήμα 3: Μετατρέψτε τον Μήνα σε διατεταγμένο παράγοντα
- Βήμα 4: Δημιουργήστε μια νέα κατηγορική μεταβλητή που χωρίζει κάθε μήνα σε τρία μέρη: Αρχή, Μέση και Τέλος
- Βήμα 5: Αφαιρέστε τις παρατηρήσεις που λείπουν
Όλα αυτά τα βήματα γίνονται με το dplyr και τον τελεστή pipeline %>%.
library(dplyr) library(ggplot2) # Step 1 data_air <- airquality %>% #Step 2 select(-c(Solar.R, Temp)) %>% #Step 3 mutate(Month = factor(Month, order = TRUE, labels = c("May", "June", "July", "August", "September")), #Step 4 day_cat = factor(ifelse(Day < 10, "Begin", ifelse(Day < 20, "Middle", "End"))))
Μια καλή πρακτική είναι να ελέγχετε τη δομή των δεδομένων με τη συνάρτηση glimpse().
glimpse(data_air)
Παραγωγή:
## Observations: 153 ## Variables: 5 ## $ Ozone <int> 41, 36, 12, 18, NA, 28, 23, 19, 8, NA, 7, 16, 11, 14, ... ## $ Wind <dbl> 7.4, 8.0, 12.6, 11.5, 14.3, 14.9, 8.6, 13.8, 20.1, 8.6... ## $ Month <ord> May, May, May, May, May, May, May, May, May, May, May,... ## $ Day <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,... ## $ day_cat <fctr> Begin, Begin, Begin, Begin, Begin, Begin, Begin, Begi...
Τόσο το Ozone όσο και το Solar.R περιέχουν τιμές NA. Επειδή η συνάρτηση geom_boxplot() θα τις απέστρεφε σιωπηλά και θα εμφανίζει μια προειδοποίηση, είναι πιο εύκολο να τις αφαιρέσετε ρητά.
# Step 5
data_air_nona <-data_air %>% na.omit()
Βασικό οικόπεδο κουτιού
Τώρα σχεδιάστε την κατανομή του όζοντος ανά μήνα.
# Store the graph box_plot <- ggplot(data_air_nona, aes(x = Month, y = Ozone)) # Add the geometric object box plot box_plot + geom_boxplot()
Code εξήγηση
- Αποθηκεύστε το γράφημα για περαιτέρω χρήση
- box_plot: το βασικό διάγραμμα αποθηκεύεται στο αντικείμενο box_plot, το οποίο σας επιτρέπει να προσθέσετε επίπεδα αργότερα χωρίς να επαναλάβετε ολόκληρη την κλήση
- Προσθήκη του γεωμετρικού αντικειμένου
- Μεταβιβάζετε το σύνολο δεδομένων data_air_nona στο ggplot boxplot.
- Μέσα στο όρισμα aes(), προσθέτετε τον άξονα x και τον άξονα y.
- Το σύμβολο + σημαίνει ότι θέλετε το R να συνεχίσει να διαβάζει τον κώδικα. Κάνει τον κώδικα πιο ευανάγνωστο σπάζοντας τον.
- Χρησιμοποιήστε το geom_boxplot() για να δημιουργήσετε ένα διάγραμμα πλαισίου
Παραγωγή:
Αλλαγή πλευράς του γραφήματος
Μπορείτε να αναστρέψετε την πλευρά του γραφήματος.
box_plot +
geom_boxplot()+
coord_flip()
Code εξήγηση
- box_plot: Χρησιμοποιείτε το γράφημα που αποθηκεύσατε. Αποφεύγει την επανεγγραφή όλων των κωδικών κάθε φορά που προσθέτετε νέες πληροφορίες στο γράφημα.
- geom_boxplot(): σχεδιάστε τα κουτιά και τα μουστάκια
- coord_flip(): Αναστρέψτε την πλευρά του γραφήματος
Παραγωγή:
Αλλαγή χρώματος ακραίου
Μπορείτε να αλλάξετε το χρώμα, το σχήμα και το μέγεθος των ακραίων σημείων.
box_plot +
geom_boxplot(outlier.colour = "red",
outlier.shape = 2,
outlier.size = 3) +
theme_classic()
Code εξήγηση
- outlier.colour=”red”: Ελέγξτε το χρώμα των ακραίων σημείων
- outlier.shape=2: Αλλάξτε το σχήμα του outlier. Το 2 αναφέρεται στο τρίγωνο
- outlier.size=3: Αλλάξτε το μέγεθος του τριγώνου. Οι μεγαλύτεροι αριθμοί σχεδιάζουν μεγαλύτερους δείκτες.
Παραγωγή:
Προσθέστε μια συνοπτική στατιστική
Μπορείτε να επικαλύψετε ένα συνοπτικό στατιστικό στοιχείο, όπως τον μέσο όρο της ομάδας, το οποίο δεν εμφανίζεται στο ίδιο το διάγραμμα πλαισίου.
box_plot +
geom_boxplot() +
stat_summary(fun.y = mean,
geom = "point",
size = 3,
color = "steelblue") +
theme_classic()
Code εξήγηση
- Η stat_summary() προσθέτει ένα υπολογισμένο στατιστικό στοιχείο πάνω από το διάγραμμα πλαισίου
- Το όρισμα fun ελέγχει ποιο στατιστικό στοιχείο επιστρέφεται. Εδώ είναι ο μέσος όρος. Σημειώστε ότι ο παλαιότερος κώδικας χρησιμοποιεί το fun.y, το οποίο το ggplot2 καταργήθηκε στην έκδοση 3.3.0.
- Σημείωση: Άλλα στατιστικά στοιχεία είναι διαθέσιμα, όπως το ελάχιστο και το μέγιστο. Στο ίδιο γράφημα μπορούν να παρουσιαστούν περισσότερα από ένα στατιστικά στοιχεία
- geom = «σημείο»: Σχεδιάστε το μέσο όρο με ένα σημείο
- size=3: Μέγεθος του σημείου
- color =”steelblue”: Χρώμα των σημείων
Παραγωγή:
Box Οικόπεδο με τελείες
Στη συνέχεια, προσθέστε ένα επίπεδο γραφήματος κουκκίδων πάνω από τα πλαίσια. Κάθε κουκκίδα αντιπροσωπεύει μία μόνο παρατήρηση, γεγονός που καθιστά ορατό το μέγεθος του δείγματος πίσω από κάθε πλαίσιο.
box_plot +
geom_boxplot() +
geom_dotplot(binaxis = 'y',
dotsize = 1,
stackdir = 'center') +
theme_classic()
Code εξήγηση
- Η geom_dotplot() σχεδιάζει μία κουκκίδα ανά παρατήρηση, στοιβαγμένη μέσα σε κάθε κάδο
- binaxis='y': Αλλάξτε τη θέση των κουκκίδων κατά μήκος του άξονα y. Από προεπιλογή, άξονας x
- dotsize=1: Μέγεθος των κουκκίδων
- stackdir='center': Τρόπος στοίβαξης των κουκκίδων: Τέσσερις τιμές:
- "πάνω" (προεπιλογή),
- "κάτω"
- "κέντρο"
- «Κέντρο»
Παραγωγή:
Έλεγχος Αισθητική του Box Οικόπεδο
Αλλάξτε το χρώμα του κουτιού
Μπορείτε να αλλάξετε τα χρώματα της ομάδας.
ggplot(data_air_nona, aes(x = Month, y = Ozone, color = Month)) + geom_boxplot() + theme_classic()
Code εξήγηση
- Τα χρώματα των ομάδων ελέγχονται στον χάρτη aes()pingΜπορείτε να χρησιμοποιήσετε την εντολή color=Month για να αλλάξετε το χρώμα του κουτιού και του διαγράμματος whisker ανάλογα με τους μήνες.
Παραγωγή:
Box οικόπεδο με πολλαπλές ομάδες
Είναι επίσης δυνατή η προσθήκη πολλών ομάδων. Μπορείτε να απεικονίσετε τη διαφορά στην ποιότητα του αέρα ανάλογα με την ημέρα της μέτρησης.
ggplot(data_air_nona, aes(Month, Ozone)) + geom_boxplot(aes(fill = day_cat)) + theme_classic()
Code εξήγηση
- Ο χάρτης aes()ping του γεωμετρικού αντικειμένου ελέγχει τις ομάδες που θα εμφανίζονται (αυτή η μεταβλητή πρέπει να είναι παράγοντας)
- Το aes(fill= day_cat) επιτρέπει τη δημιουργία τριών πλαισίων για κάθε μήνα στον άξονα x
Παραγωγή:
Box Οικόπεδο με κουκκίδες
Ένας άλλος τρόπος για να δείξετε μεμονωμένες παρατηρήσεις είναι με σημεία με διακύμανση. Η διακύμανση είναι η συνήθης επιλογή όταν ένας κατηγορικός άξονας x προκαλεί πολλά σημεία να προσγειώνονται στην ίδια θέση.
Αυτή η μέθοδος αποφεύγει την επικάλυψηping των διακριτών δεδομένων.
box_plot +
geom_boxplot() +
geom_jitter(shape = 15,
color = "steelblue",
position = position_jitter(width = 0.21)) +
theme_classic()
Code εξήγηση
- Η geom_jitter() προσθέτει μια μικρή τυχαία μετατόπιση σε κάθε σημείο, έτσι ώστε να επικαλύπτονταιping οι αξίες γίνονται ορατές.
- shape=15 αλλάζει το σχήμα των σημείων. Το 15 αντιπροσωπεύει τα τετράγωνα
- color = “ατσάλι μπλε”: Αλλάξτε το χρώμα του σημείου
- position = position_jitter(width = 0.21): ελέγχει πόσο μακριά μετατοπίζονται τα σημεία πλευρικά, μετρούμενη σε μονάδες άξονα x. Η προεπιλογή είναι 40 τοις εκατό της απόστασης μεταξύ των κατηγοριών.
Παραγωγή:
Μπορείτε να δείτε τη διαφορά μεταξύ του πρώτου γραφήματος με τη μέθοδο jitter και του δεύτερου με τη μέθοδο του σημείου.
box_plot +
geom_boxplot() +
geom_point(shape = 5,
color = "steelblue") +
theme_classic()
Οδοντωτός Box Οικόπεδο
Ένα ενδιαφέρον χαρακτηριστικό του geom_boxplot(), είναι μια οδοντωτή συνάρτηση πλαισίου στο R. Το γράφημα εγκοπής περιορίζει το πλαίσιο γύρω από τη διάμεσο. Ο κύριος σκοπός μιας γραφικής παράστασης με εγκοπή είναι να συγκρίνει τη σημασία της διάμεσης τιμής μεταξύ των ομάδων. Υπάρχουν ισχυρές ενδείξεις ότι δύο ομάδες έχουν διαφορετικές διάμεσες τιμές όταν οι εγκοπές δεν επικαλύπτονται. Μια εγκοπή υπολογίζεται ως εξής:
Εδώ, το IQR είναι το διατεταρτημοριακό εύρος και το n είναι ο αριθμός των παρατηρήσεων στην ομάδα. Η εγκοπή εκτείνεται περίπου στο διάστημα εμπιστοσύνης 95% της διάμεσης τιμής.
box_plot +
geom_boxplot(notch = TRUE) +
theme_classic()
Code εξήγηση
- geom_boxplot(notch = TRUE): σχεδιάστε το διάγραμμα κουτιού με εγκοπές γύρω από τη διάμεσο
Παραγωγή:
Πώς να προσθέσετε τίτλους, ετικέτες και προσαρμοσμένα χρώματα σε ένα Box Οικόπεδο σε R
Τα παραπάνω γραφήματα χρησιμοποιούν τις προεπιλογές ggplot2, οι οποίες λαμβάνουν ονόματα μεταβλητών απευθείας από το πλαίσιο δεδομένων. Ένα δημοσιεύσιμο γράφημα χρειάζεται αναγνώσιμες ετικέτες και μια σκόπιμη παλέτα.
Τίτλοι και ετικέτες αξόνων. Μία κλήση labs() ορίζει κάθε στοιχείο κειμένου:
box_plot +
geom_boxplot(fill = "coral", alpha = 0.7) +
labs(title = "Ozone concentration by month",
subtitle = "New York, May to September 1973",
x = "Month",
y = "Ozone (parts per billion)",
caption = "Source: airquality dataset") +
theme_classic()
Επιλέγοντας τα δικά σας χρώματα. Χρησιμοποιήστε την scale_fill_manual() όταν το fill έχει αντιστοιχιστεί μέσα στο aes() και την scale_colour_manual() όταν το χρώμα είναι:
ggplot(data_air_nona, aes(x = Month, y = Ozone, fill = Month)) + geom_boxplot() + scale_fill_manual(values = c("#0e9cd1", "coral", "#7dc27d", "#c9a227", "grey60")) + theme_classic() + theme(legend.position = "none")
Ο υπόμνημα είναι απενεργοποιημένος εδώ επειδή ο άξονας x ήδη ονομάζει κάθε μήνα, επομένως η επανάληψή του θα σπαταλούσε χώρο.
Αναδιάταξη των κουτιών. Τα επίπεδα παραγόντων καθορίζουν τη σειρά στον άξονα. Επειδή ο Μήνας δημιουργήθηκε ως ταξινομημένος παράγοντας, διαβάζεται ήδη χρονολογικά. Για έναν μη ταξινομημένο παράγοντα, ταξινομήστε με βάση τη διάμεσο:
ggplot(data_air_nona, aes(x = reorder(Month, Ozone, FUN = median), y = Ozone)) + geom_boxplot() + theme_classic()
Αποθήκευση του γραφήματος. Η ggsave() γράφει το τελευταίο διάγραμμα στο δίσκο σε μια ανάλυση που ελέγχετε:
ggsave("ozone_boxplot.png", width = 8, height = 5, dpi = 300)
Box Διάγραμμα σε R: Code Αναφορά
Ο παρακάτω πίνακας παραθέτει την κλήση ggplot2 για κάθε παραλλαγή box plot που καλύπτεται παραπάνω:
| Σκοπός | Code |
|---|---|
| Βασικό οικόπεδο κουτιού |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() |
| Αντιστροφή προσανατολισμού |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + coord_flip() |
| Οικόπεδο με εγκοπή |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(notch = TRUE) |
| Box οικόπεδο με ταραγμένες κουκκίδες |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21)) |
| Χρωματισμός ανά ομάδα |
ggplot(df, aes(x = x1, y = y, color = x1)) + geom_boxplot() |
| Πολλαπλές ομάδες ανά κατηγορία |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(aes(fill = x2)) |
| Προσθέστε τον μέσο όρο της ομάδας |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + stat_summary(fun = mean, geom = "point") |
Ελέγξτε επίσης: - R Tutorial για αρχάριους: Μάθετε τη γλώσσα προγραμματισμού R












