2012-07-04 19 views
117

मैं कुछ डेटा के लिए भूखंड उत्पन्न कर रहा हूं, लेकिन टिकों की संख्या बहुत छोटी है, मुझे पढ़ने पर परिशुद्धता की आवश्यकता है।अक्ष टिक्स की संख्या बढ़ाएं

क्या ggplot2 में अक्ष टिक्स की संख्या बढ़ाने के लिए कोई तरीका है?

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

संभावित रूप से ggplot कुछ एल्गोरिदम के साथ आंतरिक रूप से ऐसा करते हैं, लेकिन मुझे यह नहीं पता था कि यह कैसे करता है, जो मैं चाहता हूं उसके अनुसार बदल सकता हूं।

उत्तर

123

आप scale_x_continuous और/या scale_y_continuous संशोधित करके ggplots डिफ़ॉल्ट स्केल को ओवरराइड कर सकते हैं। उदाहरण के लिए:

library(ggplot2) 
dat <- data.frame(x = rnorm(100), y = rnorm(100)) 

ggplot(dat, aes(x,y)) + 
    geom_point() 

आप इस देता है:

enter image description here

और तराजू अधिभावी आप कुछ इस तरह दे सकते हैं:

ggplot(dat, aes(x,y)) + 
    geom_point() + 
    scale_x_continuous(breaks = round(seq(min(dat$x), max(dat$x), by = 0.5),1)) + 
    scale_y_continuous(breaks = round(seq(min(dat$y), max(dat$y), by = 0.5),1)) 

enter image description here

यदि आप चाहते हैं करने के लिए एक विशिष्ट भाग पर बस "ज़ूम" करें एक साजिश के क्रमशः xlim() और ylim() देखें। अन्य तर्कों को समझने के लिए अच्छी अंतर्दृष्टि here भी मिल सकती है।

+2

असल में बिंदु संख्या के विभिन्न पैमाने पर, 'द्वारा' तर्क को "सामान्यीकृत" करना होगा, यानी 0.5 इस डेटा के लिए एक अच्छा मूल्य है जो सी (-3,3) है, लेकिन यह अच्छा नहीं है एक डेटा के लिए रेंज सी (0,5000) है। क्या कोई ऐसा फ़ंक्शन है जो इसकी गणना करता है? –

+1

@ JoãoDaniel - मेरा मतलब है कि ggplot स्वचालित रूप से इस पर एक सभ्य नौकरी करता है। यदि यह परिणामों का एक संतोषजनक सेट नहीं बना रहा है, तो मुझे यकीन नहीं है कि कुछ अलग प्रदान करने के लिए एक अंतर्निहित फ़ंक्शन है। जो विस्तार आप चाहते हैं उसका स्तर आपकी साजिश के लिए विशिष्ट होगा, लेकिन शायद कुछ परीक्षण मामलों और पैटर्न के पहचान के लिए आपके निर्दिष्ट स्तर के विवरण के माध्यम से सोचें ... यदि यह एक बॉक्सप्लॉट था, तो 'अधिकतम-मिनट/30' एक सुंदर आम "बाल्टी" आकार है ...लेकिन यह आपके लिए एक अच्छा प्रारंभिक बिंदु हो सकता है या नहीं भी हो सकता है। – Chase

+2

एक्स-अक्ष पर स्पष्ट मूल्यों के बारे में क्या समय श्रृंखला के लिए वर्ष के महीनों के बारे में? –

53

आप scale पर फ़ंक्शन तर्क प्रदान कर सकते हैं, और ggplot का उपयोग करेगा जो टिक स्थानों की गणना करने के लिए कार्य करता है।

library(ggplot2) 
dat <- data.frame(x = rnorm(100), y = rnorm(100)) 
number_ticks <- function(n) {function(limits) pretty(limits, n)} 

ggplot(dat, aes(x,y)) + 
    geom_point() + 
    scale_x_continuous(breaks=number_ticks(10)) + 
    scale_y_continuous(breaks=number_ticks(10)) 
+72

अपने फ़ंक्शन 'number_ticks' बनाने की कोई ज़रूरत नहीं है। इसे पहले से ही 'pretty_breaks {scales}' में लागू किया जा चुका है। इसलिए: 'ggplot (डीएटी, एईएस (एक्स, वाई)) + geom_point() + scale_x_continuous (टूटता = pretty_breaks (n = 10)) + scale_y_continuous (टूटता = pretty_breaks (n = 10))' –

+10

@ डैनियल क्रिजियन: 1) की आवश्यकता है (स्केल) '2) ऐसा लगता है कि वैज्ञानिक नोटेशन में मेरे ब्रेक दिखाई दे रहे हैं, इसलिए 1e6 बदलकर 1000000 हो गया है ?? – smci

+5

आप 'स्केल' पैकेज के बिना बेस आर के 'सुंदर' का उपयोग कर सकते हैं, केवल मान को तर्क के रूप में प्रदान करें। उदाहरण के लिए: '(ब्रेक = सुंदर (डेटा $ x, n = 10))' – Molx

76

आप उपयोग कर सकते हैं में निर्मित pretty समारोह:

ggplot(dat, aes(x,y)) + geom_point() + 
scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) + 
scale_y_continuous(breaks = scales::pretty_breaks(n = 10)) 
:

ggplot(dat, aes(x,y)) + geom_point() + 
scale_x_continuous(breaks = pretty(dat$x, n = 10)) + 
scale_y_continuous(breaks = pretty(dat$y, n = 10)) 

पर Daniel Krizian's comment आधार पर, आप भी pretty_breaks समारोह scales पुस्तकालय, जो स्वचालित रूप से आयात किया जाता है से उपयोग कर सकते हैं

आपको बस इतना करना है कि टिकों की संख्या डालें।

+6

यह स्पष्ट रूप से सबसे अच्छा जवाब है! बीटीडब्ल्यू जीजीप्लॉट पहले से ही 'स्केल' आयात करता है लेकिन आपके नेमस्पेस में फ़ंक्शंस नहीं जोड़ता है। इसलिए आप आयात के बिना उन्हें 'स्केल :: pretty_breaks (n = 10) 'के रूप में कॉल कर सकते हैं। – while

1
इसके अतिरिक्त

, बिन या असतत बढ़ाया x- अक्ष डेटा के लिए

ggplot(dat, aes(x,y)) + 
geom_point() + 
scale_x_continuous(breaks = seq(min(dat$x), max(dat$x), by = 0.05)) 

काम करता है (अर्थात, और आवश्यक नहीं गोलाई)।

संबंधित मुद्दे