2016-08-17 2 views
-1

У меня есть матрица, в которой каждый элемент является чистой категориальной переменной «a», «b», «c», «d», .. Каждый столбец матрицы является хронологической записью, и теперь я хочу построить матрицу по строке, и я надеюсь, что ось y - это последовательность символов.R-графика: как построить последовательность символов (чистые категориальные временные ряды)

Вот исходная матрица:

Graph with legend

Вот что я хотел сюжет быть: Graph with legend

красный участок первой строки матрицы, а синий участок является пятый.

Я пробовал некоторые существующие пакеты, но в основном они требуют от меня перечислить категориальные переменные в числовые переменные. Поэтому я задаюсь вопросом, может ли кто-нибудь помочь мне в этом. Большое спасибо!

+1

если вы могли бы дать нам таблицу, мы можем использовать это было бы легче помочь. Например, 'dput (your_data)'. – Arault

+0

Привет, большое вам спасибо за ваш быстрый ответ, я не понял, как добавлять картинки или таблицы, интересно, могу ли я отправить таблицу на ваш адрес электронной почты? Большое спасибо! –

+0

Кстати, вы можете видеть картинки (по ссылке в моем посте)? –

ответ

1

Без ваших данных, я должен создать игрушечный, называемый mat, с 5 рядами и 10 колонками, заполненный letters[1:7].

set.seed(0); mat <- matrix(sample(letters[1:7], 5 * 10, TRUE), nrow = 5) 
#  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
#[1,] "g" "b" "a" "f" "f" "b" "c" "f" "c" "d" 
#[2,] "b" "g" "b" "d" "g" "c" "d" "e" "f" "f" 
#[3,] "c" "g" "b" "f" "b" "a" "e" "f" "e" "a" 
#[4,] "e" "e" "e" "g" "e" "c" "d" "a" "f" "d" 
#[5,] "g" "e" "c" "c" "a" "g" "b" "f" "d" "f" 

В основном вам нужно первое повторно представить вам матрицу символов mat с целыми числами.

## flatten your object into a vector first 
if (is.matrix(mat)) v <- as.character(mat) 
if (is.data.frame(mat)) v <- as.character(unlist(mat, use.names = FALSE)) 
lev <- sort(unique(v)) ## sorted unique labels 

## re-representation 
mat_int <- matrix(match(v, lev), nrow = nrow(mat)) 
## or: mat_int <- matrix(as.integer(factor(v, levels = lev)), nrow = nrow(mat)) 

#  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
#[1,] 7 2 1 6 6 2 3 6 3  4 
#[2,] 2 7 2 4 7 3 4 5 6  6 
#[3,] 3 7 2 6 2 1 5 6 5  1 
#[4,] 5 5 5 7 5 3 4 1 6  4 
#[5,] 7 5 3 3 1 7 2 6 4  6 

Тогда вы просто сюжет (весь или несколько рядов) этой матрицы с помощью matplot. Сначала отключите ось y, а затем добавьте ее позже, используя axis, чтобы вы могли настраивать метки осей.

## this plots the whole matrix 
matplot(t(mat_int), yaxt = "n", type = "l", xlab = "time", ylab = "category") 
axis(2, seq_along(lev), labels = lev) 

## this plots 1st and 5th rows 
matplot(t(mat_int)[, c(1,5)], yaxt = "n", type = "l", xlab = "time", ylab = "category") 
axis(2, seq_along(lev), labels = lev) 

Участок выбранных двух строк:

enter image description here

+1

Привет, Чжэюань, вы код работает просто отлично! Я хотел бы поблагодарить вас так много! –

Смежные вопросы