Нанесите строки матрицы на полосную диаграмму в виде растрового графика в R

#r #matrix #plot #raster #stripchart

#r #матрица #нанесите #растровый #полосная диаграмма

Вопрос:

Я долгое время боролся с этим. Я хотел бы создать растровый график в R, чтобы показать времена потенциалов действия (AP) нейрона относительно стимула. Что-то вроде этого: Каждая строка представляет серию точек доступа в заданном временном окне, выровненных по стимулу, повторяющемуся несколько раз (иногда с разной частотой)

У меня есть матрица, содержащая времена AP относительно каждого стимула (положительные и отрицательные значения времени).

Я подумал, что stripchart это хорошее решение, поскольку оно отображает одномерные данные. Как я могу отобразить каждую строку моей матрицы (или выбранные элементы строк), чтобы она выглядела как прикрепленное изображение. Я знаю, что stripchart функция также может отображать списки, содержащие числовые векторы разной длины, поэтому сначала я выбрал подходящие элементы из каждой строки, создал список и построил график. Я также попробовал as.list применить функцию к матрице, чтобы мне не пришлось создавать новый список, когда я хотел изменить условие, которое выбирает элементы матрицы. Это казалось нормальным, но у меня есть две проблемы с этим. Во-первых, почему-то я не был уверен, что он правильно построил график (строка за строкой, выбранные элементы), а также я не уверен, что это самый эффективный способ сделать это. Во-вторых, поскольку у меня было много строк, они не оставались отдельными на полосовой диаграмме, как на первом изображении. Я пытался настроить параметры stripchart функции, но ничего не помогло. Мой график выглядит следующим образом:введите описание изображения здесь

В заключение я ищу эффективный способ построения строк матрицы (выбранных элементов) в виде одномерных векторов, разделяющих строки на изображении.

Спасибо за вашу помощь!

Ответ №1:

Похоже, что stripchart работает с фреймами данных по столбцам…. Короче говоря, транспонируйте свою матрицу, преобразуйте ее в формат df

 x1 <- matrix(rnorm(50),nrow = 5)
x1<-cbind(x1, rep(4,5))
df<-as.data.frame(t(x1))
df
stripchart(df, pch = "|", las=1)
  

Я думаю, причина, по которой stripchart не обрабатывает матрицы должным образом, заключается в том, что в R матрица — это просто вектор внутри…

Надеюсь, это поможет.

Мой график полосовой диаграммы

Matplot

Кажется, я не могу заставить его повернуть график на 90 градусов, хотя это использует матрицы как есть без принуждения

 matplot(x1, pch="_", col="black")
  

Matplot

Версия 2 matplot:

При некоторой фотосъемке это может сработать…

 par(mar=c(5.1,2.1,4.1,4.1))
matplot(x1, pch="_", col="black", las=3, yaxt="n", ylab="")
axis(4)
mtext("x1",side = 4,line = 2)
  

введите описание изображения здесь

Комментарии:

1. Да, я думал об этом, но я пытался избежать этого решения намеренно по нескольким причинам. Самое главное, потому что я работаю с действительно огромными матрицами и объединяю несколько из них в одну, что создает довольно большой df. Я обнаружил, что это очень медленно, но я собираюсь попытаться уменьшить размер и попробовать еще раз. Спасибо.

2. Я тоже нашел это. Может быть хорошим, но все же не совсем то, что мне нужно. Я думаю, мне придется поработать над моей структурой данных.

3. @ViktorPlattner, о каком размере набора данных мы здесь говорим? Я регулярно создаю 5 миллионов фреймов данных строк без особых проблем. Если ваш набор данных действительно настолько велик, то вам, возможно, было бы лучше рассмотреть какой-нибудь другой график сводной статистики, а не выводить каждое наблюдение.

4. Ну, это определенно не так уж и много, так что, вероятно, это сработает