我正在尝试创建一个条形图,显示工会和非工会工人的平均小时工资,按照大学毕业或不是大学毕业分组的单身或结婚分组。虽然我设法构建了一个具有两个因子分组的可通过的条形图,但我无法弄清楚如何使用三个因子分组来实现这一点。我看到的例子中有三个因素只关注频率计数,因此我不确定如何将所有因子中另一个变量的均值纳入图中。我想要创建的东西看起来像这样(在Stata中创建): Average Hourly Wage by Union Status, Marital Status, and College Graduation 我的代码如下所示:
levelbar = tapply(wage, list(as.factor(union), as.factor(married),
as.factor(collgrad)), mean)
par(mfrow = c(1, 2))
barplot(levelbar, beside = TRUE)
barplot(t(levelbar), beside = TRUE)
然而,当我运行它时,我收到错误:
Error in barplot.default(levelbar, beside = TRUE) :
'height' must be a vector or a matrix
对此有任何帮助将不胜感激。我确定ggplot在这里可能有用,但我没有很多使用该软件包的经验。
答案 0 :(得分:0)
以下是使用ggplot
和内置数据集泰坦尼克号的可重现示例。
请注意,我们先计算均值,然后使用stat = identity
确保我们将其纳入图中。
# Format the Titanic dataframe
Titanic_df <- Titanic %>% as_tibble()
# Make Class, Sex, Age, and Survived factors
for (col in c("Class", "Sex", "Age", "Survived")) {
Titanic_df[[col]] <- factor(Titanic_df[[col]])
}
# Get by group means
means <- Titanic_df %>%
group_by(Class, Sex, Survived) %>%
summarise(
mean_n = mean(n)
)
# Plot: facets are the Classes, bar colors are the two Sexes, and the groupings in each facet are Survived vs. Not Survived
ggplot(data = means) +
geom_bar(aes(x = Survived, y = mean_n, fill = Sex), stat = "identity", position = "dodge") +
facet_wrap(~ Class)