अक्ष टिक्स की संख्या बढ़ाएँ


188

मैं कुछ डेटा के लिए प्लॉट बना रहा हूं, लेकिन टिक्स की संख्या बहुत कम है, मुझे रीडिंग पर अधिक सटीकता की आवश्यकता है ।

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

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

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

जवाबों:


186

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

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

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

आपको यह देता है:

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

और तराजू को ओवरराइड करने से आपको ऐसा कुछ मिल सकता है:

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))

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

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


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

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

4
समय श्रृंखला के लिए वर्ष के महीनों की तरह एक्स-अक्ष पर श्रेणीबद्ध मूल्यों के बारे में क्या?
स्कॉट डेविस

3
@ScottDavis पर एक नजर है लिंक । आप उपयोग कर सकते हैंscale_x_date(date_breaks = "5 months", date_minor_breaks = "1 months")
मार्कस हॉशेल

के coord_cartesianबजाय ज़ूमिंग के लिए उपयोग किया जाना चाहिए xlimstackoverflow.com/questions/25685185/…
qwr

167

डैनियल क्रिज़ियन की टिप्पणी के आधार पर , आप लाइब्रेरी pretty_breaksसे फ़ंक्शन का उपयोग कर सकते हैं scales, जो स्वचालित रूप से आयात किया जाता है:

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))

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


थोड़ा कम उपयोगी समाधान (चूंकि आपको डेटा चर फिर से निर्दिष्ट करना होगा), आप अंतर्निहित prettyफ़ंक्शन का उपयोग कर सकते हैं :

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))

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

63

आप फ़ंक्शन फ़ंक्शन को आपूर्ति कर सकते हैं 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))

81
खुद का फंक्शन बनाने की जरूरत नहीं है number_ticks। यह पहले ही लागू हो चुका है pretty_breaks {scales}। इसलिए: ggplot(dat, aes(x,y)) + geom_point() + scale_x_continuous(breaks=pretty_breaks(n=10)) + scale_y_continuous(breaks=pretty_breaks(n=10))
डैनियल क्रिआज़ियन

11
@ डैनियल क्रिएजियन: 1) को require(scales)2 ) की जरूरत है ) यह वैज्ञानिक संकेतन में प्रकट होने वाले मेरे विराम को रोकता है, इसलिए 1e6 को 1000000 में बदल दिया जाता है ??
एसएमसीआई

6
आप पैकेज के prettyबिना आधार आर का उपयोग कर सकते हैं scales, बस एक तर्क के रूप में मान प्रदान करें। उदाहरण के लिए:(breaks=pretty(dat$x, n=10))
मोलक्स जूल

@smci अगर ggplot2 काम कर रहा है तो तराजू उपलब्ध है। ggplot2 बिना तराजू के काम नहीं करेगा।
क्लॉस विल्के

6

आगामी संस्करण v3.3.0 का स्वचालित रूप से और के लिए ब्रेक उत्पन्न करने ggplot2का विकल्प होगाn.breaksscale_x_continuousscale_y_continuous

    devtools::install_github("tidyverse/ggplot2")

    library(ggplot2)

    plt <- ggplot(mtcars, aes(x = mpg, y = disp)) +
      geom_point()

    plt + 
      scale_x_continuous(n.breaks = 5)

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

    plt + 
      scale_x_continuous(n.breaks = 10) +
      scale_y_continuous(n.breaks = 10)

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


4

साथ ही,

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

एक्सेंस्ड या असतत स्केल एक्स-एक्सिस डेटा के लिए काम करता है (यानी, राउंडिंग आवश्यक नहीं)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.