कैसे ggplot2 आर भूखंडों में कुल्हाड़ियों के लिए सीमा निर्धारित करें?


358

मैं निम्नलिखित की साजिश करता हूं:

library(ggplot2)    

carrots <- data.frame(length = rnorm(500000, 10000, 10000))
cukes <- data.frame(length = rnorm(50000, 10000, 20000))
carrots$veg <- 'carrot'
cukes$veg <- 'cuke'
vegLengths <- rbind(carrots, cukes)

ggplot(vegLengths, aes(length, fill = veg)) +
 geom_density(alpha = 0.2)

अब कहते हैं कि मैं केवल के बीच इस क्षेत्र प्लॉट करने के लिए चाहते हैं x=-5000के लिए 5000, संपूर्ण रेंज के बजाय।

मैं उसे कैसे कर सकता हूँ?

जवाबों:


584

मूल रूप से आपके पास दो विकल्प हैं

scale_x_continuous(limits = c(-5000, 5000))

या

coord_cartesian(xlim = c(-5000, 5000)) 

जहां पहला दिए गए रेंज के बाहर के सभी डेटा पॉइंट्स को हटाता है और दूसरा केवल दृश्य क्षेत्र को समायोजित करता है। ज्यादातर मामलों में आप अंतर नहीं देखेंगे, लेकिन अगर आप डेटा के लिए कुछ भी फिट करते हैं तो यह संभवतः फिट किए गए मूल्यों को बदल देगा।

आप शॉर्टहैंड फ़ंक्शन xlim(या ylim) का भी उपयोग कर सकते हैं , जो पहले विकल्प की तरह दिए गए रेंज के बाहर डेटा बिंदुओं को हटा देता है:

+ xlim(-5000, 5000)

अधिक जानकारी के लिए के विवरण की जाँच करें coord_cartesian

RStudio cheatsheet के लिए ggplot2बनाता है यह काफी नेत्रहीन साफ़ करें। यहाँ उस धोखाधड़ी का एक छोटा सा भाग है:

यहां छवि विवरण दर्ज करें

CC BY के तहत वितरित किया गया


16
अब भी है library(scales); ... + scale_x_continuous(limits = c(-5000, 5000), oob=squish)(डिफ़ॉल्ट है oob=censor); देखना ?squish, ?censor: groups.google.com/forum/#!topic/ggplot2/AsJ6xpmR9tU
बेन Bolker

5
एनबी। यह समस्याग्रस्त हो सकता है यदि आप लाइनों / बहुभुज के साथ काम कर रहे हैं जहां कुछ कोने सीमा से बाहर हैं, क्योंकि पूरी वस्तु को भूखंड से हटा दिया गया है
भू

1
@geotheory: यह भी coord_cartesianदृष्टिकोण का सच है ?
निक स्टैनर

1
नहीं, मैं और अधिक विशिष्ट, बस पहली विधि किया गया है चाहिए
geotheory

व्यवहार में, 'मुद्रण' प्रयोजनों के लिए, आपके साथ coord_cartesian(xlim = संभवत: रीसेट करने की आवश्यकता है ylim, और लेबल और ग्रिड विराम को रीसेट करें।
टीटी

44

त्वरित नोट: यदि आप भी coord_flip()x और y अक्ष को फ्लिप करने के लिए उपयोग कर रहे हैं , तो आप coord_cartesian()उन सीमाओं का उपयोग नहीं कर पाएंगे क्योंकि वे दो कार्य अनन्य हैं ( यहां देखें )।

सौभाग्य से, यह एक आसान तय है; अपनी सीमा को इस coord_flip()तरह निर्धारित करें :

p + coord_flip(ylim = c(3,5), xlim = c(100, 400))

यह केवल दृश्यमान सीमा को बदल देता है (अर्थात डेटा बिंदुओं को हटाता नहीं है)।


मैं भी इसी तरह का कठिन सवाल यहां पर पोस्ट कर रहा हूं। stackoverflow.com/questions/61531149/… एक ही सीमा को कैसे सीमित किया जाए
IVIM
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.