मुख्य सामग्री पर जाएं

R में ggplot2 के लिए Facets

इस ट्यूटोरियल में, आप ggplot की facetting फ़ंक्शंस का अधिकतम लाभ उठाना सीखेंगे।
अपडेट किया गया 25 सित॰ 2026  · 8 मि॰ पढ़ें

AI के साथ खोजें

ChatGPTClaudePerplexity

परिचय

Facetting के साथ, आप मल्टी-पैनल प्लॉट बना सकते हैं और नियंत्रित कर सकते हैं कि एक पैनल के स्केल दूसरे पैनल के स्केल से कैसे संबंधित हों।

सरल Facet उपयोग

यदि आप ggplot2 से ज़रा भी परिचित हैं, तो आप ggplot() फ़ंक्शन को कॉल करने की बुनियादी संरचना जानते होंगे। ggplot2 का परिचय पाने के लिए, आप हमारा  ggplot2 कोर्स देख सकते हैं। जब आप ggplot कॉल करते हैं, तो आप एक डेटा स्रोत प्रदान करते हैं, आमतौर पर एक डेटा फ़्रेम, फिर ggplot से कहते हैं कि हमारे डेटा स्रोत के विभिन्न वेरिएबल्स को अलग-अलग एस्थेटिक्स से मैप करे, जैसे x या y-अक्ष की स्थिति या बिंदुओं/बार्स का रंग। Facets के साथ, आपको वेरिएबल्स को मैप करने का एक और तरीका मिलता है। इसे दिखाने के लिए, आप निम्न डेटा सेट का उपयोग करेंगे, जिसमें कुछ देशों के लिए कई आर्थिक संकेतक शामिल हैं। इनमें से अधिकांश GDP, यानी प्रत्येक देश का सकल घरेलू उत्पाद, के रूपांतर हैं।

 print(econdata)
##   Country  GDP_nom  GDP_PPP GDP_nom_per_capita GDP_PPP_per_capita
## 1     USA 19390600 19390600              59501              59495
## 2  Canada  1652412  1769270              45077              48141
## 3   China 12014610 23159107               8643              16807
## 4   Japan  4872135  5428813              38440              42659
## 5  France  2583560  2835746              39869              43550
## 6 Germany  3684816  4170790              44550              50206
## 7  Sweden  3684816   520937              53218              51264
## 8 Ireland   333994   343682              70638              72632
##   GNI_per_capita        Region
## 1          58270 North America
## 2          42870 North America
## 3           8690          Asia
## 4          38550          Asia
## 5          37970        Europe
## 6          43490        Europe
## 7          52590        Europe
## 8          55290        Europe

निम्न वेरिएबल्स मौजूद हैं:

Country: स्पष्टार्थक!

GDP_nom: USD में नाममात्र (nominal) सकल घरेलू उत्पाद

GDP_PPP: विभिन्न क्रय-शक्ति (purchasing power) के लिए समायोजित सकल घरेलू उत्पाद

GDP_nom_per_capita: USD में प्रति व्यक्ति नाममात्र GDP

GDP_PPP_per_capita: प्रति व्यक्ति क्रय-शक्ति समायोजित GDP

GNI_per_capita: प्रत्येक देश की प्रति व्यक्ति सकल राष्ट्रीय आय (GNI)।

Region: दुनिया का वह क्षेत्र जहाँ देश स्थित है।

शुरू करने के लिए, आइए प्रत्येक देश के नाममात्र GDP का एक सरल बारप्लॉट बनाते हैं।

ggplot(econdata, aes(x=Country, y=GDP_nom))+
  geom_bar(stat='identity', fill="forest green")+
  ylab("GDP (nominal)")
plot

आप एक और वेरिएबल, PPP-समायोजित GDP भी प्लॉट कर सकते हैं।

ggplot(econdata, aes(x=Country, y=GDP_PPP))+
  geom_bar(stat='identity', fill="forest green")+
  ylab("GDP (PPP)")
plot

यह आपको दूसरा अलग ग्राफ देता है, जो पिछले वाले जैसा है लेकिन एक अलग वेरिएबल का उपयोग करता है। मान लीजिए आप GDP (nominal) और GDP (PPP) दोनों को साथ में प्लॉट करना चाहते हैं। आप ऐसा करने के लिए facetting का उपयोग करेंगे। पहले, आपको अपने डेटा को पुन: प्रारूपित करना होगा, उसे "wide" फ़ॉर्मेट से बदलकर "long" फ़ॉर्मेट में करना होगा, जहाँ एक कॉलम में माप (measures) हों और दूसरे कॉलम में एक key वेरिएबल हो जो बताए कि प्रत्येक पंक्ति में कौन सा माप उपयोग हुआ है।

econdatalong <- gather(econdata, key="measure", value="value", c("GDP_nom", "GDP_PPP"))

एक बार डेटा इस फ़ॉर्मेट में आ जाए, तो आप facets में प्लॉट करने के लिए हमारे key वेरिएबल का उपयोग कर सकते हैं। आइए एक सरल प्लॉट बनाते हैं, जिसमें नाममात्र GDP (पहले प्लॉट से) और GDP (PPP) (दूसरे प्लॉट से) दोनों दिखें। ऐसा करने के लिए, आप बस अपना कोड संशोधित करके +facet_wrap() जोड़ते हैं और निर्दिष्ट करते हैं कि facetting के लिए ~measure, हमारा key वेरिएबल, उपयोग होना चाहिए।

ggplot(econdatalong, aes(x=Country, y=value))+
  geom_bar(stat='identity', fill="forest green")+
  facet_wrap(~measure)
plot

यह काम करता है, लेकिन आप देखेंगे कि देशों के नाम कितने दबे हुए हैं। आइए अपने पैनल्स को फिर से व्यवस्थित करें।

लेआउट अनुकूलित करना और पुनः क्रमबद्ध करना

facet_wrap() कमांड स्वतः तय कर लेगा कि कितने कॉलम उपयोग करने हैं। आप इसे सीधे ncol= से निर्दिष्ट कर सकते हैं, जैसे:

ggplot(econdatalong, aes(x=Country, y=value))+
  geom_bar(stat='identity', fill="forest green")+
  facet_wrap(~measure,  ncol=1)
plot

आपने शायद ध्यान दिया होगा कि ऊपर x-अक्ष पर देश वर्णक्रमानुसार व्यवस्थित हैं। यदि आप इसे बदलना चाहते हैं, तो सबसे आसान तरीका है Country फैक्टर के स्तर सेट करना। आइए यह पुनः क्रमबद्धता करें, देशों को कुल नाममात्र GDP के क्रम में व्यवस्थित करते हुए।

econdata$Country <- factor(econdata$Country, levels= econdata$Country[order(econdata$GDP_nom)])


econdatalong <- gather(econdata, key="measure", value="value", c("GDP_nom", "GDP_PPP"))


ggplot(econdatalong, aes(x=Country, y=value))+
  geom_bar(stat='identity', fill="forest green")+
  facet_wrap(~measure,  ncol=1)
plot

आप कुछ अतिरिक्त कस्टमाइज़ेशन भी कर सकते हैं, जैसे strip.position आर्गुमेंट के साथ facet लेबल्स को बाईं ओर ले जाना।

ggplot(econdatalong, aes(x=Country, y=value))+
  geom_bar(stat='identity', fill="forest green")+
  facet_wrap(~measure,  ncol=1, strip.position = "left")
plot

Facets को लेबल करना

आपने देखा होगा कि facets के छोटे-से शीर्षक हैं, जो फैक्टर measure के स्तरों से लिए गए हैं। आइए इसे सलीके से करें और अपने facets को बेहतर लेबल दें। इसके लिए, आप एक साधारण लैबलर फ़ंक्शन, variable_labeller, बनाएंगे, जो variable_names के मानों में से किसी के लिए उपयुक्त नाम लौटाएगा। फिर, आप इस फ़ंक्शन को facet_wrap के labeller आर्गुमेंट में पास करेंगे।

variable_names <- list(
  "GDP_nom" = "GDP (nominal)" ,
  "GDP_PPP" = "GDP (purchasing power parity)"
)


variable_labeller <- function(variable,value){
  return(variable_names[value])
}


ggplot(econdatalong, aes(x=Country, y=value))+
  geom_bar(stat='identity', fill="forest green")+
  facet_wrap(~measure,  ncol=1, labeller=variable_labeller)
plot

स्केल्स और स्पेस के साथ काम करना

आइए एक बड़ा faceted प्लॉट बनाते हैं, जिसमें प्रत्येक आर्थिक माप का उपयोग हो।

econdatalong <- gather(econdata, key="measure", value="value", c( "GDP_nom" , "GDP_PPP" ,"GDP_nom_per_capita", "GDP_PPP_per_capita" ,"GNI_per_capita"))

variable_names <- list(
  "GDP_nom" = "GDP (nominal)" ,
  "GDP_PPP" = "GDP (purchasing power parity)",
  "GDP_nom_per_capita" = "GDP (nominal) per capita",
  "GDP_PPP_per_capita" = "GDP (purchasing power parity) per capita",
  "GNI_per_capita"  = "GNI per capita"
)


variable_labeller <- function(variable,value){
  return(variable_names[value])
}



ggplot(econdatalong, aes(x=Country, y=value))+
  geom_bar(stat='identity', fill="forest green")+
  facet_wrap(~measure,  ncol=1, labeller= variable_labeller)+
scale_y_continuous(breaks = pretty(econdatalong$value, n = 10))
plot

यह बिल्कुल भी ठीक नहीं! आप तीन पैनलों के मान देख ही नहीं सकते। ऐसा क्यों? आइए प्राथमिक डेटा पर नज़र डालते हैं ताकि कारण समझें।

summary(econdata)
##     Country     GDP_nom            GDP_PPP         GDP_nom_per_capita
##  Ireland:1   Min.   :  333994   Min.   :  343682   Min.   : 8643     
##  Canada :1   1st Qu.: 2350773   1st Qu.: 1457187   1st Qu.:39512     
##  France :1   Median : 3684816   Median : 3503268   Median :44814     
##  Germany:1   Mean   : 6027118   Mean   : 7202368   Mean   :44992     
##  Sweden :1   3rd Qu.: 6657754   3rd Qu.: 8919260   3rd Qu.:54789     
##  Japan  :1   Max.   :19390600   Max.   :23159107   Max.   :70638     
##  (Other):2                                                           
##  GDP_PPP_per_capita GNI_per_capita            Region
##  Min.   :16807      Min.   : 8690   Asia         :2  
##  1st Qu.:43327      1st Qu.:38405   Europe       :4  
##  Median :49174      Median :43180   North America:2  
##  Mean   :48094      Mean   :42215                    
##  3rd Qu.:53322      3rd Qu.:53265                    
##  Max.   :72632      Max.   :58270                    
##

यदि आप हर कॉलम को देखें, तो दिखेगा कि उनके मान कुछ ऑर्डर-ऑफ-मैग्नीट्यूड तक फैले हुए हैं। डिफ़ॉल्ट रूप से, facetting X और Y-अक्ष दोनों के लिए एक ही लिमिट्स और रेंज का उपयोग करेगा। इसे बदलने के लिए, आप अपने facetting कोड में यह स्निपेट जोड़ सकते हैं: scales="free_y" ताकि प्रत्येक facet अपना स्वतंत्र स्केल उपयोग करे।

ggplot(econdatalong, aes(x=Country, y=value))+
  geom_bar(stat='identity', fill="forest green")+
  facet_wrap(~measure, scales="free_y", ncol=1,  labeller= variable_labeller)
plot

यह अब काफ़ी बेहतर है। प्रत्येक facet के पास अब अपना स्वतंत्र y-अक्ष है।

उप-विभाजन बनाने के लिए Facets का उपयोग

आपने देखा होगा कि हमारे डेटा सेट में Region वेरिएबल भी शामिल है, जो बताता है कि संबंधित देश किस क्षेत्र में स्थित है। आप इस वेरिएबल का उपयोग हमारे बार्स को क्षेत्र के अनुसार रंगने के लिए कर सकते हैं, इस प्रकार:

ggplot(econdatalong, aes(x=Country, y=value, fill=Region))+
  geom_bar(stat='identity')+
  facet_wrap(~measure, scales="free_y", ncol=1, labeller= variable_labeller)
plot

हालाँकि, यह थोड़ा उलझा हुआ है, क्या यह अच्छा न होगा कि आप हर अलग क्षेत्र को अपने-अपने सब-पैनल में रख सकें? Facetting के साथ, आप ऐसा कर सकते हैं! यहाँ आप facet_wrap के बजाय facet_grid का उपयोग करने जा रहे हैं, क्योंकि इससे हमारे facets को दो वेरिएबल्स, Region और measure, पर मैप करना आसान हो जाएगा, जहाँ ये दोनों वेरिएबल्स प्लॉट्स की ग्रिड की पंक्तियों और स्तंभों में फैल जाते हैं। ध्यान दें कि आप scales="free" और space="free" भी सेट कर रहे हैं, जिससे विभिन्न पैनल अलग-अलग मात्रा में स्पेस ले सकें। आपको एक नया लैबलर फ़ंक्शन भी बनाना होगा, जो पंक्तियों और स्तंभों दोनों के लिए नाम उत्पन्न करेगा।

variable_names <- list(
  "GDP_nom" = "GDP \n(nominal)" ,
  "GDP_PPP" = "GDP \n(PPP)",
  "GDP_nom_per_capita" = "GDP (nominal)\n per capita",
  "GDP_PPP_per_capita" = "GDP (PPP)\n per capita",
  "GNI_per_capita"  = "GNI \nper capita"
)



region_names <- levels(econdata$Region)


variable_labeller2 <- function(variable,value){
  if (variable=='measure') {
  return(variable_names[value])
  } else {
    return(region_names)
  }
}

ggplot(econdatalong, aes(x=Country, y=value, fill=Region))+
  geom_bar(stat='identity')+
  facet_grid(measure~Region, scales="free", space="free_x",  labeller= variable_labeller2)
plot

अब यह बहुत स्पष्ट है! प्रत्येक क्षेत्र के पास अपने पैनल्स का एक कॉलम है, और प्रत्येक मेट्रिक के पास अपनी बार्स की एक पंक्ति है।

यही इस ट्यूटोरियल का समापन है। आशा है कि आपको facets के बारे में सीखना अच्छा लगा।

यदि आप facets के बारे में और सीखना चाहते हैं, तो DataCamp का Visualizing Big Data with Trelliscope कोर्स लें।

हमारा Getting Started with the Tidyverse: Tutorial देखें।

विषय
R
डेटा साइंस

R कोर्स

{count, plural, one {कोर्स} other {कोर्स}}

R परिचय

{hours} घंटा
3.1M
R में डेटा विश्लेषण की मूल बातें सीखें, जिसमें vectors, lists, और data frames शामिल हैं, और वास्तविक data sets के साथ R का अभ्यास करें।
विवरण देखेंRight Arrow
पाठ्यक्रम शुरू करें

{count, plural, one {कोर्स} other {कोर्स}}

Tidyverse परिचय

{hours} घंटा
398.4K
tidyverse के साथ अपने डेटा को एक्सप्लोर और विज़ुअलाइज़ करना शुरू करें, R में डेटा विज्ञान टूल्स का एक शक्तिशाली, लोकप्रिय संग्रह।
और देखेंRight Arrow