在POSIXct时间上绘制时,使用ggplot设置x轴的最小值和最大值

B. *_*vis 1 plot r ggplot2

我正在尝试绘制随时间变化的值并出现错误:

Error: Invalid input: date_trans works with objects of class Date only
Run Code Online (Sandbox Code Playgroud)

我在这篇文章以及这里的文章中解决了早期的问题。我想设置x轴的最小值和最大值,以删除没有数据的图的最末端的空白。

该代码称为绘图,但没有校正的x轴。

ggplot(dta, aes(x= WeekStarting, y = AvgWeekEle, group = IndID))+
        geom_line(size = 1)+ 
        theme(axis.text.x=element_text(angle=30, hjust=1))
Run Code Online (Sandbox Code Playgroud)

我尝试使用scale_x_date下面的代码来设置x轴的限制-这会产生错误。

ggplot(dta, aes(x= WeekStarting, y = AvgWeekEle, group = IndID))+
        geom_line(size = 1)+ 
        theme(axis.text.x=element_text(angle=30, hjust=1))+
        scale_x_date(breaks = "1 week", labels=date_format("%b-%d-%Y"), 
            limits = as.Date(c("2014-01-6","2014-02-15")))
Run Code Online (Sandbox Code Playgroud)

一个dput()我的数据如下。我正在使用最新版本的R,并且正在运行Windows 7。

提前致谢。

dta <- structure(list(IndID = c("BHS_011_A", "BHS_011_A", "BHS_011_A", 
"BHS_011_A", "BHS_011_A", "BHS_011_A", "BHS_011_A", "BHS_011_A", 
"BHS_015_A", "BHS_015_A", "BHS_015_A", "BHS_015_A", "BHS_015_A", 
"BHS_015_A", "BHS_015_A", "BHS_015_A", "BHS_018_A", "BHS_018_A", 
"BHS_018_A", "BHS_018_A", "BHS_018_A", "BHS_018_A", "BHS_018_A", 
"BHS_018_A"), WeekStarting = structure(c(1388905200, 1389510000, 
1390114800, 1390719600, 1391324400, 1391929200, 1392534000, 1393138800, 
1388905200, 1389510000, 1390114800, 1390719600, 1391324400, 1391929200, 
1392534000, 1393138800, 1388905200, 1389510000, 1390114800, 1390719600, 
1391324400, 1391929200, 1392534000, 1393138800), class = c("POSIXct", 
"POSIXt"), tzone = ""), AvgWeekEle = c(1717.21428571429, 1770.07142857143, 
1737.53571428571, 1673.32142857143, 1648.42857142857, 1760.71428571429, 
1668.48148148148, 1654.5, 1643.5, 1794.85714285714, 1740.64285714286, 
1664.73076923077, 1704.73076923077, 1685.2962962963, 1707.89285714286, 
1661.46428571429, 1702.87096774194, 1691.17647058824, 1653.41176470588, 
1650.30303030303, 1741.54545454545, 1652.33333333333, 1573.125, 
1570.82352941176)), .Names = c("IndID", "WeekStarting", "AvgWeekEle"
), class = "data.frame", row.names = c(3362L, 3363L, 3364L, 3365L, 
3366L, 3367L, 3368L, 3369L, 3470L, 3471L, 3472L, 3473L, 3474L, 
3475L, 3476L, 3477L, 3535L, 3536L, 3537L, 3538L, 3539L, 3540L, 
3541L, 3542L))
Run Code Online (Sandbox Code Playgroud)

Hen*_*rik 5

因为您的x变量属于类as.POSIXct,所以应该scale_x_datetime改用它。scale_x_date用于类的变量Date(错误消息可能会提示)。

“要删除图的最末端的空白”,可以expandscale调用中使用参数(请参见此处)。设置expand为零将消除数据和轴之间的默认小间隙。

您也可以看一下这篇文章,limitsscale调用(或xlim)中使用自变量,或用于coord_cartesian“缩放”。

ggplot(dta, aes(x= WeekStarting, y = AvgWeekEle, group = IndID)) +
  geom_line(size = 1) + 
  theme(axis.text.x=element_text(angle = 30, hjust = 1)) +
  scale_x_datetime(breaks = "1 week", labels = date_format("%b-%d-%Y"),
                   expand = c(0, 0))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明