更改堆叠条形图中的组的顺序和R中的图例?
问题描述:
我知道这类问题已经被问到了,但我已经尝试将它应用于我的数据集几个小时,但没有成功。更改堆叠条形图中的组的顺序和R中的图例?
这里是我的数据框
> df
prot X nr
1 unmodified same 68
2 1 Ac same 14
3 2 Ac same 7
4 3 Ac same 4
5 4 Ac same 3
6 5 Ac same 2
7 6 Ac same 1
8 7 Ac same 2
我试图调整组的顺序的两种方式,但在两种情况下,传说是正好相反的顺序。我怎样才能将情节中的群体的顺序与传说中的群体的顺序相匹配? WAY1:
y <- read.csv("df.csv",sep=",") #sep=";"
df <- data.frame(y)
df$prot <- factor(df$prot, levels = rev(df$prot)) #order groups
p<-ggplot(df, aes(x=X, y=nr, fill=prot)) +
geom_bar(stat="identity", position=position_stack(), width=0.2, colour="gray", aes(fill = prot))+ # stacked, bar-width, outline-colour = colour
theme(panel.background = element_rect(fill = "ivory" , colour="ivory"))+
coord_flip()+
theme(legend.position="bottom") +
guides(fill = guide_legend(nrow = 1)) +
geom_text(aes(label=nr), color="black",vjust = -3, position = position_stack()) # add labels (%) non-overlapping
p
给我这样的结果:
way2:
y <- read.csv("df.csv",sep=",") #sep=";"
df <- data.frame(y)
df$prot <- factor(df$prot, levels = c("7 Ac", "6 Ac", "5 Ac", "4 Ac", "3 Ac", "2 Ac", "1 Ac","unmodified")) #order groups
df <- ddply(df, .(X),
transform, pos = cumsum(nr) - (0.5 * nr)) #adjust the position of the data labels:create new variable at the centre of each bar
p<-ggplot(data=df, aes(x=X, y=nr, fill=prot)) +
geom_bar(stat="identity", position=position_stack(), width=0.2, colour="gray")+ # stacked, bar-width, outline-colour = colour
theme(panel.background = element_rect(fill = "ivory" , colour="ivory"))+ #backgroundcolor
coord_flip()+
theme(legend.position="bottom") +
guides(fill = guide_legend(nrow = 1)) +
geom_text(data=df, aes(x = X, y = pos, label = paste0(nr,"%")),
size=4)
p
p
给我这样的结果:
答
你只需要使用reverse
参数guide_legend
并设置它到TRUE
,如:
df<- data.frame(prot = c("unmodified", paste(1:7, "AC")), X = rep("same", 8),
nr = c(68,14,7,4,3,2,1,2))
library(ggplot2)
df$prot <- factor(df$prot, levels = rev(df$prot)) #order groups
p<-ggplot(df, aes(x=X, y=nr, fill=prot)) +
geom_bar(stat="identity", position=position_stack(), width=0.2, colour="gray", aes(fill = prot))+ # stacked, bar-width, outline-colour = colour
theme(panel.background = element_rect(fill = "ivory" , colour="ivory"))+
coord_flip()+
theme(legend.position="bottom") +
# to change ordering of legend, set reverse = TRUE
guides(fill = guide_legend(nrow = 1, reverse = TRUE)) +
geom_text(aes(label=nr), color="black",vjust = -3, position = position_stack()) # add labels (%) non-overlapping
p