#r #ggplot2
#r #ggplot2
Вопрос:
У меня длинный фрейм данных, в который я включаю формат для меток по оси x. По некоторым причинам, которые трудно увидеть в небольшом примере, я хотел бы добавить год в первый перерыв и в начале каждого года.
Использование (длинного) столбца для date_labels
in scale_x_date
не работает, использование (исходного) столбца не показывает то, что я ожидаю.
При написании этого я нашел «решение», но я не понимаю, зачем нужен другой элемент («что-то»).
Вот мой код:
library(tidyverse)
t <- tibble(
day = as.Date(
c("2019-11-01", "2019-12-01", "2020-01-01", "2020-02-01")),
a = c(5 , 7 , 5 , 4 ) ,
b = c(6 , 6 , 4 , 6 ) ,
label = c("%mn%Y" , "%m" , "%mn%Y" , "%m" )
)
df <- t %>%
pivot_longer(c("a","b"), names_to="cat", values_to="value")
моя первая попытка:
ggplot()
geom_bar(data = df, aes(x = day, y = value, fill = cat), stat = "identity",
position = position_dodge())
scale_x_date(breaks = "1 month", date_labels = df$label)
# error "Breaks and labels are different lengths" fair enough
вторая попытка:
scale_x_date(breaks = "1 month", date_labels = t$label)
# not what I expected: %m %mn%Y %m %mn%Y
это работает:
scale_x_date(breaks = "1 month",
date_labels = c("something", df$label[c(TRUE, FALSE)]))
но почему я должен вставлять «что-то»?
Комментарии:
1. Я немного смущен. У вас есть столбец для форматов дат, но обычно на графике с непрерывной осью x нет однозначного соответствия между разрывами оси x и наблюдениями в вашем фрейме данных (ваш пример не является исключением). Поэтому неясно, как вы ожидаете, что метки форматирования по строкам будут работать.
2. Я согласен, наблюдения и разрывы независимы. Я мог бы определить представления меток в отдельном векторе. Однако поведение идентично.
3. Скорее
scale_x_date(breaks = "1 month", date_labels = t$label)
всего, генерируется нижний левый предел, который находится в векторе, но не нанесен на график.