Я пытаюсь написать функцию для построения графиков в сетке.Я использую ggplot и фасетную сетку.Я не могу передать аргумент для сетки фасетов.Интересно, кто-нибудь может указать мне правильное направление?
Пример данных:
Year = as.factor(rep(c("01", "02"), each = 4, times = 1))
Group = as.factor(rep(c("G1", "G2"), each = 2, times = 2))
Gender = as.factor(rep(c("Male", "Female"), times = 4))
Percentage = as.integer(c("80","20","50","50","45","55","15","85"))
df1 = data.frame (Year, Group, Gender, Percentage)
Код для графика сетки без функции:
p = ggplot(data=df1, aes(x=Year, y=Percentage, fill = Gender)) + geom_bar(stat = "identity")
p = p + facet_grid(~ Group, scales = 'free')
p
Это создает сюжет, похожий на тот, который я хочу сделать.Однако, когда я помещаю это в функцию:
MyGridPlot <- function (df, x_axis, y_axis, bar_fill, fgrid){
p = ggplot(data=df1, aes(x=x_axis, y=y_axis, fill = bar_fill)) + geom_bar(stat = "identity")
p = p + facet_grid(~ fgrid, scales = 'free')
return(p)
}
И затем запускаю:
MyGridPlot(df1, df1Year, df1$Percentage, df1$Gender, df1$Group)
Это приводит к ошибке:
Error: At least one layer must contain all faceting variables: `fgrid`.
* Plot is missing `fgrid`
* Layer 1 is missing `fgrid
У меня естьпопытался использовать aes_string
, который работает для x, y и fill, но не для сетки.
MyGridPlot <- function (df, x_axis, y_axis, bar_fill, fgrid){
p = ggplot(data=df1, aes_string(x=x_axis, y=y_axis, fill = bar_fill)) + geom_bar(stat = "identity")
p = p + facet_grid(~ fgrid, scales = 'free')
return(p)
}
, а затем выполнить:
MyGridPlot(df1, Year, Percentage, Gender, Group)
Это приводит к той же ошибке.Если я удаляю сетку фасетов, код обеих функций работает хорошо, но без сетки: - (
Большое спасибо за помощь этому новичку.
Густаво