2016-11-10 8 views
1

Это штрих-диаграмма набора данных iris. Буквы над каждой линией обозначают существенные различия, полученные из теста kruskal-wallis. enter image description here Хотя они не слишком грязны в этом примере, мои реальные данные имеют значительно большие бары ошибок и различия в длинах штрихов. Таким образом, буквы повсюду, и их становится трудно читать. Мне интересно, возможно ли, чтобы буквы были расположены под каждым баром, чуть выше оси х. Таким образом, все они будут выровнены и будут легко читаться. Что ты считаешь?Значительные буквы под geom_bars

Код:

library(reshape2) 
library(ggplot2) 
library(agricolae) 
library(Rmisc) 

file<-iris 

melt <- melt(file, id=c("Species")) 

x1 <- summarySE(melt, measurevar = "value", groupvars = c("variable", "Species"), na.rm=TRUE) 

d=list() 
tmp=list() 

for(i in 1:4){ 
    if(var(file[,i]) > 0){ 
    tmp<-c(tmp,colnames(file[i])) 
    krusk <- kruskal(file[,i],file[,5],group=TRUE) 
    krusk$groups<-krusk$groups[order(krusk$groups[,'trt']),] 
    d[[i]]<-as.data.frame(krusk$groups)  
    } 
} 

big_data=do.call(rbind,d) 

plot<- ggplot(x1, aes(x = variable, y = value, fill = Species)) + 
    coord_flip()+ 
    geom_bar(stat = "identity", position =position_dodge(),colour="black",width=.7,size=.5)+ 
    geom_errorbar(aes(ymin=value-se, ymax=value+se), width=.1,size=.5,position=position_dodge(.7))+ 
    theme(
    axis.text = element_text(angle=0, vjust=1,size=8,face="bold"),legend.title=element_blank(),legend.position="bottom", 
    legend.text=element_text(face="italic"))+ 
    labs(title=NULL,x=NULL,y=NULL)+ 
    geom_text(aes(label=big_data$M,colour=Species),position=position_dodge(width=1),vjust=.8,hjust=-1,size=3) 

plot 
+0

Ваш код генерирует ошибку. К какому пакету принадлежит функция summaySE? Но одна проблема может заключаться в параметрах ширины. Параметры ширины в 'position-dodge()' различаются. Сделайте их одинаковыми. Если вы хотите, чтобы бары опирались друг на друга, сделайте параметр ширины в 'geom_bar()' таким же, как параметр ширины в 'position_dodge()'. Взгляните на [как-на-позицию-текст-на-бар-как-я-хочу] (http://stackoverflow.com/questions/40211451/geom-text-how-to-position-the- text-on-bar-as-i-want/40229784 # 40229784) –

+0

Спасибо, что указали это. Отредактированное сообщение, чтобы включить 'library (Rmisc)'. Я не хочу, чтобы бары были испорчены, так как это еще больше усложняло чтение. Спасибо за ссылку. Я могу перемещать их в конце баров, но я хотел бы, чтобы они были в начале баров. :) –

ответ

2

Что-то вроде этого:
Для geom_text установите y = 0 и hjust = 1.5.
Обратите внимание, что ширина уклонения для баров, баров ошибок и текста одинакова. Также обратите внимание на то, что ширина баров равна ширине уклонения, и, таким образом, бары примыкают друг к другу внутри каждой переменной.

plot <- ggplot(x1, aes(x = variable, y = value, fill = Species)) + 
    coord_flip() + 
    geom_bar(stat = "identity", position = position_dodge(width = .7), 
    colour = "black", width = .7, size = .5) + 
    geom_errorbar(aes(ymin = value-se, ymax = value+se), position=position_dodge(width = .7), 
    width = .1, size = .5) + 
    geom_text(aes(y = 0, label = big_data$M, colour = Species), 
    position=position_dodge(width = .7), hjust = 1.5, size = 3) + 
    theme(
    axis.text = element_text(angle=0, vjust=1,size=8,face="bold"),legend.title=element_blank(),legend.position="bottom", 
    legend.text=element_text(face="italic")) + 
    labs(title=NULL,x=NULL,y=NULL) 

plot 
+0

Omg Я так впечатлен! Спасибо, это так аккуратно. Вы должны включить изображение, чтобы каждый мог видеть, как он выглядит красиво! :) –