2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение30.11.2021, 16:35 


09/05/16
138
Alm99 в сообщении #1541115 писал(а):
поскольку в каждом случае, размерность разная, как вывести эти 54 графика на одном


Есть такой приём: один раз определить наиболее широкий диапазон значений и создать график:
plot(0, 0, xlim = c(xmin, xmax), ylim = c(ymin, ymax))

После чего добавлять к этому графику точки и/или линии при помощи points() или lines() (или matplot(..., add = TRUE)).

Либо воспользоваться графической системой lattice или ggplot2, которые говорят на языке data.frame'ов с небольшим количеством столбцов (например, столбец x, столбец y, столбец "категория"), но это отдельная история.

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение30.11.2021, 16:49 


17/03/20
183
aitap
А добавлять в цикле? Потому что он то мне только последний отображает:

Код:
plot(0, 0, xlim = c(1, 70), ylim = c(0, 0.048))
fot (i in 1:54)
lines(steps <-c(1:length(dfL1_F[[i]])), dfL1_F[[i]],
     type= "o",pch=16, lty=1, xlab = 'Step finals', ylab = '')

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение30.11.2021, 17:03 


09/05/16
138
Забыл сказать: plot(0, 0, xlim = ..., ylim = ..., type = 'n'), чтобы точка в 0,0 не получалась.

Попробуйте пройти свой код по шагам в отладчике или запустить элементы цикла вручную для первых двух итераций. Должно работать, если исправить опечатку в ключевом слове for. Убедитесь, что dfL1_F[[i]] содержат то, что Вы ожидаете там найти. Убедитесь, что диапазон значений (в частности, по $y$) задан правильно.

Не имея Ваших данных и кода, который у Вас запускается (а не падает с синтаксической ошибкой), я всё равно не могу узнать, что именно идёт не так.

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение30.11.2021, 17:46 


17/03/20
183
aitap
про for я здесь опечатался, а так да, надо смотреть, те ли данные получены или нет. А каким образом можно для 54 графиков задать цветовую палитру, не прибегая к ggplot2, lattice?

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение30.11.2021, 18:09 


09/05/16
138
Alm99 в сообщении #1541132 писал(а):
А каким образом можно для 54 графиков задать цветовую палитру

lines() принимает аргумент col=. Сгенерировать 54 достаточно разных цвета, скорее всего, не получится, но можно получить цветовую гамму функцией rainbow() или hcl.colors() или сгенерировать цвета вручную при помощи чего-то вроде hcl(seq(0, 360*53/54, len = 54), l = 50).

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение30.11.2021, 20:45 


17/03/20
183
aitap

И еще такой вопрос: если мне нужны только определенные индексы, для того чтобы печатать на графике данные только из определенных файлов, как мне задать эти индексы:

Код:
assemble <- seq(2,3,10,11,14,16,17,26,27,28,30,31,33,34,35,38,43,45,49)
par(mfrow=c(5,1))
par(new=TRUE)
par(las = 1)

plot(0, 0, xlim = c(15, 130), ylim = c(0, 0.05),type = 'n')
for (i in assemble){
lines(steps <-c(1:length(dfL_F[[assemble]])), dfL_F[[assemble]],
     type= "o",pch=16,lwd=0.5, lty=3, xlab = 'Step finals', ylab = '',cex = 0.6,
col = "springgreen4")
abline(h=c(0.000450), lwd=1.5, lty=1, col="red")
mtext("MAX F", col = "black", adj=-0.1, padj=+0.1, cex=0.8)
grid(nx = NULL, ny = NULL,lty = 2, col = "gray", lwd = 1)
}

plot(0, 0, xlim = c(15, 130), ylim = c(0, 0.05),type = 'n')
for (i in assemble){
lines(steps <-c(1:length(dfL_RMF[[assemble]])), dfL_RMF[[assemble]],
     type= "o",pch=16,lwd=0.5, lty=3, xlab = 'Step finals', ylab = '',cex = 0.6,
col = "springgreen4")
abline(h=c(0.000450), lwd=1.5, lty=1, col="red")
mtext("MAX F", col = "black", adj=-0.1, padj=+0.1, cex=0.8)
grid(nx = NULL, ny = NULL,lty = 2, col = "gray", lwd = 1)
}

plot(0, 0, xlim = c(15, 130), ylim = c(0, 0.05),type = 'n')
for (i in assemble){
lines(steps <-c(1:length(dfL_D[[assemble]])), dfL_D[[assemble]],
     type= "o",pch=16,lwd=0.5, lty=3, xlab = 'Step finals', ylab = '',cex = 0.6,
col = "springgreen4")
abline(h=c(0.000450), lwd=1.5, lty=1, col="red")
mtext("MAX F", col = "black", adj=-0.1, padj=+0.1, cex=0.8)
grid(nx = NULL, ny = NULL,lty = 2, col = "gray", lwd = 1)
}

plot(0, 0, xlim = c(15, 130), ylim = c(0, 0.05),type = 'n')
for (i in assemble){
lines(steps <-c(1:length(dfL_RMD[[assemble]])), dfL_RMD[[assemble]],
     type= "o",pch=16,lwd=0.5, lty=3, xlab = 'Step finals', ylab = '',cex = 0.6,
col = "springgreen4")
abline(h=c(0.000450), lwd=1.5, lty=1, col="red")
mtext("MAX F", col = "black", adj=-0.1, padj=+0.1, cex=0.8)
grid(nx = NULL, ny = NULL,lty = 2, col = "gray", lwd = 1)
}

plot(0, 0, xlim = c(15, 130), ylim = c(0, 28),type = 'n')
for (i in assemble){
lines(steps <-c(1:length(dfQ[[assemble]])), dfQ[[assemble]],
     type= "o",pch=16,lwd=0.5, lty=3, xlab = 'Step finals', ylab = '',cex = 0.6,
col = "springgreen4")
abline(h=c(0.000450), lwd=1.5, lty=1, col="red")
mtext("MAX F", col = "black", adj=-0.1, padj=+0.1, cex=0.8)
grid(nx = NULL, ny = NULL,lty = 2, col = "gray", lwd = 1)
}


Данный вариант не работает:

Код:
Ошибка в dfL_F[[assemble]] :
  на уровне 2 рекурсивная индексация не удалась

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение30.11.2021, 21:08 


09/05/16
138
Alm99 в сообщении #1541149 писал(а):
не работает

А почему он не работает? Потому что ошибка возникает при попытке выполнить dfL_F[[assemble]]. Почему возникает ошибка? Либо dfL_F не подходит к assemble, либо assemble не подходит к dfL_F. Что находится в переменной dfL_F? Что находится в переменной assemble? А что должно там находиться?

Я не знаю, как этому научить, но обычно такого рода проблему помогает поделить на части, после чего каждую часть внимательно осмотреть. Если программа "должна" работать, но на деле не работает, какое-то из сделанных программистом предположений неверно. Программисту виднее, что он(а) предполагает; надо сесть и проверить каждое. Я не знаю, что находится в обеих переменных и что на самом деле имелось в виду.

Подсказки:

Добавлено: Используйте traceback(), чтобы увидеть стек вызовов на момент возникновения ошибки (вместе с номерами строк!). options(error = recover) запустит browser() на любом из уровней стека вызовов и позволит интерактивно посмотреть на все значения переменных на момент ошибки. (options(error = NULL) вернёт всё как было.) Не стесняйтесь запускать ?функция для функций, которыми пользуетесь.

Оператор [[ применяется для того, чтобы вытащить из списка ровно один элемент. Если требуется получить "срез" списка, содержащий несколько элементов, нужно использовать оператор [. Возвращаемое значение тоже будет списком.

Alm99 в сообщении #1541149 писал(а):
assemble <- seq(2,3,10,11,14,16,17,26,27,28,30,31,33,34,35,38,43,45,49)

Этот код возвращает другую ошибку.
Alm99 в сообщении #1541149 писал(а):
for (i in assemble)
lines(steps <-c(1:length(dfL_F[[assemble]])), dfL_F[[assemble]],
type= "o",pch=16,lwd=0.5, lty=3, xlab = 'Step finals', ylab = '',cex = 0.6,
col = "springgreen4")

По какой переменной идёт цикл? Какая переменная в цикле пробегает значения? Какая из них должна использоваться в теле цикла?

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение30.11.2021, 21:30 


17/03/20
183
aitap
В переменной хранятся значения из файлов, которые извлекаются с помощью данной функции:

Код:
# функция подготовки и чтения данных из файлов

my_fl <- list.files(pattern = ".*.out")
my_fl_s <- (str_sort(my_fl, numeric = TRUE))
df_out <- list()
for (i in seq_along(my_fl)) {
    df_out[[i]] <- readLines(my_fl_s[i])
}


dfL_F <- list()
for (j in seq_along(my_fl_s))
dfL_F[[j]] <- sapply( get.tables(df_out[[j]]),
function(x) subset(x, row.names == 'Maximum' & Item == 'Force')$Value)


Если переменная i будет идти просто от 1 до 54, то все будет нормально и построиь 54 кривые, а как сделать так, чтобы он строил только кривые, где индексом является каждое число из
Код:
2,3,10,11,14,16,17,26,27,28,30,31,33,34,35,38,43,45,49

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение30.11.2021, 21:43 


09/05/16
138
У Вас был цикл
Alm99 в сообщении #1541120 писал(а):
for (i in 1:54)
, внутри которого Вы обращались к dfL1_F[[i]].

К чему нужно обращаться внутри цикла
Alm99 в сообщении #1541149 писал(а):
for (i in assemble)
?

Вы можете справляться с такого рода проблемами самостоятельно, если подойдёте к ним более систематично. Например, можно было написать 2 цикла:
for (i in 1:54) print(i)
for (i in assemble) print(assemble)
и сравнить, что они печатают. Или ответить на мои вопросы.

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение01.12.2021, 00:09 


17/03/20
183
aitap
Действительно, посмотрел, что выводят, но в любом случае не понимаю, он графики строит, но только 10, вместо 19, не понимаю, почему.Так то я выводом на печать посмотрел, да, если передавать 19 номеров, и обращаться как написано ниже, то для i файла соответствующего параметра он выводит численные значения, просто почему не все линии отображаются на графике - количество добавляемых линий на график может же быть большим...

Код:
par(las = 1)
cl <- rainbow(19)
plot(0, 0, xlim = c(10, 130), ylim = c(0, 0.01),xlab = 'Число шагов',
, ylab = '',type = 'n')
for (i in 1:19){
lines(steps <-c(1:length(dfL_F[[assemble[i]]])), dfL_F[[assemble[i]]],
     type= "o",pch=16,lwd=0.4, lty=3, xlab = 'Число шагов', ylab = '',cex = 0.6,
col = cl[i])
abline(h=c(0.000450), lwd=1.5, lty=1, col="black")
mtext("MAX F A.U.", col = "black", adj=-0.1, padj=+0.1, cex=0.8)
grid(nx = NULL, ny = NULL,lty = 2, col = "gray", lwd = 1)
}

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение01.12.2021, 11:27 


09/05/16
138
Alm99 в сообщении #1541174 писал(а):
он графики строит, но только 10, вместо 19, не понимаю, почему.

Вы уже пробовали пройти цикл вручную или в отладчике?

Попробуйте временно внести следующие изменения в код:

  1. перед циклом добавить вызов par(mfrow = c(4, 5))
  2. внести plot(0, 0, ...) внутрь цикла, и добавить к нему аргумент main = paste(i, assemble[i])

Выполните код. 19 графиков будут нарисованы отдельно друг от друга и пронумерованы. Какие из них ничего не содержат? Что находится в соответствующих им dfL_F[[assemble[i]]]?

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение01.12.2021, 12:05 


17/03/20
183
aitap
Да, прошелся я по циклу, и визуализировал отдельно каждый график... А потом снова вместе. Сейчас он вывел все требуемые графики. Скорее всего, может в рабочем пространстве были лишние данные, сейчас в переменной dfL_F[[assemble[i]]] записаны правильные значения. Так что теперь, все строится как надо! Безмерно благодарен Вам! Скажите пожалуйста, а Вы по R какую литературу брали, ну или можете посоветовать?

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение01.12.2021, 13:14 


09/05/16
138
"Наглядная статистика. Используем R!" А. Шипунова, возможно, лучшая книга по R на русском (из известных мне). Joseph Adler - "R in a nutshell" и Richard Cotton - "Learning R" приблизительно эквивалентны и найдутся в библиотеке Genesis. Patrick Burns - The R Inferno рассказывает о том, что обычно идёт не так в программах на R. Из Winston Chang - R Graphics Cookbook и Paul Teetor - R Cookbook можно стащить готовые идеи для своего кода, что изредка бывает полезно. Книги самих авторов R (например, Peter Dalgaard - Introductory Statistics with R) больше по статистике, чем по языку R.

Книги Hadley Wickham рассказывают о продвигаемом RStudio, PBC диалекте R под названием tidyverse, популярном в некоторых кругах. Идиомы tidyverse и "стандартного R" редко похожи друг на друга. Использовать этот диалект или нет - личный выбор сродни "за какую футбольную команду болеть", столь же болезненно обсуждаемый на некоторых форумах.

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение01.12.2021, 13:57 


17/03/20
183
aitap

Хорошо, понял Вас, спасибо!

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 59 ]  На страницу Пред.  1, 2, 3, 4

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group