Язык R: матрица или число c DataFrame в виде диаграммы рассеяния с X в качестве индексов столбца и соответствующими элементами строки, нанесенными на график относительно X - PullRequest
1 голос
/ 17 июня 2020

Допустим, у меня есть матрица 8 x 12:

> MyMatrix <- matrix(sample.int(5, 8*12, replace = TRUE), nrow = 8, ncol = 12)
> head(MyMatrix, n = 3)

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

Я хочу создать диаграмму рассеяния из элементов, хранящихся в MyMatrix. В частности, I wi sh, чтобы индексы столбцов (1–12) представляли значения абсцисс. Я хочу построить соответствующие элементы строки для каждого значения x . Другими словами (с учетом выходных данных R выше):

  • для x = 1, точки отображаются как y = 3, 5, 2,. ..,
  • для x = 2, точки отображаются как y = 5, 3, 4, ...,
  • для x = 3, точки отображаются как y = 3, 4, 3, ...,

и так далее.

Точно так же я хотел бы получить то же самое с фреймом данных, а не с матрицей. Каждый вектор-столбец отображается против уникального значения x. В этом случае я не говорю, что индексы столбцов должны представлять значения x, потому что я представляю себе возможность того, что можно было бы извлечь только подмножество столбцов из DF, потому что либо DF не состоит полностью из numeri c типов данных или просто случай, когда другие столбцы не имеют значения. В этом случае у вас могут быть дискретные категории (например, количество яблок, принадлежащих каждой «строке», количество апельсинов, принадлежащих каждой «строке») вдоль оси x, но не обязательно *. Они могут, например, представлять моменты времени (T1, T2, T3 и т. Д. c.). Порядок слева направо каждого столбца, взятого из DF, должен быть сохранен для целей построения графика. (Тем не менее, поменять местами или перемещать столбцы не так уж и сложно.)

* Не увязнув в том факте, что, в конечном итоге, представление (numeri c или иначе) не является аналоговым и в конечном итоге все равно будет дискретным в самом техническом смысле.

1 Ответ

0 голосов
/ 17 июня 2020

Вы можете использовать matplot для построения матрицы - см. Первый пример. Вы также можете определить, какой столбец не рисовать - см. Второй пример, в котором третий столбец был исключен для построения.

Более современным способом построения графика будет способ ggplot, в котором вы можете определить базовый график а затем добавляйте построчно, как показано в третьем примере.

Все это следует понимать как тизер. Я бы порекомендовал изучить некоторую литературу, например R Graphics Cookbook , для дальнейшего чтения.

MyMatrix <- matrix(sample.int(5, 8*12, replace = TRUE), nrow = 8, ncol = 12)
matplot(MyMatrix, type = 'l')


# if you want to leave the third column out
matplot(MyMatrix[,-3], type = 'l')

# with ggplot
library(ggplot2)

df <- data.frame(MyMatrix)
ggplot(df, aes(x=1:8))+
  geom_line(aes(y = X1))+
  geom_line(aes(y = X2), color='red') +
  geom_line(aes(y = X3), color='green')

...