我正在尝试使用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
标签位于另一个标签的顶部。
图形:
可以在以下Google表格中找到数据: https://docs.google.com/spreadsheets/d/1ALmD-3CFGngcVYKxIImVdU0MIDLC0AYsq9MTIMJiMu0/edit?usp=sharing
答案 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
给出该图:
要使某些标签彼此上下移动,可以使用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
结果:
您可以将min.segment.length
添加到geom_text_repel
,以添加或删除指向堆栈每个部分的行。希望有帮助!