0

我正在使用条形图来显示一个城市停车咪表的收入分布。我的数据框包括停车计时器 ID、该仪表的年收入以及该仪表根据其总收入属于哪个十分位 (1-10) 的列。所以我的命令如下所示:

> rev <- ggplot(parking, aes(x=decile, y=revenue))
> rev + geom_bar(stat="identity")

结果正是我想要的,但我想在图表中的每个条形顶部添加每个十分位数的总收入,我不知道如何。我试过这个:

> aggrev <- aggregate(revenue~decile, data=parking, sum)
> totals <- aggrev$revenue 
> rev + geom_bar(stat="identity") + geom_text(aes(label=totals))

但我收到此错误消息:错误:美学长度必须为一,或与 dataProblems:totals 的长度相同。

我检查了length(decile)和length(totals),它们的值分别是4600和10。所以我明白为什么会发生这种情况,但为什么我不能在 10 个条中添加任何 10 个字符?或者让图表自动显示条形总数​​,也许使用“身份”?我决定只运行这个:

ggplot(aggrev, aes(x=decile,y=revenue))+geom_bar()+geom_text(aes(label=revenue))

这有效,但我宁愿不必每次我想要标签时都制作一个新的数据框。

4

2 回答 2

0

将总数添加到停车数据框中:

parking$totals <- aggrev$revenue 

这将允许在正确的环境中找到令牌“总数”。(您可能还需要指定 x 和 y 向量。)

于 2013-07-31T22:15:43.233 回答
0

简单地说,你必须有一个看起来像你正在绘制的数据集,除了它会有一个变量“标签”。它将您的特定标签映射到 xy 坐标。添加 facet.grid 后,这会变得有点棘手。

如果您的数据框有 4 个因子的 80 行:您的标签数据框将有 80 行 xy 值以及您的因子变量 +“标签”。

 datain <- data.frame(type=rep(c('dog','cat'),40),height=c(1,5,3,2,5,2,6,8,10,3))
 datain <- datain[order(datain$type),]


 for_text <- data.frame(type=c('dog','cat'),height=c(10.5,9),label=c('dog','cat'))
 plot <- ggplot(datain,aes(x=type,y=height)) + 
    geom_boxplot(width=1) + 
    geom_text(data=for_text,aes(x=for_text$type,y=for_text$height,label=for_text$label))

在此处输入图像描述

于 2016-10-04T17:28:04.977 回答