#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")
Версия 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. Ну, это определенно не так уж и много, так что, вероятно, это сработает