Skip to content

Commit cee2560

Browse files
authored
Convert linetype NAs to blank lines (#6270)
* Prevent `NA` linetype * add news bullet * remove contingencies handled by `gg_par()` * add linetype graphic to documentation * remove `na.value` as an argument * fix dumb mistake
1 parent 428d122 commit cee2560

File tree

7 files changed

+88
-24
lines changed

7 files changed

+88
-24
lines changed

NEWS.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,8 @@
331331
* (internal) The ViewScale class has a `make_fixed_copy()` method to permit
332332
copying trained position scales (#3441).
333333
* Improved consistency of curve direction in `geom_curve()` (@teunbrand, #5069)
334+
* `linetype = NA` is now interpreted to mean 'no line' instead of raising errors
335+
(@teunbrand, #6269).
334336

335337
# ggplot2 3.5.1
336338

R/legend-draw.R

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -199,8 +199,6 @@ draw_key_crossbar <- function(data, params, size) {
199199
draw_key_path <- function(data, params, size) {
200200
if (is.null(data$linetype)) {
201201
data$linetype <- 0
202-
} else {
203-
data$linetype[is.na(data$linetype)] <- 0
204202
}
205203
grob <- segmentsGrob(0.1, 0.5, 0.9, 0.5,
206204
gp = gg_par(
@@ -388,8 +386,6 @@ draw_key_vline <- function(data, params, size) {
388386
draw_key_timeseries <- function(data, params, size) {
389387
if (is.null(data$linetype)) {
390388
data$linetype <- 0
391-
} else {
392-
data$linetype[is.na(data$linetype)] <- 0
393389
}
394390

395391
grid::linesGrob(

R/scale-linetype.R

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,15 @@
77
#'
88
#' @inheritParams discrete_scale
99
#' @inheritDotParams discrete_scale -expand -position -na.value -scale_name -palette
10-
#' @param na.value The linetype to use for `NA` values.
1110
#' @rdname scale_linetype
11+
#' @details
12+
#' Lines can be referred to by number, name or hex code. Contrary to base R
13+
#' graphics, `NA`s are interpreted as blanks.
14+
#'
15+
#' \if{html}{\figure{linetype_table.svg}{Named linetypes by number and name}}
16+
#' \if{latex}{\figure{linetype_table.pdf}}
17+
#'
18+
#'
1219
#' @seealso
1320
#' The documentation for [differentiation related aesthetics][aes_linetype_size_shape].
1421
#'
@@ -35,22 +42,20 @@
3542
#' scale_linetype_identity() +
3643
#' facet_grid(linetype ~ .) +
3744
#' theme_void(20)
38-
scale_linetype <- function(name = waiver(), ..., na.value = NA, aesthetics = "linetype") {
45+
scale_linetype <- function(name = waiver(), ..., aesthetics = "linetype") {
3946
discrete_scale(
4047
aesthetics, name = name,
4148
palette = NULL,
42-
na.value = na.value,
4349
...
4450
)
4551
}
4652

4753
#' @rdname scale_linetype
4854
#' @export
49-
scale_linetype_binned <- function(name = waiver(), ..., na.value = NA, aesthetics = "linetype") {
55+
scale_linetype_binned <- function(name = waiver(), ..., aesthetics = "linetype") {
5056
binned_scale(
5157
aesthetics, name = name,
5258
palette = NULL,
53-
na.value = na.value,
5459
...
5560
)
5661
}

R/utilities-grid.R

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ gg_par <- function(..., stroke = NULL, pointsize = NULL) {
4141
stroke[is.na(stroke)] <- 0
4242
args$fontsize <- pointsize * .pt + stroke * .stroke / 2
4343
}
44+
if (!is.null(args$lty) && anyNA(args$lty)) {
45+
args$lty[is.na(args$lty)] <- if (is.character(args$lty)) "blank" else 0
46+
}
4447

4548
inject(gpar(!!!args))
4649
}

man/figures/linetype_table.pdf

4.2 KB
Binary file not shown.

man/figures/linetype_table.svg

Lines changed: 63 additions & 0 deletions
Loading

man/scale_linetype.Rd

Lines changed: 10 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)