Странные пунктирные линии в сюжете зоопарка

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

# Small script to plot daily number of added users to database
library(zoo)

data <- read.csv("search_history.csv", header=FALSE)
# last line will be cut because it might be incomplete
zoodata <- data[1:(length(data$V2)-1), ]
series <- zoo(zoodata$V2, zoodata$V1)

par(mar=c(7, 6, 4, 2), 
    lab=c(5, 6, 5), 
    mgp = c(4, 1, 0))

plot(series,
     main="Number of users added to database over time", 
     xlab="Date", 
     ylab="Number of users",
     las=2,
     lwd=2,
     col="red",
     cex.axis=0.7)

Содержимое search_history.csv:

"2012-12-27","458","4728"
"2012-12-28","239","6766"
"2012-12-29","193","8189"
"2012-12-30","148","7698"
"2012-12-31","137","7370"
"2013-01-01","119","6324"
"2013-01-02","122","7016"
"2013-01-03","115","7986"
"2013-01-04","112","8222"
"2013-01-05","112","6828"
"2013-01-06","124","7318"
"2013-01-07","121","8228"
"2013-01-08","120","8158"
...

Я хочу визуализировать первый (V1) и второй столбец (V2). В основном у меня есть две проблемы: первая и очевидная — это пунктирные линии в y-позиции ~50 и ~450. Как я могу удалить их и почему они вообще включены?

вторая проблема – включение 2013-01-26 в ось x. Как видите, я удалил последнюю строку набора данных, содержащую эти данные (любительски, может быть, есть лучший способ сделать это). Так что в сюжете не должно быть последней даты. Я не понимаю, почему он вообще знает об этой дате, ведь на вход он принимает zoodata, а не data. мой сюжет


person grssnbchr    schedule 26.01.2013    source источник
comment
хорошо, вы были слишком быстры, уже опубликовали ответ .. ;-) это помогло, спасибо. вы можете ответить на вопрос, и я приму его. был бы рад объяснению stringsAsFactors, хотя не очень понял объяснение руководства. и последнее: с этими настройками у меня теперь только 4 отметки x-метки (с 27 декабря по 21 января). как я могу увеличить это число, может быть, до 8? лаборатория параметров, похоже, не работает должным образом, или я просто не понимаю ее.   -  person grssnbchr    schedule 27.01.2013
comment
Вы имеете в виду, что ?factor не имело смысла? Вот аргумент против использования stringsAsFactors=TRUE (stackoverflow.com/a/1368460/967840).   -  person GSee    schedule 27.01.2013
comment
См. этот пост stackoverflow.com/a/4355118/967840, чтобы узнать, как использовать разные метки x-label.   -  person GSee    schedule 27.01.2013


Ответы (2)


Две вещи: ваши строки считываются как факторы, и вы индексируете свой объект zoo по вектору символов, а не по датам.

Если вы включите stringsAsFactors=FALSE в вызов read.csv и присвоите объекту zoo индекс Date, он будет выглядеть так, как вы ожидали.

library(zoo)    
data <- read.csv(text='"2012-12-27","458","4728"
                 "2012-12-28","239","6766"
                 "2012-12-29","193","8189"
                 "2012-12-30","148","7698"
                 "2012-12-31","137","7370"
                 "2013-01-01","119","6324"
                 "2013-01-02","122","7016"
                 "2013-01-03","115","7986"
                 "2013-01-04","112","8222"
                 "2013-01-05","112","6828"
                 "2013-01-06","124","7318"
                 "2013-01-07","121","8228"
                 "2013-01-08","120","8158"', header=FALSE, 
                 stringsAsFactors=FALSE)

zoodata <- data[1:(length(data$V2)-1), ]
series <- zoo(zoodata$V2, as.Date(zoodata$V1))

par(mar=c(7, 6, 4, 2), 
    lab=c(5, 6, 5), 
    mgp = c(4, 1, 0))

plot(series,
     main="Number of users added to database over time", 
     xlab="Date", 
     ylab="Number of users",
     las=2,
     lwd=2,
     col="red",
     cex.axis=0.7)

Что производит:

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

person GSee    schedule 26.01.2013

Вы можете использовать read.zoo

## double quotes were removed but they could have been left in
series <- read.zoo(text = '
2012-12-27,458,4728
2012-12-28,239,6766
2012-12-29,193,8189
2012-12-30,148,7698
2012-12-31,137,7370
2013-01-01,119,6324
2013-01-02,122,7016
2013-01-03,115,7986
2013-01-04,112,8222
2013-01-05,112,6828
2013-01-06,124,7318
2013-01-07,121,8228
2013-01-08,120,8158', sep =',')

Затем, используя вашу сюжетную инструкцию,

plot(series,
     main="Number of users added to database over time", 
     xlab="Date", 
     ylab="Number of users",
     las=2,
     lwd=2,
     col="red",
     cex.axis=0.7)

Вы можете визуально сравнить серию 2 Times... введите здесь описание изображения

person agstudy    schedule 26.01.2013
comment
@agstudy, почему ты убрал все кавычки? Это создает впечатление, что вам нужно выполнять дополнительную ручную работу, которую вам на самом деле не нужно делать. - person GSee; 27.01.2013
comment
@GSee, это выглядит так, но нет ... потому что я тестирую его с read.zoo(text=.., а не с read.zoo(file=... Ваш ответ хорош, потому что он занимается своей проблемой, а мой просто говорит ему о существовании read.zoo. Я протестировал его с кавычками, и он тоже работает, но я думаю, что это не очень хорошая идея - иметь простые кавычки и двойные кавычки вместе... Спасибо за улов. - person agstudy; 27.01.2013
comment
@wnstnsmth, есть целая Чтение данных в зоопарке виньетка, если вы ее еще не видели. - person GSee; 27.01.2013