在ggplo2的酒吧中间放置文本

时间:2018-12-04 12:37:30

标签: r ggplot2

我正在尝试使用ggplot2在图形上标记不同的条形,我真的不知道哪里出错了。 代码是:

#import data
data.ave <- Sheet_2_ave_but_data

library(ggplot2)
library(RColorBrewer)
library(colorRamps)

#change the categories so that they're correct
data.ave$butterfly.species <- as.factor(data.ave$butterfly.species)
data.ave$plant.species <- as.factor(data.ave$plant.species)
data.ave$ave.num.of.visits <- as.numeric(data.ave$ave.num.of.visits)
summary(data.ave)

colourCount <- length(unique(mtcars$hp)) 
getPalette <- colorRampPalette(brewer.pal(9, "Set1"))
c <- ggplot(data.ave,aes(x = plant.species, y = ave.num.of.visits))
c <- c + geom_bar(stat = "identity", aes(fill = butterfly.species))
c <- c + scale_fill_manual( values = getPalette(colourCount))
c <- c + geom_text(aes(label = butterfly.species), 
                   position = position_stack(vjust = 0.5), size = 2)
c <- c + scale_y_continuous( breaks=seq(0,50,10))
c

标签位于另一个标签的顶部。

图形:

Graph of number of visits of different butterfly species, to different plants

可以在以下Google表格中找到数据: https://docs.google.com/spreadsheets/d/1ALmD-3CFGngcVYKxIImVdU0MIDLC0AYsq9MTIMJiMu0/edit?usp=sharing

1 个答案:

答案 0 :(得分:1)

第一个问题是ggplot正在对butterfly.species名称按字母顺序重新排序以放入图例中,而position_stack将保留数据帧中的顺序。要解决此问题,您可以在使用dplyr的安排功能(降序)构造图之前重新排列数据文件:

library(dplyr)
data.ave <- data.ave %>% arrange(desc(butterfly.species))

其次,正如Jordo82所指出的,您有很多重叠的文本,其中许多对应于0值。您可以将它们过滤掉(再次使用dplyr),它会给出一个稍微整齐的图表:

c <- data.ave %>% filter(ave.num.of.visits != 0) %>% ggplot(aes(x = plant.species, y = ave.num.of.visits))
c <- c + geom_bar(stat = "identity", aes(fill = butterfly.species))
c <- c + scale_fill_manual( values = getPalette(colourCount))
c <- c + geom_text(aes(label = butterfly.species), position = position_stack(vjust = 0.5), size = 2)
c <- c + scale_y_continuous( breaks=seq(0,50,10))
c

给出该图:

Butterfly plot without 0 value labels

要使某些标签彼此上下移动,可以使用ggrepel::geom_text_repel

data.ave<- dplyr::arrange(data.ave, desc(butterfly.species))
c <- data.ave %>% filter(ave.num.of.visits != 0) %>% ggplot(aes(x = plant.species, y = ave.num.of.visits))
c <- c + geom_bar(stat = "identity", aes(fill = butterfly.species))
c <- c + scale_fill_manual( values = getPalette(colourCount))
c <- c + geom_text_repel(aes(label = butterfly.species), position = position_stack(vjust = 0.5), direction="y", hjust=0.5, size = 2, box.padding=0.1)
c <- c + scale_y_continuous( breaks=seq(0,50,10))
c

结果:

Butterfly plot with geom_text_repel

您可以将min.segment.length添加到geom_text_repel,以添加或删除指向堆栈每个部分的行。希望有帮助!