Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
831 views
in Technique[技术] by (71.8m points)

r - How to reorder a grouped bar plot by one category?

First of all, thanks to take a look to this ! :-)

I have a grouped bar plot which I would like to order in decreasing order of each participants RmoinsU value !

But somehow I fail! Do you have an idea ?

The Plot: Grouped bar plot

My Code and example data:

library(tidyverse)
library(ggplot2)

CassieDfBuild.fn <- function(RmoinsU,RplusU) {
  RmoinsU.df <- data.frame(participants<-c(1:length(RmoinsU)),value<-RmoinsU,type<-"RmoinsU")
  colnames(RmoinsU.df) <- c("participants","value","type")
  
  RplusU.df <- data.frame(participants<-c(1:length(RplusU)),value<-RplusU,type<-"RplusU")
  colnames(RplusU.df) <- c("participants","value","type")
  
  graph.df <- bind_rows(RmoinsU.df,RplusU.df)
  
  graph.df$participants <- factor(graph.df$participants)
 
  return(graph.df)
}

#Barchart Adherence rate Local
RmoinsU.Local<-c(1, 0.868421052631579,  0.90625,    0.741935483870968,  0.625,  0.25,   0.823529411764706,  1,  0.75,   0.761904761904762,  0.838709677419355,  1,  0.451612903225806,  0.941176470588235,  0.9,    0.523809523809524,  0.564102564102564,  0.681818181818182,  0.421052631578947,  0.62,   0.636363636363636,  0.5,    0.944444444444444,  0.727272727272727,  0,  0.847826086956522,  0.3,    0,  0.35,   0.565217391304348,  0.479166666666667,  0,  0.866666666666667,  0.964285714285714,  0.333333333333333,  0.714285714285714,  0.764705882352941,  0.769230769230769,  0.9375, 1,  0.916666666666667,  0.625,  0.576923076923077,  0.78125,    0.8,    0.666666666666667,  0.666666666666667,  0.684210526315789,  0,  0.5,    0.846153846153846,  0.75,   0.166666666666667,  0.8,    0.695652173913043,  0.785714285714286,  0.545454545454545,  0.488372093023256,  0.705882352941177,  0.611111111111111,  0.6875, 0.346153846153846,  0)
RplusU.Local<-c(0.88,   0.789473684210526,  0.571428571428571,  0.829268292682927,  0.82258064516129,   0.891304347826087,  0.595744680851064,  0.626865671641791,  0.666666666666667,  1,  0.948717948717949,  0.813559322033898,  0.7,    0.970588235294118,  0.896551724137931,  0.414634146341463,  1,  0.946428571428571,  0.68,   0.914285714285714,  0.681818181818182,  1,  0.830188679245283,  0.696969696969697,  1,  0.928571428571429,  0.722222222222222,  1,  0.901960784313726,  0.117647058823529,  1,  0.986301369863014,  0.933333333333333,  0.477272727272727,  0.905660377358491,  1,  0.909090909090909,  0.82258064516129,   0.869565217391304,  1,  1,  0.972972972972973,  1,  0.941176470588235,  1,  0,  0.574074074074074,  0.868421052631579,  0.666666666666667,  1,  0.782608695652174,  0.876923076923077,  0.644444444444444,  0.836065573770492,  0.863636363636364,  0.85,   0.5,    0.95,   1,  1,  0.705882352941177,  0.772727272727273,  1)

test.list <- length(RmoinsU.Local)

graph.adherence.Local.df <- CassieDfBuild.fn(RmoinsU.Local,RplusU.Local)

# Et voici le plot
p <- ggplot(graph.adherence.Local.df, aes(fill=type, x=reorder(participants, -value), y=value)) +
  geom_bar(stat="identity", color="black", position=position_dodge())+
  theme_minimal() +
  scale_fill_grey() +
  theme(panel.border = element_blank(), panel.grid.major = element_blank(),
        panel.grid.minor = element_blank()) +
  geom_hline(yintercept = 0) +
  geom_hline(yintercept = 1) +
  ggtitle("Graph de Cassie 1") +
  labs(x = "Participants") +
  labs(y = "Adherence") +
  theme(legend.title=element_blank()) +
  theme(plot.title = element_text(face="bold")) +
  theme(plot.title = element_text(hjust = 0.5)) +
  theme(legend.position = c(0.075, 0.2)) +
  theme(
    # manipulation de la légende
    legend.background = element_rect(fill = "white"),
    legend.key = element_rect(color = "black"),
  )
print(p)
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I am not sure if this is what you are looking for: You could relevel your factor participants with this code:

helper <- levels(graph.adherence.Local.df$participants)
helper1 <- as.character(sort(as.numeric(helper), decreasing = TRUE))
levels(graph.adherence.Local.df$participants) <- helper1

and change in ggplot:

x=reorder(participants, -value)

to

x=factor(participants)

enter image description here


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...