Я пытаюсь создать простую диаграмму рассеяния, поэтому недели по оси 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)
Привет, я пытаюсь создать простую диаграмму рассеяния, где недели указаны по оси X, а «случаи» — по оси Y, каждый из которых обозначен точкой. Моя главная проблема заключается именно в этой маркировке.
Только что добавил пример сюжета! Как вы можете видеть, в конечном итоге у него есть повторяющиеся месяцы... как я могу заставить его включать каждый месяц только один раз, когда данные кажутся привязанными к имеющимся у меня неравномерным недельным интервалам?
Вы можете установить даты с 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'))
Единственная проблема заключается в том, что они по-прежнему используют начальный день недельных интервалов (проверяется путем включения дня в формат даты), что означает, что метки месяцев расположены не равномерно, как если бы вместо этого они были расположены как первый день. каждого месяца. Хотя спасибо за ответ!
Мы можем использовать 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
Именно то, что я имел в виду! Похоже, что каждый месяц привязан к первому дню месяца (проверяется включением дня в формат даты), а не к первому дню недели, который часто не является первым днем месяца, отлично, спасибо!
Привет, дополнительный вопрос: можно ли каким-либо образом контролировать количество отображаемых месяцев/тиков? Прямо сейчас R показывает мне только январь каждого года, когда я строю график с фактическими данными...
@Fable Попробуйте это: axis.Date(1, at = seq.Date(min(exampledata$Date), max(exampledata$Date), by = "6 month"), format = "%b, %Y")
Какие команды построения графиков вы уже пробовали? Мне непонятно, как вы хотите, чтобы выглядел желаемый сюжет.