Формат даты с использованием scale_x_date. Ошибка - PullRequest
0 голосов
/ 03 декабря 2018

Здравствуйте, мне нужно получить ggplot с форматом даты, имеющим этот формат по оси X:

final outlook.

Но у моего формата даты есть время.

sentiment_bing1 <- tidy_trump_tweets %>% 
  inner_join(get_sentiments("bing")) %>% 
  count(word, created_at, sentiment) %>% 
  ungroup()
p <- sentiment_bing1 %>% filter(sentiment == "positive") %>% ggplot(aes(x=created_at, y = n)) + 
  geom_line(stat="identity", position = "identity", color = "Blue") +  scale_x_date(date_breaks ='3 months', date_labels = '%b-%Y') + stat_smooth() + theme_gdocs() +
  xlab("Date") + ylab("Normalized Frequency of Positive Words in Trup's Tweets")

1              abound 11/30/17 13:05  positive 0.0
2               abuse  1/11/18 12:33  negative 0.0
3               abuse  10/27/17 1:18  negative 0.0
4               abuse  2/18/18 17:10  negative 0.0

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

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018
sentiment_bing1 <- tidy_trump_tweets %>% 
  inner_join(get_sentiments("bing")) %>% 
  count(created_at, sentiment) %>% 
  spread(sentiment, n, fill=0) %>%
  mutate(N = (sentiment_bing1$negative - min(sentiment_bing1$negative)) / (max(sentiment_bing1$negative) - min(sentiment_bing1$negative))) %>%
  mutate(P = (sentiment_bing1$positive - min(sentiment_bing1$positive)) / (max(sentiment_bing1$positive) - min(sentiment_bing1$positive))) %>%
  ungroup
sentiment_bing1$created_at <- as.Date(sentiment_bing1$created_at, "%m/%d/%y")

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

0 голосов
/ 03 декабря 2018

Добро пожаловать на ТАК!

Трудно ответить на ваш вопрос, не увидев данные, которые вы используете, и ошибку, которую генерирует ваш код.В следующий раз попробуйте создать воспроизводимый вопрос .Это поможет кому-то определить, где находится ваша проблема.

На основе предоставленного вами кода и данных я создал пример набора данных с (в целом) структурой, аналогичной структуре на диаграмме ...

library(lubridate)
library(ggplot2)
library(ggthemes)

set.seed(100)
start_date <- mdy_hm("03-01-2017-12:00")
end_date <- mdy_hm("03-01-2018-12:00")
number_hours <- interval(start_date, end_date)/hours(1)

created_at <- start_date + hours(6:number_hours)
length(created_at)
word <- sample(c("abound", "abuse"), size = length(created_at), replace = TRUE, 
    prob=c(0.25, 0.75))

Ваше построение графиковКод выглядит хорошо.Я могу ошибаться, но из того, что я могу сказать, ваша проблема может заключаться в том, как вы суммируете частоты.В приведенном ниже коде я использовал пакет lubridate для группировки данных по датам (дням) с учетом ежедневного подсчета частоты.

test_plot <- data_frame(created_at, word) %>%
   mutate(sentiment = 
       case_when(
         word == "abound" ~ "positive",
         word == "abuse" ~ "negative")) %>%
   filter(sentiment == "positive") %>% 
   mutate(created_at = date(round_date(ymd_hms(created_at), unit = "day"))) %>%
   group_by(created_at) %>%
   tally() %>%
   ggplot() +
     aes(x = created_at, y = n) + 
     geom_line(stat="identity", position = "identity", color = "Blue") +  
     geom_smooth() +
     scale_x_date(date_breaks ='3 months', date_labels = '%b-%Y') + 
     theme_gdocs() +
     xlab("Date") + 
     ylab("Frequency of Positive Words in Trump's Tweets")

Что дает вам это ...

enter image description here

...