我想避免在我的情节中添加因子变量。让我们考虑一下这个数据,
aa <- c(10, 12, 23)
bb <- c("a", "b", "a")
dataf <- data.frame(aa, bb)
library(ggplot2)
gplot <- ggplot(data=dataf, aes(x=bb, y=aa))+geom_bar(stat="identity")
gplot
此代码将生成以下条形图。
如您所见,有两个条形,y轴的第一个条形值为33(即10 + 23)。我想避免这种添加。这意味着,我想看到三个酒吧而不是两个。我怎么能这样做?
答案 0 :(得分:3)
您可以创建一个新列,用于标识每个组中的唯一值:
dataf$rn <- ave(dataf$aa, dataf$bb, FUN = seq_len)
然后绘图:
ggplot(data=dataf, aes(x=bb, y=aa, fill=factor(rn))) +
geom_bar(stat="identity", position="dodge")
给出:
但是,由于这不会给出关于条形宽度的好图,您可以按如下方式扩展数据框:
# expand the dataframe such that all the combinations of 'bb' and 'rn' are present
dfnew <- merge(expand.grid(bb=unique(dataf$bb), rn=unique(dataf$rn)), dataf, by = c('bb','rn'), all.x = TRUE)
# replace the NA's with zero's (not necessary)
dfnew[is.na(dfnew$aa),'aa'] <- 0
然后重新绘制:
ggplot(data=dfnew, aes(x=bb, y=aa, fill=factor(rn))) +
geom_bar(stat="identity", position="dodge")
给出:
在回应你的评论时,你可以这样做:
dataf$rn2 <- 1:nrow(dataf)
ggplot(data=dataf, aes(x=factor(rn2), y=aa)) +
geom_bar(stat="identity", position="dodge") +
scale_x_discrete('', labels = dataf$bb)
给出: