当前位置:  开发笔记 > 编程语言 > 正文

将空白插入载体中,例如R中的次要刻度标签

如何解决《将空白插入载体中,例如R中的次要刻度标签》经验,为你挑选了1个好方法。

这个问题一般涉及先前关于在轴上创建次刻度标记的SO问题ggplot2,特别是对该问题的答案中的注释,表明将空白插入序列的功能可能证明是有用的.

由于我经常在类似的情节中添加小刻度标记,因此我尝试创建这样的函数(请参阅下面的答案).



1> adamdsmith..:

以下函数允许用户请求向量的每个n 元素(1)替换为空字符占位符(;默认值)或(2)从向量()中省略.另外,它提供了请求操作的反向(而非默认)的选项.下面通过一些示例说明功能.nthxempty = TRUEempty = FALSEinverse = 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

默认标签

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

自定义标签

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有