在連續范圍內,我可以breaks使用scales::pretty_breaks(). 但是,我無法弄清楚如何使用離散尺度實作類似的目標。具體來說,如果我的離散標簽是letters,那么假設我想顯示每個其他標簽以清理圖表。有沒有一種簡單、系統的方法來做到這一點?
我有一個有效的 hack(見下文),但正在尋找更自動和更優雅的東西。
library(tidyverse)
# make some dummy data
dat <-
matrix(sample(100),
nrow = 10,
dimnames = list(letters[1:10], LETTERS[1:10])) %>%
as.data.frame() %>%
rownames_to_column("row") %>%
pivot_longer(-row, names_to = "column", values_to = "value")
# default plot has all labels on discrete axes
dat %>%
ggplot(aes(row, column))
geom_tile(aes(fill = value))

# desired plot would look like following:
ylabs <- LETTERS[1:10][c(T, NA)] %>% replace_na("")
xlabs <- letters[1:10][c(T, NA)] %>% replace_na("")
# can force desired axis text density but it's an ugly hack
dat %>%
ggplot(aes(row, column))
geom_tile(aes(fill = value))
scale_y_discrete(labels = ylabs)
scale_x_discrete(labels = xlabs)

由reprex 包(v2.0.1)于 2021 年 12 月 21 日創建
uj5u.com熱心網友回復:
處理過于密集的軸標簽的一種選擇是使用n.dodge:
ggplot(dat, aes(row, column))
geom_tile(aes(fill = value))
scale_x_discrete(guide = guide_axis(n.dodge = 2))
scale_y_discrete(guide = guide_axis(n.dodge = 2))

或者,如果您正在尋找一種方法來減少使用xlabs并以編程方式進行,那么我們可以將函式傳遞給scale_x_discrete(breaks=):
everyother <- function(x) x[seq_along(x) %% 2 == 0]
ggplot(dat, aes(row, column))
geom_tile(aes(fill = value))
scale_x_discrete(breaks = everyother)
scale_y_discrete(breaks = everyother)

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/389583.html
上一篇:R-在兩組列中搜索兩個條件
