Last chance! 50% off DataCamp Premium
Sale ends in
Facetting के साथ, आप मल्टी-पैनल प्लॉट बना सकते हैं और नियंत्रित कर सकते हैं कि एक पैनल के स्केल दूसरे पैनल के स्केल से कैसे संबंधित हों।
यदि आप 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)")

आप एक और वेरिएबल, PPP-समायोजित GDP भी प्लॉट कर सकते हैं।
ggplot(econdata, aes(x=Country, y=GDP_PPP))+
geom_bar(stat='identity', fill="forest green")+
ylab("GDP (PPP)")

यह आपको दूसरा अलग ग्राफ देता है, जो पिछले वाले जैसा है लेकिन एक अलग वेरिएबल का उपयोग करता है। मान लीजिए आप 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)

यह काम करता है, लेकिन आप देखेंगे कि देशों के नाम कितने दबे हुए हैं। आइए अपने पैनल्स को फिर से व्यवस्थित करें।
facet_wrap() कमांड स्वतः तय कर लेगा कि कितने कॉलम उपयोग करने हैं। आप इसे सीधे ncol= से निर्दिष्ट कर सकते हैं, जैसे:
ggplot(econdatalong, aes(x=Country, y=value))+
geom_bar(stat='identity', fill="forest green")+
facet_wrap(~measure, ncol=1)

आपने शायद ध्यान दिया होगा कि ऊपर 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)

आप कुछ अतिरिक्त कस्टमाइज़ेशन भी कर सकते हैं, जैसे 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")

आपने देखा होगा कि 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)

आइए एक बड़ा 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))

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

यह अब काफ़ी बेहतर है। प्रत्येक facet के पास अब अपना स्वतंत्र y-अक्ष है।
आपने देखा होगा कि हमारे डेटा सेट में 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)

हालाँकि, यह थोड़ा उलझा हुआ है, क्या यह अच्छा न होगा कि आप हर अलग क्षेत्र को अपने-अपने सब-पैनल में रख सकें? 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)

अब यह बहुत स्पष्ट है! प्रत्येक क्षेत्र के पास अपने पैनल्स का एक कॉलम है, और प्रत्येक मेट्रिक के पास अपनी बार्स की एक पंक्ति है।
यही इस ट्यूटोरियल का समापन है। आशा है कि आपको facets के बारे में सीखना अच्छा लगा।
यदि आप facets के बारे में और सीखना चाहते हैं, तो DataCamp का Visualizing Big Data with Trelliscope कोर्स लें।
हमारा Getting Started with the Tidyverse: Tutorial देखें।
R कोर्स
{count, plural, one {कोर्स} other {कोर्स}}
{count, plural, one {कोर्स} other {कोर्स}}
{count, plural, one {कोर्स} other {कोर्स}}