【问题标题】:bar chart of constant height for factors in time series时间序列中因子的恒定高度条形图
【发布时间】:2011-06-22 08:36:27
【问题描述】:

我是一个尝试用 R 制作图表的初学者。请帮我。我有多列(时间序列)的数据。每列包含因子(请参阅下面的一列示例数据)。我想制作一个时间序列的恒定高度(比如 1 个单位)条形图,并想用 x 轴上的日期以不同颜色表示“A”和“B”。任何提示? 提前谢谢你!

DATE                      GROUP
2011.06.18 00:00:00         R
2011.06.18 06:00:00         L
2011.06.18 12:00:00         R
2011.06.18 18:00:00         R
2011.06.19 00:00:00         L
2011.06.19 06:00:00         L
2011.06.19 12:00:00         R
2011.06.19 18:00:00         L
2011.06.20 00:00:00         L
2011.06.20 06:00:00         L
2011.06.20 12:00:00         R
2011.06.20 18:00:00         L
2011.06.21 00:00:00         R
2011.06.21 06:00:00         L

【问题讨论】:

  • 什么是 A 和 B?目前,您有一个因子 L 和 R。您的意思是您有几个列,例如 GROUP,每个列是 L 或 R。您想计算每个时间点的 Ls 和 Rs,然后显示为堆积条形图?

标签: r


【解决方案1】:

假设您的数据在 dat 中,但有一个额外的列:

dat <- structure(list(DATE = structure(list(sec = c(0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0), min = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L), hour = c(0L, 6L, 12L, 18L, 0L, 6L, 
12L, 18L, 0L, 6L, 12L, 18L, 0L, 6L), mday = c(18L, 18L, 18L, 
18L, 19L, 19L, 19L, 19L, 20L, 20L, 20L, 20L, 21L, 21L), mon = c(5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L), year = c(111L, 
111L, 111L, 111L, 111L, 111L, 111L, 111L, 111L, 111L, 111L, 111L, 
111L, 111L), wday = c(6L, 6L, 6L, 6L, 0L, 0L, 0L, 0L, 1L, 1L, 
1L, 1L, 2L, 2L), yday = c(168L, 168L, 168L, 168L, 169L, 169L, 
169L, 169L, 170L, 170L, 170L, 170L, 171L, 171L), isdst = c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L)), .Names = c("sec", 
"min", "hour", "mday", "mon", "year", "wday", "yday", "isdst"
), class = c("POSIXlt", "POSIXt")), GROUP = structure(c(2L, 1L, 
2L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 1L), .Label = c("L", 
"R"), class = "factor"), GROUP2 = structure(c(1L, 2L, 2L, 1L, 
2L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L), .Label = c("L", "R"), class = "factor")), .Names = c("DATE", 
"GROUP", "GROUP2"), row.names = c(NA, -14L), class = "data.frame")

那么我认为这可以满足您的需求。首先计算元素 == 到其中一个类

counts <- apply(dat[, 2:3], 1, function(x) sum(x == "R"))

然后计算另一个计数并绑定到一个矩阵:

countmat <- t(cbind(L = (NCOL(dat) - 1) - counts, R = counts))

然后我们使用barplot()进行绘图

op <- par(mar = c(9,4,4,2) + 0.1, las = 2)
mids <- barplot(countmat, ylim = c(0,2.5),
                legend.text = c("L","R"),
                args.legend = list(x = "top", bty = "n"))
axis(side = 1, at = mids, labels = as.character(dat$DATE))
par(op)

产生:

有关参数的解释,请参见各个函数的帮助页面。

编辑:如果您只想为单个列执行此操作,那么这不是最有趣的图表,但是...

count2 <- with(dat, GROUP == "R")
countmat2 <- t(cbind(R = count2, L = !count2))

op <- par(mar = c(9,4,4,2) + 0.1, las = 2)
mids <- barplot(countmat2, ylim = c(0, 1.5),
                legend.text = c("R","L"),
                args.legend = list(x = "top", bty = "n"))
axis(side = 1, at = mids, labels = as.character(dat$DATE))
par(op)

给出这个数字:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-28
    • 2012-11-01
    • 2015-02-16
    • 1970-01-01
    • 2018-01-11
    • 2020-08-30
    • 1970-01-01
    • 2018-10-21
    相关资源
    最近更新 更多