ggplot2 का उपयोग करके R में स्कैटर प्लॉट बनाना (उदाहरण सहित)

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

R में ggplot2 का उपयोग करके स्कैटर प्लॉट geom_point() का उपयोग करके दो सतत चर को x और y अक्षों पर मैप करता है। यह चरण-दर-चरण प्रक्रिया समूह निर्माण को कवर करती है।ping रंग, लॉग रूपांतरण, फिटेड रिग्रेशन लाइन, लेबल, फ़ेसिंग, ओवरप्लॉटिंग फ़िक्स, स्केल, थीम और सेविंग के आधार पर।

  • 📍 मूल वाक्य संरचना: ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point() डेटा और मैप से प्लॉट बनाता हैpingऔर ज्यामिति।
  • 🎨 समूह रंग भरना: geom_point() के अंदर aes(color = factor(gear)) बिंदुओं को प्रति कारक स्तर एक रंग में विभाजित करता है।
  • 📈 रुझान रेखाएँ: stat_smooth(method = “lm”) एक फिटेड रिग्रेशन लाइन को ओवरले करता है, और se = FALSE कॉन्फिडेंस बैंड को हटा देता है।
  • फेसटिंग: facet_wrap() एक साझा पैमाने पर प्रति समूह एक पैनल बनाता है, जो हर श्रृंखला को एक ही चार्ट में समेटने से बेहतर है।
  • 🔁 ओवरप्लॉटिंग: मार्करों के एक दूसरे पर जमा होने पर अल्फा को कम करें, बिंदुओं को जिटर करें, या geom_hex() पर स्विच करें।
  • 💾 निर्यात: ggsave(“plot.png”, width = 8, height = 5, dpi = 300) अंतिम प्लॉट को वर्किंग डायरेक्टरी में लिखता है।

ggplot2 का उपयोग करके R में स्कैटर प्लॉट

डेटा विश्लेषण में ग्राफ़ क्यों महत्वपूर्ण हैं?

ग्राफ़ डेटा विश्लेषण की प्रक्रिया का तीसरा भाग है। पहला भाग इस बारे में है डेटा पूर्वtracउत्पादन, दूसरा भाग इससे संबंधित है डेटा को साफ करना और उसमें हेरफेर करना. अंत में, डेटा वैज्ञानिक को इसकी आवश्यकता हो सकती है अपने परिणामों को ग्राफ़िक रूप से संप्रेषित करें.

नीचे दिए गए चित्र में डेटा साइंटिस्ट के कार्यप्रवाह को संक्षेप में दर्शाया गया है।

  • डेटा वैज्ञानिक का पहला काम एक शोध प्रश्न को परिभाषित करना है। यह शोध प्रश्न परियोजना के उद्देश्यों और लक्ष्यों पर निर्भर करता है।
  • उसके बाद, सबसे प्रमुख कार्यों में से एक फीचर इंजीनियरिंग है। डेटा वैज्ञानिक को डेटा एकत्र करने, उसमें हेरफेर करने और उसे साफ करने की आवश्यकता होती है
  • जब यह चरण पूरा हो जाता है, तो वह डेटासेट का अन्वेषण शुरू कर सकता है। कभी-कभी, किसी नई खोज के कारण मूल परिकल्पना को परिष्कृत करना और बदलना आवश्यक होता है।

आर में स्कैटर प्लॉट

  • जब व्याख्यात्मक विश्लेषण प्राप्त करने के लिए, डेटा वैज्ञानिक को पाठक की क्षमता पर विचार करना होगा अंतर्निहित अवधारणाओं और मॉडलों को समझें.
  • उनके परिणामों को ऐसे प्रारूप में प्रस्तुत किया जाना चाहिए जिसे सभी हितधारक समझ सकें। संवाद परिणाम एक के माध्यम से है ग्राफ.
  • जटिल विश्लेषण को सरल बनाने के लिए ग्राफ एक अविश्वसनीय उपकरण है।

इस ट्यूटोरियल के बाकी हिस्से में ggplot2 पैकेज का उपयोग करके उन ग्राफ़ का निर्माण किया गया है।

ggplot2 पैकेज

यह ट्यूटोरियल R में ggplot2 का उपयोग करके चार्ट बनाने पर केंद्रित है।

इस ट्यूटोरियल में, आप ggplot2 पैकेज का उपयोग करेंगे। यह पैकेज लेलैंड विल्किंसन द्वारा 2005 में वर्णित ग्राफिक्स के व्याकरण को लागू करता है। ggplot2 लचीला है, कई थीम के साथ आता है, और आपको उच्च स्तर की स्पष्टता के साथ प्लॉट निर्दिष्ट करने की सुविधा देता है।tracध्यान दें कि यह त्रि-आयामी या इंटरैक्टिव ग्राफिक्स उत्पन्न नहीं करता है; इसके लिए plotly या rgl जैसे पैकेज की आवश्यकता होती है।

ggplot2 में, एक ग्राफ निम्नलिखित तर्कों से बना होता है:

  • तिथि
  • सौंदर्य मानचित्रping
  • ज्यामितीय वस्तु
  • सांख्यिकीय रूपांतरण
  • तराजू
  • समन्वय प्रणाली
  • स्थिति समायोजन
  • faceting

आप ट्यूटोरियल में सीखेंगे कि उन तर्कों को कैसे नियंत्रित किया जाए।

ggplot2 का मूल सिंटैक्स है:

ggplot(data, mapping=aes()) +
geometric object 

arguments: 
data: Dataset used to plot the graph
mapping: Control the x and y-axis 
geometric object: The type of plot you want to show. The most common object are:
 
- Point: `geom_point()` 
- Bar: `geom_bar()`
- Line: `geom_line()` 
- Histogram: `geom_histogram()`

R में स्कैटर प्लॉट कैसे बनाएं

आइए देखें कि ggplot mtcars डेटासेट के साथ कैसे काम करता है। आप mpg वेरिएबल और drat वेरिएबल का स्कैटरप्लॉट प्लॉट करके शुरू करते हैं।

बुनियादी स्कैटर प्लॉट

library(ggplot2)
ggplot(mtcars, aes(x = drat, y = mpg)) +
    geom_point()

Code व्याख्या

  • आप सबसे पहले डेटासेट mtcars को ggplot में पास करें।
  • Aes() तर्क के अंदर, आप x-अक्ष और y-अक्ष जोड़ते हैं।
  • + चिह्न का मतलब है कि आप चाहते हैं कि R कोड को पढ़ता रहे। यह कोड को तोड़कर उसे अधिक पठनीय बनाता है।
  • ज्यामितीय ऑब्जेक्ट के लिए geom_point() का उपयोग करें।

आउटपुट:

बेसिक स्कैटर प्लॉट

समूहों के साथ स्कैटर प्लॉट

कभी-कभी, डेटा के एक समूह (अर्थात् कारक स्तर डेटा) द्वारा मूल्यों में अंतर करना दिलचस्प हो सकता है।

ggplot(mtcars, aes(x = mpg, y = drat)) +
    geom_point(aes(color = factor(gear)))

Code व्याख्या

  • geom_point() के अंदर मौजूद aes() फ़ंक्शन प्रत्येक समूह के रंग को नियंत्रित करता है।ping वेरिएबल एक फैक्टर होना चाहिए, इसलिए गियर को फैक्टर() में लपेटा गया है।
  • कुल मिलाकर, आपके पास कोड aes(color = Factor(gear)) है जो बिंदुओं का रंग बदलता है।

आउटपुट:

समूहों के साथ स्कैटर प्लॉट

लॉग रूपांतरण के साथ अक्षीय पैमाने को बदलें

डेटा को रीस्केल करना विश्लेषक के काम का एक बड़ा हिस्सा है, क्योंकि कच्चे चर शायद ही कभी एक सुव्यवस्थित बेल के आकार में प्राप्त होते हैं। लघुगणक लेना चरम मानों को संपीड़ित करने और प्लॉट को आउटलायर्स के प्रति कम संवेदनशील बनाने का एक तरीका है।

ggplot(mtcars, aes(x = log(mpg), y = log(drat))) +
    geom_point(aes(color = factor(gear)))

Code व्याख्या

  • आप aes() मैप के अंदर ही log() फ़ंक्शन में x और y वेरिएबल्स को सीधे रूपांतरित करते हैं।ping.

ध्यान दें कि मानकीकरण या सामान्यीकरण जैसे किसी भी अन्य परिवर्तन को लागू किया जा सकता है।

आउटपुट:

अक्ष बदलें

फिट किए गए मानों के साथ स्कैटर प्लॉट

आप ग्राफ़ में जानकारी का एक और स्तर जोड़ सकते हैं। आप फिट किए गए मानों को ओवरले कर सकते हैं। रेखीय प्रतिगमन.

my_graph <- ggplot(mtcars, aes(x = log(mpg), y = log(drat))) +
    geom_point(aes(color = factor(gear))) +
    stat_smooth(method = "lm",
        col = "#C42126",
        se = FALSE,
        size = 1)
my_graph

Code व्याख्या

  • my_graph: प्लॉट को my_graph ऑब्जेक्ट में संग्रहीत किया जाता है, इसलिए बाद के चरणों में पूरी प्रक्रिया को दोहराए बिना परतें जोड़ी जा सकती हैं।
  • तर्क stat_smooth() स्मूथिंग विधि को नियंत्रित करता है
  • विधि = “lm”: रैखिक प्रतिगमन
  • कॉलम = “#C42126”: Code रेखा के लाल रंग के लिए
  • se = FALSE: मानक त्रुटि प्रदर्शित न करें
  • size = 1: रेखा की मोटाई। ggplot2 3.4.0 और उसके बाद के संस्करणों में, रेखा ज्यामिति के लिए इस तर्क का नाम बदलकर linewidth कर दिया गया था।

आउटपुट:

फिटेड मानों के साथ स्कैटर प्लॉट

ध्यान दें कि अन्य समतलीकरण विधियाँ भी उपलब्ध हैं

  • GLM
  • गम
  • लोएस: 1,000 से कम प्रेक्षणों के लिए डिफ़ॉल्ट मान
  • rlm: MASS पैकेज से प्राप्त एक मजबूत रैखिक मॉडल

चार्ट को स्टाइल करने से पहले, यह जानना जरूरी है कि स्कैटर प्लॉट कब सही विकल्प होता है।

स्कैटर प्लॉट बनाम लाइन चार्ट बनाम BubblR में ई चार्ट

तीनों ही प्लॉट दो सतत चरों को एक दूसरे के विरुद्ध दर्शाते हैं, इसलिए चुनाव इस बात पर निर्भर करता है कि पाठक को इससे क्या निष्कर्ष निकालना चाहिए।

मापदंड स्कैटर प्लॉट लाइन चार्ट Bubblई चार्ट
दिखाता है दो चरों के बीच सहसंबंध एक चर का क्रमित अक्ष पर परिवर्तन सहसंबंध और एक तीसरा परिमाण
X- अक्ष कोई भी सतत चर आमतौर पर समय या कोई अन्य क्रमबद्ध पैमाना कोई भी सतत चर
पॉइंट ऑर्डर अप्रासंगिक महत्वपूर्ण बिंदु आपस में जुड़े हुए हैं अप्रासंगिक
तीसरा चर रंग या आकार के माध्यम से अलग-अलग लाइनों के माध्यम से बिंदु आकार के माध्यम से
ggplot2 कॉल जियोम_पॉइंट() जियोम_लाइन() geom_point(aes(size = z))

जब x-अक्ष का कोई प्राकृतिक क्रम न हो तो बिखरे हुए बिंदुओं को रेखा से जोड़ना एक आम गलती है: यह एक ऐसे क्रम का संकेत देता है जो मौजूद नहीं है। geom_line() फ़ंक्शन का उपयोग केवल क्रमबद्ध अक्षों जैसे कि तिथियों के लिए करें। एकल चर के वितरण के लिए, किसी अन्य फ़ंक्शन का उपयोग करें। रेखा - चित्र बजाय.

ग्राफ़ में जानकारी जोड़ें

अभी तक ग्राफ़ में कोई व्याख्यात्मक पाठ नहीं है। पाठक को अतिरिक्त दस्तावेज़ देखे बिना, केवल चार्ट से ही डेटा में छिपी कहानी समझ आ जानी चाहिए, जिसका अर्थ है कि चार्ट में अच्छे लेबल होने चाहिए। आप labs() फ़ंक्शन का उपयोग करके लेबल जोड़ सकते हैं।

labs() फ़ंक्शन का मूल सिंटैक्स इस प्रकार है:

labs(title = "Hello Guru99")
arguments:
- title: Main title displayed above the plot
- subtitle: Secondary line below the title
- caption: Note below the plot, usually the data source
- x: Rename the x-axis
- y: Rename the y-axis
- color / fill: Rename the legend

Example: labs(title = "Hello Guru99", subtitle = "My first plot")

एक शीर्षक जोड़ें

जोड़ने के लिए एक अनिवार्य जानकारी स्पष्ट रूप से शीर्षक है।

my_graph +
    labs(
        title = "Plot Mile per hours and drat, in log"
         )

Code व्याख्या

  • my_graph: आप अपने द्वारा संग्रहीत ग्राफ़ का उपयोग करते हैं। यह हर बार जब आप ग्राफ़ में नई जानकारी जोड़ते हैं तो सभी कोड को फिर से लिखने से बचाता है।
  • आप शीर्षक को labs() के अंदर रखते हैं।

आउटपुट:

शीर्षक जोड़ें

गतिशील नाम वाला शीर्षक जोड़ें

गतिशील शीर्षक शीर्षक में अधिक सटीक जानकारी जोड़ने में सहायक होता है।

आप स्थिर टेक्स्ट और गतिशील टेक्स्ट को प्रिंट करने के लिए पेस्ट() फ़ंक्शन का उपयोग कर सकते हैं। पेस्ट() का मूल सिंटैक्स है:

paste("This is a text", A)
arguments
- " ": Text inside the quotation marks are the static text
- A: Display the variable stored in A
- Note you can add as much static text and variable as you want. You need to separate them with a comma	

उदाहरण:

A <- 2010
paste("The first year is", A)

आउटपुट:

## [1] "The first year is 2010"
B <- 2018
paste("The first year is", A, "and the last year is", B)

आउटपुट:

## [1] "The first year is 2010 and the last year is 2018"

आप हमारे ग्राफ में एक गतिशील नाम जोड़ सकते हैं, अर्थात् mpg का औसत।

mean_mpg <- mean(mtcars$mpg)
my_graph + labs(
    title = paste("Plot Mile per hours and drat, in log. Average mpg is", mean_mpg)
)

Code व्याख्या

  • आप mean_mpg चर में संग्रहीत mean(mtcars$mpg) के साथ mpg का औसत बनाते हैं
  • आप mean_mpg के साथ paste() का उपयोग करके mpg का औसत मान लौटाने वाला एक गतिशील शीर्षक बना सकते हैं

आउटपुट:

गतिशील नाम के साथ शीर्षक जोड़ें

उपशीर्षक जोड़ें

दो और विवरण ग्राफ को और अधिक स्पष्ट बनाते हैं। आप उपशीर्षक और कैप्शन की बात कर रहे हैं। उपशीर्षक शीर्षक के ठीक नीचे आता है। कैप्शन से पता चलता है कि गणना किसने की और डेटा का स्रोत क्या है।

my_graph +
    labs(
        title =
        "Relation between Mile per hours and drat",
        subtitle =
        "Relationship break down by gear class",
        caption = "Authors own computation"
    )

Code व्याख्या

  • labs() के अंदर, आपने यह जोड़ा:
    • शीर्षक = “मील प्रति घंटा और ड्रैट के बीच संबंध”: शीर्षक जोड़ें
    • उपशीर्षक = “गियर वर्ग के अनुसार संबंध टूटना”: उपशीर्षक जोड़ें
    • कैप्शन = “लेखक की अपनी गणना: कैप्शन जोड़ें
    • आप प्रत्येक नई जानकारी को अल्पविराम से अलग करते हैं, ,
  • ध्यान रखें कि आप कोड की पंक्तियों को तोड़ते हैं। यह अनिवार्य नहीं है, और यह केवल कोड को अधिक आसानी से पढ़ने में मदद करता है

आउटपुट:

उपशीर्षक जोड़ें

x-अक्ष और y-अक्ष का नाम बदलें

कॉलम के नाम अक्सर प्रस्तुति के लिए उपयुक्त नहीं होते। वे अक्सर संक्षिप्त रूप में होते हैं या शब्दों के बीच अंडरस्कोर का उपयोग करते हैं, जैसे GDP_CAP। प्लॉट पर उनका नाम बदलें और जहां आवश्यक हो वहां इकाइयां जोड़ें।

my_graph +
    labs(
        x = "Drat definition",
        y = "Mile per hours",
        color = "Gear",
        title = "Relation between Mile per hours and drat",
        subtitle = "Relationship break down by gear class",
        caption = "Authors own computation"
    )

Code व्याख्या

  • labs() के अंदर, आपने यह जोड़ा:
    • x = “Drat परिभाषा”: x-अक्ष का नाम बदलें
    • y = “मील प्रति घंटा”: y-अक्ष का नाम बदलें

आउटपुट:

x-अक्ष और y-अक्ष का नाम बदलें

तराजू पर नियंत्रण रखें

आप अक्ष के पैमाने को नियंत्रित कर सकते हैं.

जब आपको संख्याओं का अनुक्रम बनाना हो तो seq() फ़ंक्शन सुविधाजनक होता है। इसका मूल सिंटैक्स है:

seq(begin, last, by = x)
arguments:
- begin: First number of the sequence
- last: Last number of the sequence
- by= x: The step. For instance, if x is 2, the code adds 2 to `begin-1` until it reaches `last`	

उदाहरण के लिए, 0 से 12 तक की सीमा में 4 का स्टेप लेने पर चार संख्याएँ प्राप्त होती हैं: 0, 4, 8 और 12।

seq(0, 12,4)

आउटपुट:

## [1]  0  4  8 12

आप x-अक्ष और y-अक्ष के स्केल को नीचे दिए अनुसार नियंत्रित कर सकते हैं

my_graph +
    scale_x_continuous(breaks = seq(1, 3.6, by = 0.2)) +
    scale_y_continuous(breaks = seq(1, 1.6, by = 0.1)) +
    labs(
        x = "Drat definition",
        y = "Mile per hours",
        color = "Gear",
        title = "Relation between Mile per hours and drat",
        subtitle = "Relationship break down by gear class",
        caption = "Authors own computation"
    )

Code व्याख्या

  • फ़ंक्शन scale_y_continuous() नियंत्रित करता है Y अक्ष
  • फ़ंक्शन scale_x_continuous() नियंत्रित करता है X- अक्ष.
  • पैरामीटर ब्रेक अक्ष के विभाजन को नियंत्रित करता है। आप मैन्युअल रूप से संख्याओं का अनुक्रम जोड़ सकते हैं या seq() फ़ंक्शन का उपयोग कर सकते हैं:
    • seq(1, 3.6, by = 0.2): 1 से 3.6 तक 0.2 के चरणों में अनुक्रम बनाएं, यानी 14 ब्रेक पॉइंट।
    • seq(1, 1.6, by = 0.1): 1 से 1.6 तक 0.1 के चरणों में सात संख्याएँ बनाएँ

आउटपुट:

तराजू पर नियंत्रण रखें

विषय

अंत में, ggplot2 आपको एक ही थीम फ़ंक्शन के साथ पूरे प्लॉट को रीस्टाइल करने की सुविधा देता है। पैकेज के साथ आठ पूर्ण थीम शामिल हैं:

  • थीम_बीडब्ल्यू()
  • थीम_लाइट()
  • थीम_क्लासिक()
  • थीम_लाइनड्रा()
  • थीम_डार्क()
  • थीम_मिनिमल()
  • थीम_ग्रे()
  • थीम_शून्य()
my_graph +
    theme_dark() +
    labs(
        x = "Drat definition, in log",
        y = "Mile per hours, in log",
        color = "Gear",
        title = "Relation between Mile per hours and drat",
        subtitle = "Relationship break down by gear class",
        caption = "Authors own computation"
    )

आउटपुट:

विषय

प्लॉट सुरक्षित करें

इन सभी चरणों के बाद, अब समय है अपने ग्राफ़ को सहेजने और साझा करने का। प्लॉटिंग के तुरंत बाद ggsave(“name_of_the_file.png”) कमांड चलाएँ और छवि डिस्क पर सहेजी जाएगी।

ग्राफ़ को वर्किंग डायरेक्टरी में सहेजा जाता है। वर्किंग डायरेक्टरी की जाँच करने के लिए, आप यह कोड चला सकते हैं:

directory <- getwd()
directory

तैयार ग्राफ को प्लॉट करें, उसे सेव करें और देखें कि वह कहाँ पर रुका:

my_graph +
    theme_dark() +
    labs(
        x = "Drat definition, in log",
        y = "Mile per hours, in log",
        color = "Gear",
        title = "Relation between Mile per hours and drat",
        subtitle = "Relationship break down by gear class",
        caption = "Authors own computation"
    )

आउटपुट:

प्लॉट सुरक्षित करें

ggsave("my_fantastic_plot.png")

आउटपुट:

## Saving 5 x 4 in image

नोट: केवल शैक्षणिक उद्देश्य के लिए, हमने आपके लिए डायरेक्टरी फ़ोल्डर खोलने के लिए open_folder() नामक एक फ़ंक्शन बनाया है। आपको बस नीचे दिए गए कोड को चलाने की ज़रूरत है और देखना है कि चित्र कहाँ संग्रहीत है। आपको my_fantastic_plot.png नाम की एक फ़ाइल दिखनी चाहिए।

# Run this code to create the function
open_folder <- function(dir) {
    if (.Platform['OS.type'] == "windows") {
        shell.exec(dir)
    } else {
        system(paste(Sys.getenv("R_BROWSER"), dir))
    }
}

# Call the function to open the folder
open_folder(directory)

R में facet_wrap() का उपयोग करके फेसेटेड स्कैटर प्लॉट कैसे बनाएं

फेसटिंग, पहले बताए गए ggplot2 के आठ घटकों में से एक है, और यह भीड़भाड़ वाले चार्ट के लिए सबसे साफ समाधान है। हर समूह को एक ही पैनल में समेटने के बजाय, ggplot2 एक चर के प्रत्येक स्तर के लिए एक छोटा मल्टीपल बनाता है, और वह भी एक ही पैमाने पर, ताकि पैनल तुलनीय बने रहें।

# One panel per gear count
ggplot(mtcars, aes(x = drat, y = mpg)) +
    geom_point() +
    facet_wrap(~ gear) +
    theme_classic()

तीन तर्क ही अधिकांश काम कर देते हैं।

  • एनकोलो or nrow: पैनलों को दिए गए लेआउट में बाध्य करें, उदाहरण के लिए facet_wrap(~ gear, ncol = 2).
  • तराजू: डिफ़ॉल्ट रूप से "निश्चित" होता है, इसलिए प्रत्येक पैनल एक ही अक्ष सीमा साझा करता है। जब समूहों के परिमाण में बहुत अधिक अंतर हो, तो "free_y" या "free" का उपयोग करें, लेकिन ध्यान रखें कि मुक्त पैमाने पैनलों के बीच दृश्य तुलना को भ्रामक बना देते हैं।
  • लेबलर: प्रत्येक स्ट्रिप में रॉ फैक्टर लेवल को बदल देता है, उदाहरण के लिए labeller = label_both का उपयोग करके “4” के बजाय “gear: 4” प्रिंट करें।

दो समूहping चर। पैनल का मैट्रिक्स बनाने के लिए facet_grid() का उपयोग करें, जिसमें पहला वेरिएबल पंक्तियों में और दूसरा वेरिएबल स्तंभों में फैला हो:

ggplot(mtcars, aes(x = drat, y = mpg)) +
    geom_point(aes(color = factor(cyl))) +
    facet_grid(am ~ gear) +
    theme_classic()

पहलू या रंग? रंग चार्ट पर सीमित ओवरलैप वाले लगभग चार समूहों तक अच्छी तरह काम करता है। इससे आगे, या जब भी समूह बहुत अधिक ओवरलैप करते हैं, तो फ़ेसिंग को समझना आसान होता है क्योंकि प्रत्येक पैनल में केवल अपने ही बिंदु होते हैं। आप दोनों को संयोजित कर सकते हैं: एक चर द्वारा फ़ेसिंग और दूसरे चर द्वारा रंग, जैसा कि ऊपर दिए गए facet_grid() उदाहरण में है।

R स्कैटर प्लॉट में ओवरप्लॉटिंग को कैसे हैंडल करें

कुछ दर्जन अवलोकनों के साथ प्रत्येक बिंदु स्पष्ट रूप से दिखाई देता है। हजारों अवलोकनों के साथ, मार्कर एक दूसरे के ऊपर ढेर हो जाते हैं और सबसे सघन क्षेत्र केवल एक ठोस धब्बे के रूप में दिखाई देता है। यही कारण है कि... ओवरप्लॉटिंगऔर ggplot2 चार मानक समाधान प्रदान करता है।

1. अपारदर्शिता कम करें। सबसे सस्ता उपाय। ओवरलैपping बिंदु स्वाभाविक रूप से गहरे हो जाते हैं, जिससे घनत्व दिखाई देने लगता है:

ggplot(diamonds, aes(x = carat, y = price)) +
    geom_point(alpha = 0.05) +
    theme_classic()

2. जिटर असतत मान। जब कोई चर केवल कुछ ही मान ग्रहण करता है, तो बिंदु समान निर्देशांकों पर स्थित होते हैं। एक छोटा सा यादृच्छिक विस्थापन उन्हें अलग करता है:

ggplot(mtcars, aes(x = factor(cyl), y = mpg)) +
    geom_jitter(width = 0.15, height = 0) +
    theme_classic()

ऊंचाई को 0 पर सेट करें ताकि वास्तविक जानकारी रखने वाले y मान कभी परिवर्तित न हों।

3. विमान को कूड़ेदान में फेंक दो। बड़े डेटासेट के लिए, प्रति सेल प्रेक्षणों की गणना करें और गणना को रंग में मैप करें। षट्भुजाकार बिन वर्गाकार बिन द्वारा उत्पन्न दृश्य त्रुटियों से बचाते हैं:

ggplot(diamonds, aes(x = carat, y = price)) +
    geom_hex(bins = 40) +
    theme_classic()

4. घनत्व रेखाचित्र बनाएं। कंटूर रेखाएं उन क्षेत्रों को रेखांकित करती हैं जहां अवलोकन केंद्रित होते हैं, और वे धुंधले बिंदुओं पर बड़े करीने से परत बनाती हैं:

ggplot(diamonds, aes(x = carat, y = price)) +
    geom_point(alpha = 0.05) +
    geom_density_2d(color = "#C42126") +
    theme_classic()

सामान्य नियम के अनुसार, अल्फा विधि कुछ हजार बिंदुओं को संभालती है, हेक्सागोनल बिनिंग विधि दसियों हजार बिंदुओं को संभालती है, और उससे आगे के डेटा को dplyr::slice_sample() के साथ सैंपल करना व्यावहारिक विकल्प है।

R में स्कैटर प्लॉट: Code संदर्भ

नीचे दी गई तालिका में ऊपर बताए गए प्रत्येक विकल्प के लिए ggplot2 कॉल सूचीबद्ध है:

उद्देश्य Code
बुनियादी स्कैटर प्लॉट
ggplot(df, aes(x = x1, y = y)) + geom_point()
रंग समूह के साथ स्कैटर प्लॉट
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x2)))
फिट किए गए मान जोड़ें
ggplot(df, aes(x = x1, y = y)) + geom_point() + stat_smooth(method = "lm")
शीर्षक जोड़ें
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(title = paste("Hello Guru99"))
उपशीर्षक जोड़ें
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(subtitle = paste("Hello Guru99"))
नाम बदलें x
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1")
नाम बदलें
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1")
पैमाने को नियंत्रित करें
ggplot(df, aes(x = x1, y = y)) + geom_point() + scale_y_continuous(breaks = seq(10, 35, by = 10)) + scale_x_continuous(breaks = seq(2, 5, by = 1))
लॉग बनाएं
ggplot(df, aes(x = log(x1), y = log(y))) + geom_point()
विषय
ggplot(df, aes(x = x1, y = y)) + geom_point() + theme_classic()
एक समूह द्वारा पहलू
ggplot(df, aes(x = x1, y = y)) + geom_point() + facet_wrap(~ x2)
ओवरप्लॉटिंग को संभालें
ggplot(df, aes(x = x1, y = y)) + geom_point(alpha = 0.3)
सहेजें
ggsave("my_fantastic_plot.png")

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

geom_point() प्रत्येक अवलोकन को उसके सटीक निर्देशांकों पर चित्रित करता है। geom_jitter() एक छोटा यादृच्छिक विस्थापन जोड़ता है ताकि समान मान साझा करने वाले बिंदु अलग-अलग पहचाने जा सकें, जो तब महत्वपूर्ण होता है जब एक अक्ष में असतत मान होते हैं।

aes() फ़ंक्शन के अंदर रंग एक वेरिएबल को मैप करता है, इसलिए ggplot2 प्रत्येक लेवल के लिए एक शेड असाइन करता है और एक लेजेंड बनाता है। aes() फ़ंक्शन के बाहर रंग एक निश्चित स्थिरांक होता है जो प्रत्येक बिंदु पर लागू होता है, और कोई लेजेंड दिखाई नहीं देता है।

geom_point() के बाद stat_smooth(method = “lm”) या geom_smooth(method = “lm”) जोड़ें। कॉन्फिडेंस बैंड को छिपाने के लिए se = FALSE सेट करें, और नॉन-लीनियर स्मूथर के लिए method = “loess” का उपयोग करें।

स्कैटर प्लॉट प्रशिक्षण से पहले फीचर सहसंबंध और आउटलायर्स को प्रकट करते हैं, और वे पीसीए या टी-एसएनई के साथ आयामी कमी के बाद अनुमानित मूल्यों के मुकाबले वास्तविक मूल्यों को प्रदर्शित करने या क्लस्टर को देखने का मानक तरीका हैं।

जी हां। एआई सहायक लेयर्स तैयार कर सकते हैं, ओवरप्लॉटिंग की समस्याओं को ठीक करने के सुझाव दे सकते हैं और aes() रैपर की अनुपस्थिति जैसी त्रुटियों को समझा सकते हैं। जेनरेट किए गए कोड को अपने डेटा पर चलाकर देखें, क्योंकि कॉलम के नाम और फैक्टर टाइप में गलती होना आम बात है।

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