2013-07-31 68 views
0

我使用条形图来显示停车收费分配在一个城市。我的数据框包括停车计时器ID,该计费器的年收入以及该计费器根据总收入计入的十分位数(1-10)。所以我的命令看起来像这样:试图标签条形图ggplot2,得到“错误:美学必须是长度一,或相同的长度...”

> 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:总数。

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

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

其工作原理,但我宁愿没有我想有标签,每次做一个新的数据帧。

+0

你需要告诉ggplot要将标签...怎么会知道你希望他们在每栏的顶部...看看[这里](HTTP:/ /stackoverflow.com/questions/6455088/how-to-put-labels-over-geom-bar-in-r-with-ggplot2) – Justin

+1

为新图层创建新数据框或创建全新变量是您签名的内容当你开始使用ggplot时。它没有被称为“图形语法”。如果你的尝试在语法上不正确,那么...... – joran

回答

0

添加总计到停车数据框:

parking$totals <- aggrev$revenue 

这将使令牌“总计”在正确的环境又找到。 (你可能还需要指定一个x和y向量。)

0

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

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

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)) 

enter image description here

相关问题