आर

2015-12-30 6 views
5

में मामूली टिक लेबल, यह प्रश्न आम तौर पर SO question से ggplot2 धुरी पर मामूली टिक अंकों के निर्माण से संबंधित है और विशेष रूप से comment पर एक कार्य का सुझाव देने वाले प्रश्न के उत्तर में संबंधित है अनुक्रम में रिक्त स्थान सम्मिलित करने के लिए उपयोगी साबित हो सकता है।आर

जैसा कि मैं अक्सर समान प्लॉट्स में मामूली टिक अंक जोड़ता हूं, मैंने इस तरह के एक समारोह को बनाने में एक स्टैब लिया (नीचे my answer देखें)।

उत्तर

12

निम्नलिखित समारोह उपयोगकर्ता का अनुरोध करने की अनुमति देता है कि एक सदिश x के हर nवें तत्व nth या तो किया जा (1) एक खाली चरित्र प्लेसहोल्डर के साथ प्रतिस्थापित (empty = TRUE; डिफ़ॉल्ट) या (2) वेक्टर में शामिल करना ज़रूरी (empty = FALSE)। इसके अतिरिक्त, यह ऑपरेशन के व्यस्त (inverse = TRUE; डिफ़ॉल्ट नहीं) का अनुरोध करने का विकल्प प्रदान करता है। कार्यक्षमता नीचे कुछ उदाहरणों के साथ चित्रित किया गया है।

सबसे पहले, समारोह:

every_nth <- function(x, nth, empty = TRUE, inverse = FALSE) 
    { 
    if (!inverse) { 
    if(empty) { 
     x[1:nth == 1] <- "" 
     x 
     } else { 
     x[1:nth != 1] 
     } 
    } else { 
     if(empty) { 
     x[1:nth != 1] <- "" 
     x 
     } else { 
      x[1:nth == 1] 
     } 
    } 
} 

की जगह या वेक्टर तत्वों को छोड़ते हुए के कुछ उदाहरण:

numvec <- 0:20 
charvec <- LETTERS 

## Replace every 3rd element with an empty character 
every_nth(numvec, 3) # conversion to character vector 

[1] "" "1" "2" "" "4" "5" "" "7" "8" "" "10" "11" "" "13" 
[15] "14" "" "16" "17" "" "19" "20" 

every_nth(charvec, 3) 
[1] "" "B" "C" "" "E" "F" "" "H" "I" "" "K" "L" "" "N" "O" "" "Q" 
[18] "R" "" "T" "U" "" "W" "X" "" "Z" 

## Omit (drop) every 3rd element 
every_nth(numvec, 3, empty = FALSE) # vector mode is preserved 
[1] 1 2 4 5 7 8 10 11 13 14 16 17 19 20 

every_nth(charvec, 3, empty = FALSE) 
[1] "B" "C" "E" "F" "H" "I" "K" "L" "N" "O" "Q" "R" "T" "U" "W" "X" "Z" 

हालांकि, नाबालिग टिक के निर्माण के लिए, यह इस का उल्टा वापस जाने के लिए पसंद किया जाता है inverse = TRUE विकल्प का उपयोग कर ऑपरेशन:

## Retain every 3rd element, replacing all others with an empty character 
every_nth(numvec, 3, inverse = TRUE) # conversion to character vector 
[1] "0" "" "" "3" "" "" "6" "" "" "9" "" "" "12" "" 
[15] "" "15" "" "" "18" "" "" 

every_nth(charvec, 3, inverse = TRUE) 
[1] "A" "" "" "D" "" "" "G" "" "" "J" "" "" "M" "" "" "P" "" 
[18] "" "S" "" "" "V" "" "" "Y" "" 

## Retain every 3rd element, omitting (dropping) all other elements 
every_nth(numvec, 3, empty = FALSE, inverse = TRUE) # vector mode is preserved 
[1] 0 3 6 9 12 15 18 

every_nth(charvec, 3, empty = FALSE, inverse = TRUE) 
[1] "A" "D" "G" "J" "M" "P" "S" "V" "Y" 

नाबालिग टिक के निर्माण में समारोह का उपयोग उदाहरण देकर स्पष्ट करने:

library(ggplot2) 
df <- data.frame(x = rnorm(1000), y = rnorm(1000)) 

## ggplot2 default axis labelling 
p <- ggplot(df, aes(x, y)) + geom_point() + theme_bw() 
p 

default labelling

## Add minor ticks to axes 
custom_breaks <- seq(-3, 3, 0.25) 
p + 
    scale_x_continuous(breaks = custom_breaks, 
        labels = every_nth(custom_breaks, 4, inverse = TRUE)) + 
    scale_y_continuous(breaks = custom_breaks, 
        labels = every_nth(custom_breaks, 2, inverse = TRUE)) 

custom labelling

+0

यह अविश्वसनीय रूप से उपयोगी है। मुझे उम्मीद है कि यह किसी दिन ggplot में शामिल हो जाता है! मेरी समस्या हल – Nova