Построение еженедельных данных с помощью base::plot с уникальными и равномерно расположенными метками

Я пытаюсь создать простую диаграмму рассеяния, поэтому недели по оси X и «случаи» по оси y, каждый из которых обозначен точкой и примечанием, что я могу использовать только базовый график R (), а не ggplot.

У меня есть данные за 156 недель (около 3 лет), недели привязаны к дате 19 марта 2020 года (переход на 7 дней назад и вперед для создания интервала каждой недели). Из-за этого многие недели начинаются в одном и том же месяце или включают в свой интервал границу двух разных месяцев.

Я пытаюсь получить только 36 месяцев и лет на метках оси X, но кажется, что нет способа отделить 156 точек данных (которые я отслеживаю, используя день начала недели) от меток оси X. , поэтому я либо получаю повторяющиеся месяцы-годы, либо неравномерно расположенные деления. Есть ли способ сделать это, используя базовую функцию Plot() в R? Я не могу использовать ggplot. Я думаю, может быть, мне нужна какая-то базовая версия сюжета() масштаба_x_date() ggplot?

Я попытался преобразовать текстовые даты в фактический формат даты с помощью as.Date, а затем построить график напрямую, но это все равно приводит к повторению месяца на метке оси X...

Вот игрушечный пример: я пытаюсь построить график недель x случаев, но хочу, чтобы метки были месяцами и годами, а не неделями:

Lines <- "Week_Interval        Cases     Week_Start
19-01-03-19-01-09   696537   2019-01-03
19-01-03-19-01-09   718748   2019-01-10
19-01-17-19-01-23   799355   2019-01-17
19-01-24-19-01-30   805800  2019-01-24
19-01-31-19-02-06   701262  2019-01-31
19-02-07-19-02-13   531579  2019-02-07
19-02-14-19-02-20   690068  2019-02-14
19-02-21-19-02-27   756947  2019-02-21
19-02-28-19-03-06   718757  2019-02-28
 9-03-07-19-03-13  701768    2019-03-07
19-03-14-19-03-20  820113   2019-03-14
19-03-21-19-03-27  645259   2019-03-21"


exampledata <- read.table(textConnection(Lines), header = TRUE)

exampledata$Date <- as.Date(exampledata$Week_Start)

# Plot outcome variable versus time
plot(exampledata$Date,exampledata$Cases,
main = "Weeks by Cases",
ylab = "Cases",
ylim=c(500000,900000),
xlab = "",
las=2,
col = "red",
xaxt = "n")

# Add x-axis year labels
axis(1, exampledata$Date, format(exampledata$Date, "%b, %Y"))

# Add in the points for the figure
points(exampledata$Date,exampledata$Cases,
col = "red",
pch=20)

Какие команды построения графиков вы уже пробовали? Мне непонятно, как вы хотите, чтобы выглядел желаемый сюжет.

MrFlick 25.07.2024 16:52

Привет, я пытаюсь создать простую диаграмму рассеяния, где недели указаны по оси X, а «случаи» — по оси Y, каждый из которых обозначен точкой. Моя главная проблема заключается именно в этой маркировке.

Fable 25.07.2024 17:03

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

Fable 25.07.2024 17:14
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете установить даты с duplicated с 1 по 7 substr.

> plot(exampledata$Date, exampledata$Cases, main = "Weeks by Cases", ylab = "Cases",
+      ylim=c(500000, 900000), xlab = "", las=2, col = "red", xaxt = "n", pch=20)
> ats <- exampledata$Date[!duplicated(substr(exampledata$Date, 1, 7))]
> axis(1, at=ats, labels=strftime(ats, '%b %Y'))

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

Fable 25.07.2024 18:47
Ответ принят как подходящий

Мы можем использовать seq.Date и axis.Date:

plot(exampledata$Date, exampledata$Cases,
     main = "Weeks by Cases",
     ylab = "Cases",
     ylim=c(500000,900000),
     xlab = "",
     las=2,
     col = "red",
     xaxt = "n")

axis.Date(1, at = seq.Date(min(exampledata$Date), 
                           max(exampledata$Date), 
                           by = "month"), 
          format = "%b, %Y")

Created on 2024-07-25 with reprex v2.0.2

Именно то, что я имел в виду! Похоже, что каждый месяц привязан к первому дню месяца (проверяется включением дня в формат даты), а не к первому дню недели, который часто не является первым днем ​​месяца, отлично, спасибо!

Fable 25.07.2024 18:46

Привет, дополнительный вопрос: можно ли каким-либо образом контролировать количество отображаемых месяцев/тиков? Прямо сейчас R показывает мне только январь каждого года, когда я строю график с фактическими данными...

Fable 25.07.2024 19:20

@Fable Попробуйте это: axis.Date(1, at = seq.Date(min(exampledata$Date), max(exampledata$Date), by = "6 month"), format = "%b, %Y")

M-- Save the Data Dump 25.07.2024 19:37

Другие вопросы по теме