Есть ли способ разделить даты на более мелкие сегменты на оси х? - PullRequest
0 голосов
/ 20 января 2019

Я работаю над школьным проектом и уже некоторое время пытаюсь решить эту проблему, но не могу найти решение этой проблемы.

Проблема в том, что всякий раз, когда я запускаю это, ось х заполнена слишком большим количеством переменных. Я нашел пост, похожий на этот, но этот пост работает с обычными переменными, а не с переменными даты и времени (% Y /% m), как я, ведьма создает проблемы, когда я пытаюсь запустить код, подобный этому:

"scale_x_discrete(breaks = seq(0, 100, by = 5))"

Имейте в виду, у меня много строк, я не знаю, может ли это вызвать проблемы, но:

И код:

plottest1 <- function(St, na){


  test1 <- ggplot(data = KunskiDepozit1, aes(x=Datum, y=St, group = 1)) +
    geom_line() + labs(x = "Datum", y = na, title = paste("vizualization ", na)) + geom_point()


  test1 <- test1 +
    theme_update(plot.title = element_text(hjust = 0.5))


  return(test1)
}

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Как отметили Geosopher и PoGibas, вы должны убедиться, что ggplot понимает, что датум является датой. Вы можете рассмотреть пакет lubridate.

Если я кослюсь, я думаю, что ваша дата указана в одном столбце как YYYY-MM, поэтому для этого вам просто нужно что-то вроде:

date_df <- existing_df %>%
    mutate(Datum = paste0(Datum, "-01")) %>%
    mutate(Datum = lubridate::ymd(Datum)) 

Я извлек следующий пример кода из главы lubridate из R для Data Science (свободно доступна онлайн) , в которой объясняется, как это сделать, когда элементы даты и времени разделены на различные столбцы. , используя функцию lubridate::make_datetime. Это также показывает, что вы можете напрямую построить переменную даты и времени, и ggplot сделает все правильно.

library(tidyverse)
library(lubridate)
library(nycflights13) # Dataset with flight details

# Custom function to transform the date and time information from several columns
# into one "date-time" column. You may be able to get away simply with make_datetime

make_datetime_100 <- function(year, month, day, time) {
  make_datetime(year, month, day, time %/% 100, time %% 100)
}

# Apply that function to relevant columns in the dataset
flights_dt <- flights %>% 
  filter(!is.na(dep_time), !is.na(arr_time)) %>% 
  mutate(
    dep_time = make_datetime_100(year, month, day, dep_time),
    arr_time = make_datetime_100(year, month, day, arr_time),
    sched_dep_time = make_datetime_100(year, month, day, sched_dep_time),
    sched_arr_time = make_datetime_100(year, month, day, sched_arr_time)
  ) %>% 
  select(origin, dest, ends_with("delay"), ends_with("time"))


# Plot the dataset
flights_dt %>% 
  ggplot(aes(dep_time)) + 
  geom_freqpoly(binwidth = 86400) # 86400 seconds = 1 day

0 голосов
/ 20 января 2019

Поскольку ваша ось x является датой, я бы попытался использовать ось фактической даты вместо дискретной оси.Может быть, поиграйте с чем-то вроде:

scale_x_date(date_breaks = "2 weeks")

Подробности смотрите в документации по шкале ggplot2!

?ggplot2::scale_x_date()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...