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

#r

Вопрос:

Для следующих входных данных,

 Date    Visits
11/1/2010   696537
11/3/2010   799355
11/4/2010   805800
11/5/2010   701262
11/6/2010   531579
11/7/2010   690068
11/8/2010   756947
11/10/2010  701768
11/11/2010  820113
11/12/2010  645259
 

Когда я запускаю следующий код, я вижу, что 11/3/2010 все еще занимает место. Есть ли способ удалить место, занятое этой датой на графике? Каков общий метод пропуска всех дат, отсутствующих в данных?

 f$Date <- as.Date(f$Date, "%m/%d/%Y")
plot(Visits ~ Date, f, xaxt = "n", type = "l")
axis(1, f$Date, format(f$Date, "%b %d"), cex.axis = .7)
 

Комментарии:

1. Вы пытаетесь создать ось x, которая не соизмерима с фактическим прошедшим временем? (Я предполагаю, что вы хотели написать, что 2/2/2010 все еще создает разрыв между 11/3/ и 11/1.) Если это так, то используйте seq_along(Дата) в качестве оси X. Я думаю, что это должно работать в формуле, но если нет, то используйте вызов в стиле построения графика(x=…, y=..).

2. Нет. Я хочу удалить пробел на 11/2/2010 в дополнение к тому, чтобы не показывать галочку на 11/2/2010.

3. Ваш код включает в себя все f$Date в axis(.) . Почему вы думаете, что R должен явно игнорировать аргументы at= и labels= ?

4. Я не знаю. Вы можете показать мне код, который не позволяет дате, не появившейся в данных, занимать пробелы.

5. Ваша x ось непрерывна, поэтому она соответствующим образом сохранит промежутки. Если вы хотите, чтобы он был категориальным, вам нужно изменить свои данные с Date класса на строки. Однако мне это кажется странным: пробелы во временной шкале актуальны, даже если в них нет данных.

Ответ №1:

Поскольку вы, похоже, не поняли мой комментарий, я включаю его сюда после тестирования. Базовая шкала по оси х теперь является целыми числами, начиная с 1.

  f <- read.table(text="Date    Visits
 11/1/2010   696537
 11/3/2010   799355
 11/4/2010   805800
 11/5/2010   701262
 11/6/2010   531579
 11/7/2010   690068
 11/8/2010   756947
 11/10/2010  701768
 11/11/2010  820113
 11/12/2010  645259", head=T)
 f$Date <- as.Date(f$Date, "%m/%d/%Y")
 plot(Visits ~ seq_along(Date), f, xaxt = "n", type = "l")
 axis(1, seq_along(f$Date), format(f$Date, "%b %d"), cex.axis = .7)
 

введите описание изображения здесь

Комментарии:

1. Кстати, вы знаете, какая plot() функция вызывается? Я хочу понять, почему формула может быть принята функцией построения. Я вижу это plot.default plot.new plot.ts plot.design plot.spec.coherency plot.window plot.ecdf plot.spec.phase plot.xy plot.function plot.stepfun . Но я не знаю, какой из них используется для построения формулы Visits ~ seq_along(Date) .

2. Вызываемая функция есть plot.formula . Если вы хотите увидеть код, вам может потребоваться ввести getAnywhere(plot.formula) его на консоли, так как некоторые plot методы не экспортируются. Вы можете просмотреть все методы построения S3, которые в данный момент находятся в вашем рабочем methods(plot) пространстве . Имена функций со звездочкой в конце «скрыты».

3. Когда следует использовать plot.formula? Когда следует использовать plot.default? В этом случае можно ли также использовать тип графика(x, y, …)?

4. Не уверен, что подразумевается под первым и вторым вопросами. Re #3: Я не понимаю, почему бы и нет. На самом деле, в моем комментарии прямо сказано, что это то, что я бы попробовал, если plot.formula бы не смог выполнить seq_along должным образом, когда это было в RHS формулы. Мне интересно, стоит ли вам взглянуть на help(pac=graphics) и ?device