【问题标题】:Dynamically Set X limits on time plot在时间图上动态设置 X 限制
【发布时间】:2014-09-04 21:41:01
【问题描述】:

我想知道如何动态设置包含两个不同日期时间序列的时间序列图的 x 轴限制。我开发了以下代码来提供我的问题的可重现示例。

#Dummy Data
Data1 <- data.frame(Date = c("4/24/1995","6/23/1995","2/12/1996","4/14/1997","9/13/1998"), Area_2D = c(20,11,5,25,50))
Data2 <- data.frame(Date = c("6/23/1995","4/14/1996","11/3/1997","11/6/1997","4/15/1998"), Area_2D = c(13,15,18,25,19))
Data3 <- data.frame(Date = c("4/24/1995","6/23/1995","2/12/1996","4/14/1996","9/13/1998"), Area_2D = c(20,25,28,30,35))
Data4 <- data.frame(Date = c("6/23/1995","4/14/1996","11/3/1997","11/6/1997","4/15/1998"), Area_2D = c(13,15,18,25,19))

#Convert date column as date
Data1$Date <- as.Date(Data1$Date,"%m/%d/%Y")
Data2$Date <- as.Date(Data2$Date,"%m/%d/%Y")
Data3$Date <- as.Date(Data3$Date,"%m/%d/%Y")
Data4$Date <- as.Date(Data4$Date,"%m/%d/%Y")

#PLOT THE DATA
max_y1 <- max(Data1$Area_2D)

# Define colors to be used for cars, trucks, suvs
plot_colors <- c("blue","red")

plot(Data1$Date,Data1$Area_2D, col=plot_colors[1], 
     ylim=c(0,max_y1), xlim=c(min_x1,max_x1),pch=16, xlab="Date",ylab="Area", type="o")
par(new=T)
plot(Data2$Date,Data2$Area_2D, col=plot_colors[2], 
     ylim=c(0,max_y1), xlim=c(min_x1,max_x1),pch=16, xlab="Date",ylab="Area", type="o")

我在上面的代码中看到的主要问题是绘图上有两个不同的 x 轴,一个用于 Data1,另一个用于 Data2。我希望有一个 x 轴跨越由 Data1 和 Data2 中的日期确定的日期范围。

我的问题是:

如何为两个系列动态创建 x 轴? (即从数据框“Data1”和“Data2”中选择最小和最大日期)

【问题讨论】:

    标签: r plot time-series


    【解决方案1】:

    解决方案是将数据合并为一个data.frame,并以此为基础。这种方法非常适用于ggplot2 绘图包。首先我们合并数据并添加一个 ID 列,它指定它属于哪个数据集。我在这里使用字母:

    Data1$ID = 'A'
    Data2$ID = 'B'
    merged_data = rbind(Data1, Data2)
    

    然后使用ggplot2创建绘图,其中颜色表示它属于哪个数据集(可以轻松更改为不同的颜色):

    library(ggplot2)
    ggplot(merged_data, aes(x = Date, y = Area_2D, color = ID)) + 
        geom_point() + geom_line()
    

    请注意,这里有一个统一的 x 轴。在这种情况下,这很好,但如果时间序列不重叠,这可能是有问题的。在这种情况下,我们可以使用多个子图,在ggplot2 中称为构面:

    ggplot(merged_data, aes(x = Date, y = Area_2D)) + 
        geom_point() + geom_line() + facet_wrap(~ ID, scales = 'free_x')
    

    现在每个方面都有自己的 x 轴,即每个子数据集都有一个。哪种方法最有效取决于具体情况。

    【讨论】:

    • 上述解决方案有效,但我确实需要创建没有使用ggplot2 附带的灰色背景的图。我正在创建一个附录,所有其他数字都是空白的。是否可以使用ggplot2 去除网格线和背景颜色?
    • 我也不太喜欢灰色背景。您可以使用主题更改此类内容。使用黑白主题已经使人物更加漂亮。您可以使用theme_set(theme_bw()) 执行此操作。要进一步调整(theme_bw() 仍然有网格线),您必须查看 ggplot2 文档,或在线搜索。
    猜你喜欢
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 2015-06-18
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多