Как создать линейную диаграмму в R с метками оси x, которые являются датами из данных таблицы? - PullRequest
0 голосов
/ 23 октября 2018

У меня большой набор данных, который содержит наблюдения, сделанные в разные даты.Я хотел бы представить в R частоту наблюдений в зависимости от месяца, в котором они были сделаны.Я использовал таблицу для подсчета количества строк на дату:

freq_by_month <- c(table(format(dataframe_name$Date_Collected,"%Y-%m")))

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

Я пытался использовать

plot(freq_by_month, type="o", xlab="Date", ylab="a y label goes here")

, что дает мне график с числовыми метками оси x.

Graph with numeric data labels.

Я также пытался

plot(freq_by_month, type="o", xaxt="n", xlab="Date", ylab="a y label goes here")
axis(1, at=1:34, labels=TRUE)

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

Для справки:

str(freq_by_month)
 Named int [1:34] 1 1 9 1 3 4 2 1 1 3 ...
 - attr(*, "names")= chr [1:34] "2012-03" "2015-06" "2015-07" "2015-08"
 head(freq_by_month)
2012-03 2015-06 2015-07 2015-08 2016-01 2016-02 
      1       1       9       1       3       4 

Если я собираюсь сделать это полностью задом наперед, иЯ не должен использовать таблицу для подсчета данных, я был бы рад это знать.

1 Ответ

0 голосов
/ 27 октября 2018

Вот как я решил эту проблему.

df<-read.xlsx("data set file.xlsx",1, header=TRUE, fill=TRUE) 
 #Import the data ("name of file", sheet number, etc.)

str(df)
'data.frame':   911 obs. of  16 variables:
 $ Date: Date, format: "2012-03-23" "2015-06-15" ...
 $ Col2: chr  "lorem" "ipsum" ...
 $ Col3: chr  "lorem" "ipsum" .... #etc.

df$Month <-as.Date(cut(df$date, breaks="month") 
 #adds a column ("Month") with the Date rounded down 
 #to the first of each month 

df2 <-df %>%
  group_by(Month) %>%
  summarise(date_column_name=n()) #summarizes the number of 
                                  #observations by month

str(df2)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   34 obs. of  2 
variables:
$ Month    : Date, format: "2012-03-01" "2015-06-01" ...
$ Summarized_Column: int  1 1 9 1 3 4 2 1 1 3 ...

df3 = as.data.frame(df2) #Converts df2 to a data frame.

#all the prettiness for plotting:
ggplot(df3, aes(x=Month, y=Date, color=(Month))) + 
  geom_point()+
  labs(title="Title", x="", y="Y Axis Title") +
  ylim(c(0,1000))+
  scale_x_date(date_breaks = "4 months", date_labels= "%b-%y") +
  theme_classic() +
  theme(axis.text.x = element_text(angle = 60, vjust=1, hjust = 1), #rotates labels and shift location
    panel.background = element_rect(fill="gray97", colour="black"),
    axis.text=element_text(size=11),
    axis.title = element_text(size=13),
    plot.title = element_text(hjust = 0.5))

Вывод

...