在x轴上用date标签绘制时间序列

我知道这个问题可能是一个陈词滥调,但我很难做到这一点。

我有以下格式的数据集:

    date访问11/1/2010 696537 11/2/2010 718748 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/9/2010 718757 11/10/2010 701768 11/11/2010 820113 11/12/2010 645259 

我想创build一个时间序列图,其中x轴代表时间和y轴的vists。 另外,我想用date标记x轴。 我使用的代码如下:

dm$newday = as.POSIXct(strptime(dm$Day, format="%Y-%m-%d")) plot(as.Date(dm$day),dm$visits) axis.Date(1,Day,at=seq(as.Date("2010/10/30"), as.Date("2011/01/29"),by="days")) 

1)由于时间是date,所以一定要使用"Date"类,而不是"POSIXct""POSIXlt" 。 请参阅R新闻4/1获得build议,并在最后的注释中定义Lines 。 这里没有使用包。

 dm <- read.table(text = Lines, header = TRUE) dm$Date <- as.Date(dm$Date, "%m/%d/%Y") plot(Visits ~ Date, dm, xaxt = "n", type = "l") axis(1, dm$Date, format(dm$Date, "%b %d"), cex.axis = .7) 

使用text = Lines只是为了让这个例子自成一体,而且实际上它会被replace成类似"myfile.dat"东西。 (继续图像)

截图

2)由于这是一个时间序列,你可能希望用一个时间序列表示来给出稍微简单的代码:

 library(zoo) z <- read.zoo(text = Lines, header = TRUE, format = "%m/%d/%Y") plot(z, xaxt = "n") axis(1, dm$Date, format(dm$Date, "%b %d"), cex.axis = .7) 

根据你想要的情节看起来,只要在第一种情况下使用plot(Visits ~ Date, dm)或者在第二种情况下使用plot(z)就可以完全抑制axis命令。

注意:

 Lines <- "Date Visits 11/1/2010 696537 11/2/2010 718748 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/9/2010 718757 11/10/2010 701768 11/11/2010 820113 11/12/2010 645259" 

我喜欢使用ggplot2这样的事情:

 df$Date <- as.Date( df$Date, '%m/%d/%Y') require(ggplot2) ggplot( data = df, aes( Date, Visits )) + geom_line() 

在这里输入图像描述

你的代码有很多错误。

  • 你正在混合dm$Daydm$day 。 可能不是一回事
  • 您的列标题是DateVisits 。 所以你可以访问他们(我猜)为dm$Datedm$Visits
  • 在date字段你有%Y-%m-%d这应该是%m/%d/%Y

下面的代码应该绘制你想要的:

 dm$newday = as.Date(dm$Date, "%m/%d/%Y") plot(dm$newday, dm$Visits) 

您可以通过使用文本()攻击轴符号来旋转date

 Lines <- "Date Visits 11/1/2010 696537 11/2/2010 718748 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/9/2010 718757 11/10/2010 701768 11/11/2010 820113 11/12/2010 645259" dm <- read.table(textConnection(Lines), header = TRUE) dm$Date <- as.Date(dm$Date, "%m/%d/%Y") plot(Visits ~ Date, dm, xaxt = "n", type = "l") axis(1,at=NULL, labels=F) text(x = dm$Date, par("usr")[3]*.97, labels = paste(dm$Date,' '), srt = 45, pos = 1, xpd = TRUE,cex=.7) 

这可能在ggplot中,你可以使用scale_date来完成这个任务

  library(ggplot2) Lines <- "Date Visits 11/1/2010 696537 11/2/2010 718748 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/9/2010 718757 11/10/2010 701768 11/11/2010 820113 11/12/2010 645259" dm <- read.table(textConnection(Lines), header = TRUE) dm <- mutate(dm, Date = as.Date(dm$Date, "%m/%d/%Y")) ggplot(data = dm, aes(Date, Visits)) + geom_line() + scale_x_date(format = "%b %d", major = "1 day") 

我也喜欢ggplot

这里有一个例子:

 df1 = data.frame( date_id = c('2017-08-01', '2017-08-02', '2017-08-03', '2017-08-04'), nation = c('China', 'USA', 'China', 'USA'), value = c(4.0, 5.0, 6.0, 5.5)) ggplot(df1, aes(date_id, value, group=nation, colour=nation))+geom_line()+xlab(label='dates')+ylab(label='value') 

在这里输入图像描述