我有一个ggplot2问题,我运行下面的代码显示堆叠的条形图,没有正确地在每个条形图上方添加值:
p=ggplot(data=essnn)
p+geom_bar(binwidth=0.5,stat="identity")+ #
aes(x=reorder(classname,-amount,sum), y=amount, label=amount, fill = sort(year))+
theme()
我想在每个班级中添加按年份分组的总金额,这是我的代码:
+geom_text(aes(x=classes,y=total,label=total), data=essnnta, fill=NULL, size=3)
但会显示错误消息:
Error in fill = year, can not find object "year"
这是我的问题:为什么在绘制堆栈条形图时可以找到对象“年份”而不添加每个类中按年份分组的总金额,但是当我添加按年份分组的金额时,错误出现
> str(essnn)
'data.frame': 48619 obs. of 15 variables:
$ id : int 2006051337 2006051337 2006051337 2006051337 2006051337 2006051337 2004070648 2006031360 2006031360 2004070062 ...
$ gender : Factor w/ 3 levels "","F","M": 3 3 3 3 3 3 3 3 3 3 ...
$ age : num 30 30 30 30 30 30 38 43 43 37 ...
$ class : Factor w/ 92 levels "100ab","100aa",..: 18 18 18 18 18 18 18 18 18 18 ...
$ classname: Factor w/ 1136 levels "cad"," Office2010",..: 111 111 111 111 111 111 116 107 107 107 ...
$ grade : num 7 5 6 8 3 4 1 4 3 2 ...
$ year : Factor w/ 6 levels "98","99","100",..: 3 3 3 3 2 2 4 5 5 3 ...
$ ses : num 212 210 211 213 207 208 217 221 220 210 ...
$ date : int 1010421 1001115 1010214 1010701 1000411 1000627 1020424 1030304 1021121 1001108 ...
$ money : num 5800 5800 5800 5800 5200 5200 3000 0 5500 5500 ...
$ discount : num 1160 1160 1160 1160 1040 1040 600 0 275 550 ...
$ amount : num 4640 4640 4640 4640 4160 ...
$ idc : Factor w/ 7 levels "在校生","校友",..: 2 2 2 2 2 2 2 7 7 7 ...
$ mdy : Date, format: "2012-04-21" "2011-11-15" "2012-02-14" "2012-07-01" ...
$ day : num 1123 1281 1190 1052 1499 ...
> str(essnnta)
'data.frame': 10 obs. of 2 variables:
$ classes: Factor w/ 10 levels "JD","JF",..: 1 7 8 4 6 10 3 5 2 9
$ total : num 55603526 43708950 43555010 35649129 33214372 ...
答案 0 :(得分:0)
您的问题可能是两个数据框中的x轴不同。所以ggplot不知道哪个值与哪个堆栈对应。我不确定这一点,因为我不明白你在原始条形图中定义x轴的方式。我还发现在ggplot函数或geom_bar之外定义aes有点奇怪。但这可能只是让我习惯了不同的语法。 总而言之,我发现很难帮助你,因为你没有提供任何可重复的例子。
答案 1 :(得分:0)
这是一小部分数据,以及一些有用的情节。如果您使用数据(或其子集)补充问题,请查看是否有效。您可能还希望将标签放在每个条形图的顶部。
essnn <- data.frame(year = c(98,99,100,101,102),
classname = c("a", "b", "c", "d", "e"),
amount = c(1e6, 2e6,3e6,4e6,5e6))
essnnta <- data.frame(total = c(10, 20, 30, 40, 50))
ggplot(data=essnn, aes(x=reorder(classname,-amount, sum), y=amount, fill = year)) +
geom_bar(binwidth=0.5, stat="identity", position = "stack") +
geom_text(aes(x=essnn$classname, y=essnnta$total, label=essnnta$total), size=3) # not "classes"