Я пытаюсь построить несколько «ggplot» на одной странице, используя цикл for. Цикл for используется, потому что количество графиков не определено «динамически». Ось x графиков будет изменяться в каждой итерации. Я прочитал так много статей о создании пустого списка, затем добавил каждый график в определенный индекс списка, а затем использовал функцию «множественный график», чтобы отобразить все графики списка на одной странице. Однако это не работает! Проблема в том, что программа в конечном итоге печатает только последнюю информацию о графике, сохраненную в последнем индексе списка с разными метками! код и рисунок ниже указывают на идею. `
Howmany <- readline(prompt = "Specify the number of the independent variables: ")
Howmany <- as.numeric(Howmany)
plot_lst <- vector("list", length = Howmany) #' an empty list
for ( i in 1:Howmany){
plot_lst[[i]] <- ggplot(data=data, aes(x=data[, c(i)], y=data$gender)) +
geom_point(aes(size = 5)) +
scale_color_discrete(name = "dependent_variable" + labs(
title = (paste("Logistic Regression Fitting Model",i)),
x = names(data)[i],
y = "gender")
}
multiplot(plotlist = plot_lst, cols = 1)
Я очень ценю любое предложение.
Я также попробовал то, что было предложено в этой ссылке: показать несколько графиков из ggplot на одной странице в r
Тем не менее, все еще сталкиваюсь с той же проблемой.
Хотя я не думаю, что это вызывает вашу проблему, вы можете удалить это: i = i + 1
. Вам не нужно вручную увеличивать индекс i
, так как вы используете конструкцию for()
. Вам также нужно как-то распечатать графики. Я предполагаю, что вы передаете свой список plot_lst
функции multiplot
?
Без лучшего понимания ваших данных или вашего кода трудно дать много советов. Мое первое предложение состояло бы в том, чтобы посмотреть на преобразование ваших данных в длинный формат, а затем использовать аспекты ggplot. Если вы предоставите немного образцов данных, мы сможем помочь вам в дальнейшем.
Честно говоря, я сомневаюсь, что есть причина использовать циклы for в R без какой-либо экстраординарной причины... В этом случае: почему бы не использовать огранки? cookbook-r.com/Graphs/Facets_(ggplot2)
да прохожу. Я отредактировал вопрос и добавил код. что печать делает с моей проблемой? это помогает? @StewartMacdonald
мои данные касаются логистической регрессии между категориальной зависимой переменной и количеством независимых переменных, взятых у пользователя. часть регрессии выполнена. Тем не менее, я хотел бы построить все корреляции между зависимой переменной и независимыми переменными на одной странице (каждая занимает один график), а затем построить модель прогнозирования на одном графике. аспект работает, если у меня есть две переменные оси X, но у меня может быть больше. @СтюартМакдональд
Поскольку ggplot aes()
использует ленивую оценку, вам необходимо принудительно выполнять оценку на каждой итерации цикла (иначе все графики будут одинаковыми в последней позиции i
).
Один из способов сделать это — заключить правую часть присваивания в local()
и использовать i <- i
:
labs(x = ...)
показалось неправильным, поэтому я переписал его так:
x = names(data)[i]
, пожалуйста, проверьте, работает ли это для вас.
plot_lst <- vector("list", length = Howmany) #' an empty list
for (i in 1:Howmany) {
plot_lst[[i]] <- local({
i <- i
ggplot(data=data, aes(x=data[, c(i)], y=data$gender)) +
geom_point(aes(size = 5)) +
scale_color_discrete(name = "dependent_variable") +
labs(
title = (paste("Logistic Regression Fitting Model", i)),
x = names(data)[i],
y = "gender")
})
}
Ниже приведен один пример использования набора данных радужной оболочки. Если мы напечатаем plot_lst
, мы увидим три разных графика.
Я предполагаю, что функция multiplot
из пакета разброса, который не работает с последней версией R, поэтому я не могу воспроизвести, работает ли он правильно.
Howmany <- readline(prompt = "Specify the number of the independent variables: ")
Howmany <- as.numeric(Howmany)
plot_lst <- vector("list", length = Howmany) #' an empty list
for ( i in 1:Howmany){
plot_lst[[i]] <- local({
i <- i
ggplot(data = iris,
aes(x = iris[, c(i)],
y = iris$Species)) +
geom_point(aes(size = 5)) +
scale_color_discrete(name = "dependent_variable") +
labs(
title = paste("Logistic Regression Fitting Model", i),
x = names(data)[i],
y = "species"
)
})
}
plot_lst
Спасибо за ваш ответ. Тем не менее, я попробовал и все равно получаю тот же результат (та же проблема) @TimTeaFan
Не могли бы вы предоставить некоторые примеры данных, которые позволяют нам воспроизвести вашу проблему.
для выполнения логистической регрессии пользователь может выбрать один столбец в качестве зависимой переменной. в представленном случае «пол» и выбрать номера и имена независимых переменных. в представленном случае (math_score, read_score и обед) из выбранного фрейма данных. Затем я создал новый фрейм данных только с выбранными столбцами, где зависимая переменная будет первым столбцом, а остальные — независимыми переменными. Затем glm( data[, c(1)] ~. , data = d). Затем мне нужно построить подогнанную модель и корреляцию между зависимыми и независимыми переменными на одной странице или на одном графике. @TimTeaFan
@Deema: без ваших данных (используйте dput(data)
или слишком большое подмножество этих данных) трудно воспроизвести вашу проблему. Пожалуйста, прочитайте о том, как создать минимальный воспроизводимый пример. Я обновил свой ответ простым примером из набора данных радужной оболочки. Просто используйте 3 как Howmany
. Когда мы рисуем plot_lst
, мы видим три разных графика, но только при использовании local({i <- i; .... })
.
Я думаю, вам нужно
print()
сюжетный объект. Например,p <- ggplot(data = data, aes(....)); print(p)
внутри циклаfor
. Она может ничего не производить, но при вязании ваши сюжеты проявятся.