#r #loops #plot
#r #петли #сюжет #циклы #график
Вопрос:
Я использую набор данных Soy из пакета mlbench в R.
Я хочу показать частотное распределение, создав простые столбчатые диаграммы для каждой переменной (все категориальные). Графики должны выглядеть примерно так:
https://www.statmethods.net/graphs/images/barplot1.jpg
Заранее большое спасибо, M
Ответ №1:
Если вы хотите отобразить все переменные одну за другой, вы можете использовать цикл для имен столбцов вашего набора данных. Используйте ggplot()
и функцию get()
, чтобы сосредоточиться на имени переменной.
library(mlbench)
data(Soybean)
library(ggplot2)
library(dplyr)
for(j in 1:ncol(Soybean)){
var <- colnames(Soybean)[j]
Soybean %>%
ggplot(aes(x = get(var)))
geom_histogram(stat = 'count')
labs(x = 'var')
}
Комментарии:
1. Спасибо за ваш вклад. Это сработало хорошо и было именно тем, что я искал. Еще раз, большое спасибо. Однако время вычисления было выше, чем у метода из комментария выше.
Ответ №2:
В качестве альтернативы вы также можете попробовать {purrr}
применить {ggplot2}
процесс к каждому столбцу данных. Я использовал aes_string()
здесь, чтобы имена столбцов можно было передавать в виде строк в ggplot
эстетику.
Редактировать: Использование gridExtra::marrangeGrob() для создания расположения всех фигур размером 6 х 6.
library(mlbench)
library(purrr)
library(ggplot2)
library(gridExtra)
data("Soybean")
marrangeGrob(
map(
names(Soybean),
~ ggplot(Soybean, aes_string(.x))
geom_bar()
),
ncol = 6,
nrow = 6,
top = "Soybean Distribution"
)
Комментарии:
1. спасибо за ваш вклад, это именно то, что я искал. Однако я думал о создании пространства графика 6 x 6, чтобы я мог просматривать их все одновременно. Есть ли способ включить это в ваш код? Заранее большое спасибо,
2. Я отредактировал ответ таким образом, чтобы вы получили график 6 x 6. Я использовал gridExtra::marrangeGrob(). Время вычисления увеличивается, но я надеюсь, что это нормально.
Ответ №3:
Используя базу R, вы можете получить желаемый результат с:
my.barplot.function = function(x){
heights = table(x)
barplot(heights, names.arg = levels(x))
}
apply(Soybean, 2, my.barplot.function)
Вы получите графики, подобные приведенному ниже, для всех переменных:
Комментарии:
1. спасибо за ваш вклад. Это сработало очень хорошо. Отличный вклад, я очень ценю вашу помощь.
2. @MLU : Рад слышать, что у вас это хорошо сработало. Даже если это не лучший ответ, пожалуйста, подумайте о том, чтобы дать ему оценку, если вы нашли код и результат полезными для решения вашей проблемы и для будущего программирования 🙂