Как отобразить иерархическую структуру на метках оси с помощью ggplot2?

#r #ggplot2

#r #ggplot2

Вопрос:

Я хотел бы создать подобный график с помощью ggplot2: Гистограмма с иерархическими метками на оси x

(Здесь я допустил небольшую ошибку, из-за которой отображались не все метки. очевидно, я хочу, чтобы отображались все метки 🙂 ) Однако мой поиск в Google ничего не дал. Наиболее близкий вариант, который я получил, был с barNest от plotrix, однако мне не нравится качество создаваемых графиков. Метки ggplot2 выглядят намного лучше.

В идеальном случае я ожидал бы, что смогу сделать что-то вроде этого: scale_x_discrete(«Заголовок оси», метки = Level1 Level2 Level3) И тогда Level1, Level2 и Level3 были бы столбцами фрейма данных, который использовался в функции qplot. Если я смогу заставить это работать, я хочу создать функцию, чтобы добавить этот тип функциональности к функции масштабирования. Возможно, scale_x_hierarchical было бы лучше. Аналогичные данные могут быть сгенерированы с помощью следующего кода:

 data <- data.frame(
  Subject = c(rep(1, 48), rep(2, 48), rep(3, 48), rep(4, 48)), 
  month = rep(c(rep(1, 12), rep(4, 12), rep(7, 12), rep(10, 12)), 4), 
  day = rep(c(rep(1, 4), rep(11, 4), rep(21, 4)), 16), 
  hour = rep(c(0, 6, 12, 18), 48), 
  data = rnorm(192))
  

Кстати, используемое здесь изображение создано с помощью Spotfire.

Комментарии:

1. Это отвратительный сюжет, и я надеюсь, что в ggplot нет способа сделать это. (Перефразируя ответ Хэдли на другой вопрос.) Но если серьезно, этот график не подходит для меня. Вместо этого используйте фасеты.

2. По какой-то причине вы женаты на том, чтобы делать это в ggplot2? Похоже, это задание для базовой графики. Также, похоже, настало время переосмыслить, как вы строите свои данные, а не какое программное обеспечение использовать.

3. Не могли бы вы предоставить нам некоторые данные?

4. @Andrie: Вы можете подумать, что это мерзость, другим это действительно нравится. Я не думаю, что фасеты будут работать с четырьмя вложенными уровнями? @John: нет, я не женат на ggplot2, но мне действительно нравится внешний вид и то, как он выстраивает график. @Brandon Bertelsen: Я добавил немного R для создания образца набора данных.

5. Вы действительно можете поместить 192 метки часов в одну строку и при этом сохранить ее читаемой? Каждое одно- или двухзначное число должно быть примерно такой же ширины, как каждая полоса.

Ответ №1:

Это немного отличается, но в блоге LearnR есть пост о том, как связать таблицу с графиком, чтобы она выглядела следующим образом:

введите описание изображения здесь