Skip to content

Commit 8340ec7

Browse files
author
Rasmus
committed
theme: Add different ticks length for different axes
1 parent 3e1e6e4 commit 8340ec7

File tree

13 files changed

+162
-25
lines changed

13 files changed

+162
-25
lines changed

NEWS.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,10 @@ This is a minor release and breaking changes have been kept to a minimum. End us
104104
`nlevel`, an alias for `scaled`, to better match the syntax of `stat_bin()`
105105
(@bjreisman, #2679).
106106

107+
* New theme elements allowing different ticks lengths for each
108+
axis. For instance, this can be used to have inwards ticks on the
109+
x-axis (`axis.ticks.length.x`) and and outwards ticks on the
110+
y-axis (`axis.ticks.length.y`). (@pank, #1319)
107111

108112
# ggplot2 3.0.0
109113

R/guides-axis.r

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@ guide_axis <- function(at, labels, position = "right", theme) {
1414
zero <- unit(0, "npc")
1515
one <- unit(1, "npc")
1616

17+
theme$axis.ticks.length.x <- theme$axis.ticks.length.x %||% theme$axis.ticks.length
18+
theme$axis.ticks.length.x.bottom <- theme$axis.ticks.length.x.bottom %||% theme$axis.ticks.length.x
19+
theme$axis.ticks.length.x.top <- theme$axis.ticks.length.x.top %||% theme$axis.ticks.length.x
20+
theme$axis.ticks.length.y <- theme$axis.ticks.length.y %||% theme$axis.ticks.length
21+
theme$axis.ticks.length.y.left <- theme$axis.ticks.length.y.left %||% theme$axis.ticks.length.y
22+
theme$axis.ticks.length.y.right <- theme$axis.ticks.length.y.right %||% theme$axis.ticks.length.y
23+
1724
label_render <- switch(position,
1825
top = "axis.text.x.top", bottom = "axis.text.x.bottom",
1926
left = "axis.text.y.left", right = "axis.text.y.right"
@@ -22,12 +29,12 @@ guide_axis <- function(at, labels, position = "right", theme) {
2229
label_x <- switch(position,
2330
top = ,
2431
bottom = at,
25-
right = theme$axis.ticks.length,
26-
left = one - theme$axis.ticks.length
32+
right = theme$axis.ticks.length.y.right,
33+
left = one - theme$axis.ticks.length.y.left
2734
)
2835
label_y <- switch(position,
29-
top = theme$axis.ticks.length,
30-
bottom = one - theme$axis.ticks.length,
36+
top = theme$axis.ticks.length.x.top,
37+
bottom = one - theme$axis.ticks.length.x.bottom,
3138
right = ,
3239
left = at
3340
)
@@ -58,18 +65,18 @@ guide_axis <- function(at, labels, position = "right", theme) {
5865
ticks <- switch(position,
5966
top = element_render(theme, "axis.ticks.x.top",
6067
x = rep(at, each = 2),
61-
y = rep(unit.c(zero, theme$axis.ticks.length), nticks),
68+
y = rep(unit.c(zero, theme$axis.ticks.length.x.top), nticks),
6269
id.lengths = rep(2, nticks)),
6370
bottom = element_render(theme, "axis.ticks.x.bottom",
6471
x = rep(at, each = 2),
65-
y = rep(unit.c(one - theme$axis.ticks.length, one), nticks),
72+
y = rep(unit.c(one - theme$axis.ticks.length.x.bottom, one), nticks),
6673
id.lengths = rep(2, nticks)),
6774
right = element_render(theme, "axis.ticks.y.right",
68-
x = rep(unit.c(zero, theme$axis.ticks.length), nticks),
75+
x = rep(unit.c(zero, theme$axis.ticks.length.y.right), nticks),
6976
y = rep(at, each = 2),
7077
id.lengths = rep(2, nticks)),
7178
left = element_render(theme, "axis.ticks.y.left",
72-
x = rep(unit.c(one - theme$axis.ticks.length, one), nticks),
79+
x = rep(unit.c(one - theme$axis.ticks.length.y.left, one), nticks),
7380
y = rep(at, each = 2),
7481
id.lengths = rep(2, nticks))
7582
)
@@ -79,21 +86,21 @@ guide_axis <- function(at, labels, position = "right", theme) {
7986
top = gtable_col("axis",
8087
grobs = list(labels, ticks),
8188
width = one,
82-
heights = unit.c(grobHeight(labels), theme$axis.ticks.length)
89+
heights = unit.c(grobHeight(labels), theme$axis.ticks.length.x.top)
8390
),
8491
bottom = gtable_col("axis",
8592
grobs = list(ticks, labels),
8693
width = one,
87-
heights = unit.c(theme$axis.ticks.length, grobHeight(labels))
94+
heights = unit.c(theme$axis.ticks.length.x.bottom, grobHeight(labels))
8895
),
8996
right = gtable_row("axis",
9097
grobs = list(ticks, labels),
91-
widths = unit.c(theme$axis.ticks.length, grobWidth(labels)),
98+
widths = unit.c(theme$axis.ticks.length.y.right, grobWidth(labels)),
9299
height = one
93100
),
94101
left = gtable_row("axis",
95102
grobs = list(labels, ticks),
96-
widths = unit.c(grobWidth(labels), theme$axis.ticks.length),
103+
widths = unit.c(grobWidth(labels), theme$axis.ticks.length.y.left),
97104
height = one
98105
)
99106
)

R/theme-defaults.r

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,12 @@ theme_grey <- function(base_size = 11, base_family = "",
139139
axis.text.y.right = element_text(margin = margin(l = 0.8 * half_line / 2), hjust = 0),
140140
axis.ticks = element_line(colour = "grey20"),
141141
axis.ticks.length = unit(half_line / 2, "pt"),
142+
axis.ticks.length.x = NULL,
143+
axis.ticks.length.x.top = NULL,
144+
axis.ticks.length.x.bottom = NULL,
145+
axis.ticks.length.y = NULL,
146+
axis.ticks.length.y.left = NULL,
147+
axis.ticks.length.y.right = NULL,
142148
axis.title.x = element_text(
143149
margin = margin(t = half_line / 2),
144150
vjust = 1
@@ -528,6 +534,12 @@ theme_test <- function(base_size = 11, base_family = "",
528534
axis.text.y.right = element_text(margin = margin(l = 0.8 * half_line / 2), hjust = 0),
529535
axis.ticks = element_line(colour = "grey20"),
530536
axis.ticks.length = unit(half_line / 2, "pt"),
537+
axis.ticks.length.x = NULL,
538+
axis.ticks.length.x.top = NULL,
539+
axis.ticks.length.x.bottom = NULL,
540+
axis.ticks.length.y = NULL,
541+
axis.ticks.length.y.left = NULL,
542+
axis.ticks.length.y.right = NULL,
531543
axis.title.x = element_text(
532544
margin = margin(t = half_line / 2),
533545
vjust = 1

R/theme-elements.r

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,12 @@ el_def <- function(class = NULL, inherit = NULL, description = NULL) {
286286
axis.text.y.left = el_def("element_text", "axis.text.y"),
287287
axis.text.y.right = el_def("element_text", "axis.text.y"),
288288
axis.ticks.length = el_def("unit"),
289+
axis.ticks.length.x = el_def("unit", "axis.ticks.length"),
290+
axis.ticks.length.x.top = el_def("unit", "axis.ticks.length.x"),
291+
axis.ticks.length.x.bottom = el_def("unit", "axis.ticks.length.x"),
292+
axis.ticks.length.y = el_def("unit", "axis.ticks.length"),
293+
axis.ticks.length.y.left = el_def("unit", "axis.ticks.length.y"),
294+
axis.ticks.length.y.right = el_def("unit", "axis.ticks.length.y"),
289295
axis.ticks.x = el_def("element_line", "axis.ticks"),
290296
axis.ticks.x.top = el_def("element_line", "axis.ticks.x"),
291297
axis.ticks.x.bottom = el_def("element_line", "axis.ticks.x"),

R/theme.r

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@
4747
#' `axis.ticks.y.left`, `axis.ticks.y.right`). `axis.ticks.*.*` inherits from
4848
#' `axis.ticks.*` which inherits from `axis.ticks`, which in turn inherits
4949
#' from `line`
50-
#' @param axis.ticks.length length of tick marks (`unit`)
50+
#' @param axis.ticks.length,axis.ticks.length.x,axis.ticks.length.x.top,axis.ticks.length.x.bottom,axis.ticks.length.y,axis.ticks.length.y.left,axis.ticks.length.y.right
51+
#' length of tick marks (`unit`)
5152
#' @param axis.line,axis.line.x,axis.line.x.top,axis.line.x.bottom,axis.line.y,axis.line.y.left,axis.line.y.right
5253
#' lines along axes ([element_line()]). Specify lines along all axes (`axis.line`),
5354
#' lines for each plane (using `axis.line.x` or `axis.line.y`), or individually
@@ -195,7 +196,11 @@
195196
#' p1 + theme(axis.line = element_line(size = 3, colour = "grey80"))
196197
#' p1 + theme(axis.text = element_text(colour = "blue"))
197198
#' p1 + theme(axis.ticks = element_line(size = 2))
198-
#' p1 + theme(axis.ticks.length = unit(.25, "cm"))
199+
#' p1 + theme(
200+
#' axis.ticks.length.y = unit(.25, "cm"),
201+
#' axis.ticks.length.x = unit(-.25, "cm"),
202+
#' axis.text.x=element_text(margin=margin(t=8))
203+
#' )
199204
#' p1 + theme(axis.title.y = element_text(size = rel(1.5), angle = 90))
200205
#'
201206
#' \donttest{
@@ -275,6 +280,12 @@ theme <- function(line,
275280
axis.ticks.y.left,
276281
axis.ticks.y.right,
277282
axis.ticks.length,
283+
axis.ticks.length.x,
284+
axis.ticks.length.x.top,
285+
axis.ticks.length.x.bottom,
286+
axis.ticks.length.y,
287+
axis.ticks.length.y.left,
288+
axis.ticks.length.y.right,
278289
axis.line,
279290
axis.line.x,
280291
axis.line.x.top,

man/facet_wrap.Rd

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

man/scale_brewer.Rd

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

man/scale_gradient.Rd

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

man/scale_grey.Rd

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

man/scale_viridis.Rd

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

man/theme.Rd

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

0 commit comments

Comments
 (0)