гистограмма постоянной высоты для факторов во временных рядах - PullRequest
0 голосов
/ 22 июня 2011

Я новичок, чтобы попробовать R для создания графиков.Пожалуйста, помогите мне.У меня есть данные нескольких столбцов (временные ряды).В каждом столбце содержатся коэффициенты (см. Пример с одним столбцом ниже).Я хотел бы сделать столбчатую диаграмму постоянной высоты (скажем, 1 единицу) временного ряда и хотел бы представлять «A» и «B» разными цветами с DATE на оси x.Любой совет?Заранее благодарю!

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

1 Ответ

1 голос
/ 22 июня 2011

Предположим, ваши данные в 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)

, который выдает:

barplot of time series

См. Справочные страницы отдельных функций для объяснения аргументов.

Редактировать: Если вы просто хотите сделать это для отдельного столбца, то это не самый интересный график, но ...

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)

, который дает этот показатель:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...