使用来自频率 table 数据的 ggplot 对条形图进行分组

Grouped barplot using ggplot from frequency table data

我有一个频率 table,我想用它来做一个分组条形图。 感兴趣的主题(即打猎、钓鱼)将在 x 轴上,这些项目的值将在 y 轴上,它们将按年龄组分组。

这是数据:

structure(list(ï..Topic = c("Hunting", "Game Lands", "Boating", 
"Fishing", "Bird watching", "Wildlife Viewing (other than bird watching)", 
"Research Reports", "Law Enforcement", "NCWRC Rules and Regulations", 
"Human Wildlife Interactions", "Trapping", "Learning & Education Opportunities", 
"Agency Events", "Commissioner and Agency Staff Profiles & Awards", 
"Citizen Science Opportunities", "Volunteer Opportunities", "Private Land Management", 
"Shooting Sports", "Archery", "Wildlife Associated Recreation (Photography, hiking, botany)", 
"Conservation", "Species Information", "Diversity, Equality, and Inclusivity", 
"Youth Opportunities", "Philanthropy", "Wildlife Facilities (hatcheries, education centers, etc)", 
"Other"), X18.24 = c("12.35", " 9.88", " 4.94", "12.35", " 0.00", 
" 2.22", " 4.44", " 3.95", " 8.15", " 1.23", " 1.23", " 0.99", 
" 0.00", " 0.00", " 1.23", " 2.22", " 5.19", " 4.69", " 1.98", 
" 3.70", " 5.93", " 6.91", " 0.00", " 0.99", " 0.00", " 5.43", 
" 0.00"), X25.34 = c(" 6.96", "10.17", " 5.18", " 7.90", " 1.47", 
" 1.70", " 5.18", " 2.19", " 7.32", " 0.89", " 2.32", " 3.21", 
" 1.20", " 0.13", " 2.41", " 2.54", " 5.18", " 3.66", " 3.61", 
" 3.79", " 6.78", " 7.05", " 0.49", " 2.54", " 0.18", " 5.27", 
" 0.54"), X35.54 = c("8.92", "8.04", "5.86", "9.75", "1.44", 
"2.73", "2.99", "2.85", "7.52", "2.43", "2.54", "2.84", "1.13", 
"0.26", "1.38", "2.37", "4.22", "5.05", "3.71", "3.60", "5.14", 
"5.72", "0.33", "3.84", "0.27", "4.78", "0.32"), X55.64 = c("7.88", 
"7.29", "6.26", "9.82", "2.36", "3.18", "3.46", "3.64", "8.29", 
"2.97", "1.66", "3.02", "1.23", "0.18", "1.32", "3.00", "3.67", 
"5.46", "2.87", "3.31", "4.23", "6.86", "0.49", "1.94", "0.19", 
"5.10", "0.34"), X65.or.older = c(" 7.58", " 5.72", " 6.68", 
"10.32", " 3.23", " 4.59", " 3.43", " 3.50", " 8.78", " 3.85", 
" 1.13", " 2.92", " 1.05", " 0.35", " 1.16", " 2.40", " 2.61", 
" 4.80", " 1.75", " 4.29", " 4.48", " 7.14", " 0.45", " 1.67", 
" 0.25", " 5.50", " 0.41"), Prefer.not.to.share = c("5.74", "6.01", 
"6.28", "7.79", "1.09", "7.92", "2.60", "3.83", "6.69", "3.28", 
"3.96", "1.23", "1.64", "0.00", "0.00", "2.87", "6.01", "3.42", 
"2.05", "5.74", "4.51", "5.05", "0.00", "2.32", "0.68", "6.28", 
"2.19")), class = "data.frame", row.names = c(NA, -27L))

我尝试使用以下方法更改格式: library(reshape2) ages<- melt(age.table[,c("ï..Topic",'X18.24','X25.34','X35.54', 'X55.64', "X65.or.older")],id.vars = 1) * 我真的不需要这里的“不想回答”回复。

然后使用

绘图
library(ggplot2)
b<-ggplot(ages, aes(x=ï..Topic, y=value, fill = variable)) + geom_bar(stat="identity", position= "dodge")+ coord_flip() +scale_fill_brewer(palette = "Paired")

我得到了一个情节,但这些值与原始 table 中的值不一致。另外,我怎样才能防止它重新排列年龄组的顺序并使每个主题保持一致(即从最低年龄类别升序到最高年龄类别,而不是根据价值排序) 请参阅下面的 table

您的问题是您的数据 none 是数字 - "12.35" 带引号,是一个字符串。 12.35 不带引号是数字。您需要将数字列转换为数字 class。 age.table <- type.convert(age.table)应该做的不错。