Показывать только одну часть взаимодействующей переменной x в метках оси x в ggplot - PullRequest
0 голосов
/ 26 апреля 2018

Я строю взаимодействующие переменные на оси x ggplot, например, как показано ниже. Поскольку я использую цвет заливки для обозначения одного из значений (здесь variable), я бы хотел, чтобы на моих ярлыках оси X отображалась другая переменная (здесь study_day). Я не могу указать ручную шкалу (scale_x_discrete(labels = c('1', '1', '1', '2', '2', '2')), потому что мои значения study_day могут различаться в каждом аспекте, как в этом примере. Как указать, чтобы пометить ось X только с study_day?

set.seed(1)
df <- data.frame(variable = rep(c('A', 'B', 'C'), 8),
                 study_day = rep(c('1', '2'), 12),
                 ID = rep(c('W', 'X', 'Y', 'Z'), 6),
                 value = rnorm(24))

ggplot(df, aes(interaction(variable, study_day), value))+
  geom_point(shape = 21, aes(fill = variable))+
  facet_wrap(~ID, scales = 'free')

enter image description here

1 Ответ

0 голосов
/ 26 апреля 2018

Вы можете написать функцию make_labels(), которая извлекает учебный день из меток, которые генерирует ggplot2:

library(stringr)

make_labels <- function(labels) {
  result <- str_split(labels, "\\.")
  unlist(lapply(result, function(x) x[2]))
}

set.seed(1)
df <- data.frame(variable = rep(c('A', 'B', 'C'), 8),
                 study_day = rep(c('1', '2'), 12),
                 ID = rep(c('W', 'X', 'Y', 'Z'), 6),
                 value = rnorm(24))

ggplot(df, aes(interaction(variable, study_day), value))+
  geom_point(shape = 21, aes(fill = variable))+
  facet_wrap(~ID, scales = 'free') +
  scale_x_discrete(labels = make_labels, name = "study day")

enter image description here

...