我的数据很少,我希望得到条形图。我设法绘制了数据图表。但是,我有两个问题。
1)我想根据X轴按顺序绘制条形,而不是根据值。 x轴的范围如下:< 40,100-500,500-1000,.....
40-100这样的值大于500-1000,最后绘制。我希望这些条形基于X轴的值。
2)如何控制每个条上标签值的位置。
以下是dput
的数据:
structure(list(range = structure(c(1L, 6L, 2L, 7L, 3L, 4L, 5L
), .Label = c("<40", "100-500", "1000-1468", "1469-1479", "1480-1500",
"40-100", "500-1000"), class = "factor"), values = c(100L, 10000L,
1000L, 505L, 2000L, 50L, 5000L)), .Names = c("range", "values"
), class = "data.frame", row.names = c(NA, -7L))
这是我的代码:
DF$X<-NULL
colnames(DF)<-c("Size","occurances")
gr2<- ggplot(DF, aes(x =Size , y= occurances))+
geom_bar(aes(fill=Size),stat="identity") +
geom_text(aes(label = paste(sprintf("%0.0f", occurances)),
y = occurances+0.25, x=Size),
size = 5, face="bold",position = position_dodge(width=0.9)) +
theme(axis.text.x=element_text(size=12,colour="gray19",face="bold"),
axis.text.y=element_text(colour="gray19",size=12,face="bold"))+
theme(axis.ticks.x = element_line(size = 2))+
scale_x_discrete(breaks=c("<40","40-100","100-500","500-1000","1000-1468","1469- 1479","1480-1500"),expand=c(0,0) )+
scale_y_continuous(expand=c(0.008,0.5))+
guides(fill=FALSE)
print(gr2)
任何建议!!
答案 0 :(得分:0)
尝试:
DF$Size <- reorder(DF$Size, seq_along(DF$Size))
gr2<- ggplot(DF, aes(x =Size , y= occurances))+
geom_bar(aes(fill=Size),stat="identity") +
geom_text(aes(label = paste(sprintf("%0.0f", occurances)),
y = occurances+0.25, x=Size),
size = 5, face="bold", vjust=-.8) +
theme(axis.text.x=element_text(size=12,colour="gray19",face="bold"),
axis.text.y=element_text(colour="gray19",size=12,face="bold"))+
theme(axis.ticks.x = element_line(size = 2))+
scale_y_continuous(expand=c(0.1,0))+
guides(fill=FALSE)
print(gr2)
关键是要重新排序您的因子级别,以便它们实际上处于递增顺序(这里我利用了您的DF
已按此顺序排序的事实)。然后,您可以使用vjust
中的geom_text
来正确对齐。注意我也使用y标度与expand
混淆。此外,摆脱你的scale_x_discrete
电话,因为我认为你试图用它来改变订单,但如果你的因素水平正确,那就没有必要了。
顺便说一下,你是如何产生水桶的?您应该考虑使用cut
,因为这应该按照正确的顺序设置您的级别。