我知道这个问题可能是陈词滥调,但我很难做到这一点。
我的数据集采用以下格式:
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
我想要创建一个时间序列图,x轴代表时间和& y轴vists。另外,我想用日期标记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"))
答案 0 :(得分:51)
1)由于时间是日期,请务必使用"Date"
课程,而不是"POSIXct"
或"POSIXlt"
。有关建议,请参阅R News 4/1,并在最后的注释中定义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
只是为了让示例保持自包含,实际上它将被替换为"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
命令。< / p>
注意:强>
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"
答案 1 :(得分:20)
我喜欢使用ggplot2
来做这类事情:
df$Date <- as.Date( df$Date, '%m/%d/%Y')
require(ggplot2)
ggplot( data = df, aes( Date, Visits )) + geom_line()
答案 2 :(得分:7)
您的代码有很多错误。
dm$Day
和dm$day
。可能不是一回事Date
和Visits
。因此,您将dm$Date
和dm$Visits
%Y-%m-%d
,这应该是%m/%d/%Y
以下代码应绘制您想要的内容:
dm$newday = as.Date(dm$Date, "%m/%d/%Y")
plot(dm$newday, dm$Visits)
答案 3 :(得分:3)
您可以通过使用text()
来破解轴标记来旋转日期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)
答案 4 :(得分:3)
可以在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")
答案 5 :(得分:0)
我也喜欢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')