У меня есть данные в формате .csv. Первый столбец — даты, второй столбец — количество дней. Я хочу построить количество дней по сравнению с датой. (см. здесь)
В моем .csv даты расположены в хронологическом порядке по годам. В RStudio начальный график хронологичен по номеру месяца.
install.packages("tidyverse")
library(tidyverse)
#load my spreadsheet
openingData <- read_csv("daysPriorToOpening.csv")
ggplot(data = openingData) +
geom_col(mapping = aes(x = dateOpened, y = daysPrior) +
labs(x = "Date Opened", y = "Days prior to opening at or above 11.0")
Это создает вывод это, упорядоченный по номеру месяца. Мне нравится внешний вид, только не порядок. Кто-то предложил мне попробовать использовать as.Date()
openingData$dateOpened <- as.Date(openingData$dateOpened, format = "%m/%d/%Y")
Затем я снова запустил код для построения графика, и он был построен в хронологическом порядке, но теперь есть большие пробелы. См. здесь. Даты не помечены, как на первом изображении; читатель должен угадать точную дату.
Я предполагаю, что другой внешний вид заключается в том, что в первом случае даты являются символами и дискретными. Во втором случае использование as.Date() изменило их на Даты, и они стали непрерывными. Есть ли способ,





Вам нужно преобразовать даты в фактор и упорядочить уровни факторов в соответствии с датой, которую они представляют. Это включает в себя преобразование в дату, упорядочивание, а затем обратное преобразование.
dates <- as.Date(openingData$dateOpened, format = "%m/%d/%y")
levs <- strftime(sort(dates), format = "%m/%d/%y")
openingData$dateOpened <- factor(strftime(dates, format = "%m/%d/%y"), levs)
ggplot(data = openingData) +
geom_col(mapping = aes(x = dateOpened, y = daysPrior)) +
labs(x = "Date Opened", y = "Days prior to opening at or above 11.0")
openingData %>%
mutate(dateOpened = as.Date(dateOpened,"%m/%d/%y")) %>%
arrange(dateOpened) %>%
mutate(id = factor(row_number(),labels = dateOpened)) %>%
ggplot() +
geom_col(mapping = aes(x = id, y = daysPrior))+
labs(x = "Date Opened", y = "Days prior to opening at or above 11.0")
Отлично, спасибо!<br/> Как вы думаете, подходит ли geom_col? Я также разместил свой первоначальный вопрос на Reddit, и ответивший не подумал, что это лучше всего использовать. Они предложили диаграмму рассеяния, поскольку данные представляют собой дискретные точки. У меня нет опыта работы со статистикой или визуализацией данных. Я думал, что с колонками это легко увидеть; Я думаю, это так же легко увидеть с диаграммой рассеяния.<br/>Интересно узнать больше, поскольку я пытаюсь узнать, что лучше.
В целом соглашусь, что это, наверное, не лучшая визуализация. Ось x сбивает с толку - это дата, но мы манипулировали здесь, чтобы исключить числовое значение из даты (т.е. расстояние между датами естественным образом не используется)
Разброс тоже возможен - я думаю, это зависит от того, что вы пытаетесь сообщить: вы можете изменить свою колонку dateOpened на настоящую дату, а затем попробовать ggplot(openingData, aes(dateOpened, daysPrior)) + geom_point(size=4)+ ylim(0,100) + geom_text(aes(label=daysPrior),nudge_y=3)
Спасибо, я ценю это! Как вы думаете, это лучшая визуализация того, что я хочу отобразить? Я предполагаю, что тот, который у меня был, где ось X была датами, может быть лучшим, но, как я уже сказал, мне не нравились большие пробелы. Я также разместил вопрос на Reddit, и пользователь предложил график разброса.