Comments (1)
#' Hold every nth element
#'
#' @description
#' Hold every nth element in a vector, and replace the rest with "".
#'
#' @param n The increment of elements to hold as is. Defaults to `2`.
#' @param offset An offset for which element to first hold. Defaults to `0`. Possible values are `-1` to (`n - 2`)
#' @param ... If numeric, arguments passed to the `scales::comma` function. Otherwise, arguments passed to `format`.
#'
#' @return A labelling function
#' @noRd
#'
#' @examples
#' label_every_nth()(scales::comma(seq(1000, 5000, 1000)))
#' label_every_nth()(lubridate::ymd(c("2021-01-01", "2022-01-01", "2023-01-01", "2024-01-01")))
#' label_every_nth()(LETTERS[1:12])
#'
#' library(dplyr)
#' library(palmerpenguins)
#'
#' set_blanket()
#'
#' penguins |>
#' mutate(across(sex, \(x) stringr::str_to_sentence(x))) |>
#' gg_point(
#' x = flipper_length_mm,
#' y = body_mass_g,
#' col = sex,
#' x_labels = label_every_nth(),
#' y_labels = label_every_nth(),
#' )
#
label_every_nth <- function(n = 2, offset = 0, ...) {
function(x) {
i <- which(is.finite(x) | is.character(x) | is.factor(x) | is.logical(x))
i <- i[seq_along(i) %% n == (offset + 1)]
if (is.numeric(x)) x <- scales::comma(x, ...)
else x <- format(x, ...)
x[-i] <- ""
x
}
}
from ggblanket.
Related Issues (20)
- *_limits: consider removing from x/y HOT 3
- *_breaks` & `y_limits`: where both set, breaks does not work
- x-scale not working great in the below example HOT 1
- consider shifting default back to grey (and facet shift as well) HOT 1
- positional scales: remove `*_limits`, and `*_oob` HOT 2
- positional scales: make symmetric scale even if *_expand is not NULL HOT 1
- positional scales: remove `*_transform` HOT 1
- positional scales: could make symmetric if limits specified by dividing into equal parts HOT 1
- *_labels loses default where *_transform = "sqrt" etc HOT 1
- symmetric axis where limits specified (and breaks not specified)
- mode: make legend boxes left align HOT 2
- mode: remove _n modes
- mode: should discrete ticks be removed?
- docs: a nice example for `set_blanket`
- grey_mode_* but with panel grey, and plot/gridlines white HOT 1
- should *_orientation be *_symmetric HOT 1
- internals: update to remove reference to limits with NA HOT 2
- scales 2.0 HOT 2
- Do not allow x_symmetric = TRUE & y_symmetric = TRUE HOT 1
- docs: showtext example
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ggblanket.