无法在ggplot2

时间:2015-06-05 04:29:03

标签: r ggplot2

我有一个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()

picture

我想在每个班级中添加按年份分组的总金额,这是我的代码:

+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 ...

2 个答案:

答案 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"

enter image description here