R में boxplot(): कैसे बनाएं BoxRStudio में प्लॉट

⚡ स्मार्ट सारांश

BoxR में plot फ़ंक्शन ggplot2 के geom_boxplot() फ़ंक्शन का उपयोग करके किसी संख्यात्मक वितरण को उसके माध्यिका, चतुर्थक, व्हिस्कर और आउटलायर्स के माध्यम से सारांशित करता है। यह चरण-दर-चरण प्रक्रिया वायु गुणवत्ता डेटासेट पर एक बॉक्स प्लॉट बनाने और उस पर रंग, बिंदु, जिटर, नॉच और समूह तुलनाओं को परत दर परत लागू करने का तरीका बताती है।

  • 📐 पांच-संख्या सारांश: बॉक्स पहले से तीसरे चतुर्थक तक फैला हुआ है, रेखा माध्यिका को दर्शाती है, और व्हिस्कर्स अंतरचतुर्थक सीमा के 1.5 गुना तक पहुँचते हैं।
  • 🧱 मूल वाक्य संरचना: ggplot(df, aes(x = group, y = value)) + geom_boxplot() समूह के प्रत्येक स्तर के लिए एक बॉक्स उत्पन्न करता है।ping कारक।
  • 🔴 आउटलायर स्टाइलिंग: outlier.colour, outlier.shape और outlier.size यह नियंत्रित करते हैं कि मूंछों के बाहर के बिंदुओं को कैसे चित्रित किया जाता है।
  • 💠 अवलोकन प्रदर्शित करना: geom_jitter() ओवरलैप को विस्थापित करता हैping किनारों की ओर इशारा करते हुए, प्रत्येक बॉक्स के पीछे नमूने का आकार प्रकट होता है।
  • 📉 नोकदार Boxहै: notch = TRUE माध्यिका का विश्वास अंतराल खींचता है, और गैर-अतिव्यापीping खांचे वास्तविक अंतर को दर्शाते हैं।
  • 🎨 Grouping: नक्शाping fill inside geom_boxplot() प्रत्येक श्रेणी को कई अगल-बगल के बॉक्स में विभाजित करता है।

BoxR में प्लॉट करें

आर में बॉक्सप्लॉट()

आर में बॉक्सप्लॉट() क्वार्टाइल द्वारा डेटा के वितरण को देखने और आउटलायर्स की उपस्थिति का पता लगाने में मदद करता है। आप R में boxplot() बनाने के लिए ggplot2 लाइब्रेरी से ज्यामितीय ऑब्जेक्ट geom_boxplot() का उपयोग कर सकते हैं।

हम R में boxplot() फ़ंक्शन को ggplot फ़ंक्शन के साथ पेश करने के लिए airquality डेटासेट का उपयोग करेंगे। इस डेटासेट में मई से सितंबर 1973 तक न्यूयॉर्क में दैनिक वायु गुणवत्ता माप दर्ज हैं और इसमें 153 अवलोकन शामिल हैं। हम निम्नलिखित चरों का उपयोग करेंगे:

  • ओजोन: संख्यात्मक चर
  • पवन: संख्यात्मक चर
  • महीना: मई से सितंबर. संख्यात्मक चर

इसे बनाने से पहले, यह जानना जरूरी है कि बॉक्स का प्रत्येक भाग वास्तव में क्या दर्शाता है।

कैसे पढ़ें Box प्लॉट: चतुर्थक, आईक्यूआर और आउटलायर्स

बॉक्स प्लॉट का प्रत्येक तत्व पांच-संख्या सारांश से एक संख्या को एन्कोड करता है। यह जानना कि कौन सा तत्व क्या दर्शाता है, चार्ट को केवल सजावट से विश्लेषण में बदल देता है।

  • निचला कब्ज़ा: पहला चतुर्थक, Q1। पच्चीस प्रतिशत अवलोकन इसके नीचे स्थित हैं।
  • मध्य रेखा: दूसरा चतुर्थक। बॉक्स के अंदर इसकी स्थिति विषमता को दर्शाती है: नीचे की ओर धकेली गई रेखा का अर्थ है कि डेटा दाईं ओर विषम है।
  • ऊपरी कब्ज़ा: तीसरा चतुर्थक, Q3। 75 प्रतिशत अवलोकन इसके नीचे स्थित हैं।
  • Box ऊंचाई: अंतरचतुर्थक सीमा, आईक्यूआर = क्यू3 - क्यू1, जिसमें डेटा का मध्य भाग होता है और यह प्रसार का मानक मजबूत माप है।
  • मूंछें: वे निकटतम हिंज के आईक्यूआर के 1.5 गुना के भीतर सबसे चरम अवलोकन तक विस्तारित होते हैं। वे न्यूनतम और अधिकतम नहीं हैं।
  • मूंछों से परे के बिंदु: 1.5 आईक्यूआर नियम द्वारा आउटलायर्स के रूप में चिह्नित अवलोकन।

दो सावधानियां। पहली, यहां "आउटलायर" एक सांख्यिकीय संकेत है, त्रुटि नहीं: ओजोन सांद्रता जैसे विषम वितरण में, उच्च मान अपेक्षित होते हैं और उन्हें हटाया नहीं जाना चाहिए। दूसरी, बॉक्स प्लॉट वितरण के आकार को छिपा देता है, इसलिए समान बॉक्स वाले दो समूहों में अंतर्निहित डेटा बहुत भिन्न हो सकता है। नीचे दिखाए गए अनुसार जिटर्ड पॉइंट्स जोड़ने से इससे बचाव होता है।

Box R में प्लॉट बनाम हिस्टोग्राम बनाम वायलिन प्लॉट

ये तीनों चार्ट एक संख्यात्मक वितरण का वर्णन करते हैं, लेकिन प्रत्येक चार्ट कुछ ऐसा प्रकट करता है जिसे अन्य चार्ट छिपाते हैं।

मापदंड Box भूखंड हिस्टोग्राम वायलिन प्लॉट
दिखाता है माध्यिका, चतुर्थक, आउटलायर्स प्रत्येक बिन में आवृत्ति पूर्ण घनत्व वक्र
Revकई चोटियाँ नहीं हाँ हाँ
झंडे असामान्य हैं हाँ, स्पष्ट रूप से केवल दृष्टिगत रूप से प्रत्यक्ष नहीं
कई समूहों की तुलना करना उत्कृष्ट अजीब अच्छा
ट्यूनिंग विकल्प की आवश्यकता है नहीं हां, कूड़ेदान की गिनती हाँ, बैंडविड्थ
ggplot2 ऑब्जेक्ट जियोम_बॉक्सप्लॉट() जियोम_हिस्टोग्राम() जियोम_वायलिन()

एक सामान्य समझौता यह है कि एक वायलिन प्लॉट बनाया जाए जिसके अंदर एक संकीर्ण बॉक्स प्लॉट हो, जिससे घनत्व का आकार और चतुर्थक सारांश एक ही चार्ट में बना रहे। देखें हिस्टोग्राम ट्यूटोरियल तुलना के बिनिंग पक्ष के लिए।

बनाएं Box भूखंड

इससे पहले कि आप R में अपना पहला boxplot() बनाना शुरू करें, आपको डेटा को निम्नानुसार हेरफेर करना होगा:

  • चरण 1: डेटा आयात करें
  • चरण 2: अनावश्यक चर हटाएँ
  • चरण 3: महीने को क्रमित गुणनखंड में परिवर्तित करें
  • चरण 4: प्रत्येक माह को तीन भागों में विभाजित करते हुए एक नया श्रेणीबद्ध चर बनाएं: प्रारंभ, मध्य और अंत।
  • चरण 5: लुप्त अवलोकनों को हटाएं

ये सभी चरण dplyr और पाइपलाइन ऑपरेटर %>% के साथ किए जाते हैं।

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(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 बॉक्सप्लॉट में पास करते हैं।
    • Aes() तर्क के अंदर, आप x-अक्ष और y-अक्ष जोड़ते हैं।
    • + चिह्न का मतलब है कि आप चाहते हैं कि R कोड को पढ़ता रहे। यह कोड को तोड़कर उसे अधिक पठनीय बनाता है।
    • बॉक्स प्लॉट बनाने के लिए geom_boxplot() का उपयोग करें

आउटपुट:

बुनियादी Box भूखंड

ग्राफ़ का पक्ष बदलें

आप ग्राफ के किनारे को पलट सकते हैं।

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: आउटलायर का आकार बदलें। 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 = “बिंदु”: एक बिंदु के साथ औसत प्लॉट करें
  • आकार=3: बिंदु का आकार
  • रंग = "स्टीलब्लू": बिंदुओं का रंग

आउटपुट:

सारांश सांख्यिकी जोड़ें

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 बिन्दुओं के साथ प्लॉट

सौंदर्यबोध को नियंत्रित करें Box भूखंड

बॉक्स का रंग बदलें

आप समूह का रंग बदल सकते हैं.

ggplot(data_air_nona, aes(x = Month, y = Ozone, color = Month)) +
    geom_boxplot() +
    theme_classic()

Code व्याख्या

  • समूहों के रंगों को aes() मैप में नियंत्रित किया जाता है।pingआप महीने के अनुसार बॉक्स और व्हिस्कर प्लॉट का रंग बदलने के लिए color= Month का उपयोग कर सकते हैं।

आउटपुट:

का रंग बदलें Box

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 एकाधिक समूहों के साथ प्लॉट करें

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 मूल्य स्पष्ट हो जाते हैं।
  • आकृति=15 बिंदुओं का आकार बदलता है। 15 वर्गों को दर्शाता है
  • रंग = “स्टीलब्लू”: बिंदु का रंग बदलें
  • position = position_jitter(width = 0.21): यह नियंत्रित करता है कि बिंदुओं को x-अक्ष इकाइयों में मापी गई पार्श्व दिशा में कितनी दूर तक विस्थापित किया जाता है। डिफ़ॉल्ट मान श्रेणियों के बीच की दूरी का 40 प्रतिशत है।

आउटपुट:

Box घबराये हुए बिंदुओं के साथ प्लॉट

आप जिटर विधि से प्राप्त पहले ग्राफ और बिंदु विधि से प्राप्त दूसरे ग्राफ के बीच अंतर देख सकते हैं।

box_plot +
    geom_boxplot() +
    geom_point(shape = 5,
        color = "steelblue") +
    theme_classic()

Box घबराये हुए बिंदुओं के साथ प्लॉट

नोकदार Box भूखंड

geom_boxplot() की एक दिलचस्प विशेषता, R में एक नोचेड बॉक्सप्लॉट फ़ंक्शन है। नोच प्लॉट मीडियन के चारों ओर बॉक्स को संकीर्ण करता है। नोचेड बॉक्स प्लॉट का मुख्य उद्देश्य समूहों के बीच मीडियन के महत्व की तुलना करना है। इस बात के पुख्ता सबूत हैं कि जब नोच ओवरलैप नहीं होते हैं तो दो समूहों के मीडियन अलग-अलग होते हैं। नोच की गणना इस प्रकार की जाती है:

नोकदार Box भूखंड

यहां IQR अंतरचतुर्थक परास है और n समूह में प्रेक्षणों की संख्या है। यह रेखा माध्यिका के लगभग 95 प्रतिशत विश्वास अंतराल को कवर करती है।

box_plot +
    geom_boxplot(notch = TRUE) +
    theme_classic()

Code व्याख्या

  • geom_boxplot(notch = TRUE): माध्यिका के चारों ओर खांचे बनाकर बॉक्स प्लॉट बनाएं

आउटपुट:

नोकदार Box भूखंड

किसी फ़ाइल में शीर्षक, लेबल और कस्टम रंग कैसे जोड़ें 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()

अपने मनपसंद रंग चुनें। जब fill को aes() के अंदर मैप किया जाता है तो scale_fill_manual() का उपयोग करें, और जब colour को मैप किया जाता है तो 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 कॉल सूचीबद्ध है:

उद्देश्य 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")

यह भी जांचें: - शुरुआती लोगों के लिए आर ट्यूटोरियल: आर प्रोग्रामिंग भाषा सीखें

अक्सर पूछे जाने वाले प्रश्न

व्हिस्कर निकटतम चतुर्थक के अंतरचतुर्थक रेंज के 1.5 गुना के भीतर स्थित सबसे चरम अवलोकन तक पहुँचते हैं। ये न्यूनतम और अधिकतम बिंदु नहीं हैं, और इनसे परे किसी भी बिंदु को आउटलायर बिंदु के रूप में दर्शाया जाता है।

स्वचालित रूप से नहीं। 1.5 IQR नियम एक परंपरा है, त्रुटि का प्रमाण नहीं। पहले प्रत्येक बिंदु की जांच करें: ओजोन रीडिंग जैसे तिरछे डेटा स्वाभाविक रूप से उच्च मान उत्पन्न करते हैं जो वास्तविक माप होते हैं।

ओवरलैपping निशान बताते हैं कि इस बात का कोई पुख्ता सबूत नहीं है कि दोनों माध्यिकाएँ भिन्न हैं। गैर-अतिव्यापीping निशान संभावित वास्तविक अंतर को दर्शाते हैं, जो लगभग 95 प्रतिशत विश्वास तुलना के बराबर होता है।

Box प्रशिक्षण से पहले प्लॉट बनाना एक मानक प्रारंभिक चरण है: इससे विषमता, असामान्य मान और विभिन्न वर्गों में भिन्न फीचर स्केल का पता चलता है। टीमें इनका उपयोग क्रॉस-वैलिडेशन फोल्ड में मॉडल की सटीकता की तुलना करने के लिए भी करती हैं।

जी हां। एआई सहायक त्रुटियों को समझा सकते हैं, जैसे कि निरंतर x-अक्ष द्वारा एक ही बॉक्स का बनना, और सही aes() मैप का सुझाव दे सकते हैं।pingऔर fun.y जैसे अप्रचलित आर्गुमेंट्स को चिह्नित करें। हमेशा संशोधित कोड को अपने डेटा पर दोबारा चलाएँ।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: