I've been battling to order and plot a simple dataframe as a bar chart in ggplot2.
I want to plot the data as it appears, so that the values ('count' variable) for the corresponding categories (e.g. 'humans', 'male') are plotted from high to low.
I've followed other threads on this site asking similar questions, but can't get this to work!
## Dataset (mesh2) #Category Count #Humans 62 #Male 40 #Female 38 #Adult 37 #Middle Aged 30 #Liver/anatomy & histology 29 #Organ Size 29 #Adolescent 28 #Child 21 #Liver/radiography* 20 #Liver Transplantation* 20 #Tomography, X-Ray Computed 20 #Body Weight 18 #Child, Preschool 18 #Living Donors* 18 #Infant 16 #Aged 14 #Body Surface Area 14 #Regression Analysis 11 #Hepatectomy 10 ## read in data (mesh2) as object (mesh2) mesh2 <- read.csv("mesh2.csv", header = T) ## order data by count of mesh variable mesh2$cat2 <- order(mesh2$Category, mesh2$Count, decreasing=TRUE) ## Barplot created in ggplot2 library(ggplot2) mesh2p <- ggplot(mesh2, aes(x=cat2, y=Count)) + geom_bar (stat="identity") + scale_x_continuous(breaks=c(1:20), labels=c("Humans", "Male", "Female", "Adult", "MAged", "Liver anat & hist", "Organ Size", "Adolescent", "Child", "Liver radiog", "Liver Transplnt", "Tomog X-Ray Computed", "Body Weight", "Child Preschool", "Living Donors", "Infant", "Aged", "BSA", "Regression Analysis", "Hepatectomy"))+ theme (axis.text.x=element_text(angle=45, hjust=1))
If you want the bar graph to go in descending order, put a negative sign on the target vector and rename the object. Then draw the bar graph of the new object.
To sort a data frame in R, use the order( ) function. By default, sorting is ASCENDING. Prepend the sorting variable by a minus sign to indicate DESCENDING order.
If it is stat = "identity" , we are asking R to use the y-value we provide for the dependent variable. If we specify stat = "count" or leave geom_bar() blank, R will count the number of observations based on the x-variable groupings.
You want reorder()
. Here is an example with dummy data
set.seed(42) df <- data.frame(Category = sample(LETTERS), Count = rpois(26, 6)) require("ggplot2") p1 <- ggplot(df, aes(x = Category, y = Count)) + geom_bar(stat = "identity") p2 <- ggplot(df, aes(x = reorder(Category, -Count), y = Count)) + geom_bar(stat = "identity") require("gridExtra") grid.arrange(arrangeGrob(p1, p2))
Giving:
Use reorder(Category, Count)
to have Category
ordered from low-high.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With