Reputation: 33
My data looks like as shown below:
structure(list(content = c("Proteins", "Carbohydrates", "Lipids",
"Ash", "Moisture", "Proteins", "Carbohydrates", "Lipids", "Ash",
"Moisture", "Proteins", "Carbohydrates", "Lipids", "Ash", "Moisture",
"Proteins", "Carbohydrates", "Lipids", "Ash", "Moisture", "Proteins",
"Carbohydrates", "Lipids", "Ash", "Moisture", "Proteins", "Carbohydrates",
"Lipids", "Ash", "Moisture"), quantity = c(1.58, 4.22, 5.2, 6.5,
7, 1.95, 5.11, 5.6, 9.7, 7.2, 2.15, 5.05, 4.3, 9, 7.4, 2.71,
3.47, 5.2, 8, 8, 2.63, 4.77, 7, 7.6, 6.9, 3.01, 5.38, 6.6, 11,
5.9), city = c("Amravati", "Amravati", "Amravati", "Amravati",
"Amravati", "Amravati", "Amravati", "Amravati", "Amravati", "Amravati",
"Amravati", "Amravati", "Amravati", "Amravati", "Amravati", "Amravati",
"Amravati", "Amravati", "Amravati", "Amravati", "Amravati", "Amravati",
"Amravati", "Amravati", "Amravati", "Amravati", "Amravati", "Amravati",
"Amravati", "Amravati"), year = c(2009L, 2009L, 2009L, 2009L,
2009L, 2009L, 2009L, 2009L, 2009L, 2009L, 2010L, 2010L, 2010L,
2010L, 2010L, 2010L, 2010L, 2010L, 2010L, 2010L, 2011L, 2011L,
2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L), plant = c("Cassia simea",
"Cassia simea", "Cassia simea", "Cassia simea", "Cassia simea",
"Cassia simea", "Cassia simea", "Cassia simea", "Cassia simea",
"Cassia simea", "Cassia simea", "Cassia simea", "Cassia simea",
"Cassia simea", "Cassia simea", "Cassia simea", "Cassia simea",
"Cassia simea", "Cassia simea", "Cassia simea", "Cassia simea",
"Cassia simea", "Cassia simea", "Cassia simea", "Cassia simea",
"Cassia simea", "Cassia simea", "Cassia simea", "Cassia simea",
"Cassia simea"), status = c("Non_Polluted", "Non_Polluted", "Non_Polluted",
"Non_Polluted", "Non_Polluted", "Polluted", "Polluted", "Polluted",
"Polluted", "Polluted", "Non_Polluted", "Non_Polluted", "Non_Polluted",
"Non_Polluted", "Non_Polluted", "Polluted", "Polluted", "Polluted",
"Polluted", "Polluted", "Non_Polluted", "Non_Polluted", "Non_Polluted",
"Non_Polluted", "Non_Polluted", "Polluted", "Polluted", "Polluted",
"Polluted", "Polluted")), .Names = c("content", "quantity", "city",
"year", "plant", "status"), class = "data.frame", row.names = c(NA,
-30L))
content quantity city year plant status
1 Proteins 1.58 Amravati 2009 Cassia simea Non_Polluted
2 Carbohydrates 4.22 Amravati 2009 Cassia simea Non_Polluted
3 Lipids 5.20 Amravati 2009 Cassia simea Non_Polluted
4 Ash 6.50 Amravati 2009 Cassia simea Non_Polluted
5 Moisture 7.00 Amravati 2009 Cassia simea Non_Polluted
6 Proteins 1.95 Amravati 2009 Cassia simea Polluted
7 Carbohydrates 5.11 Amravati 2009 Cassia simea Polluted
8 Lipids 5.60 Amravati 2009 Cassia simea Polluted
9 Ash 9.70 Amravati 2009 Cassia simea Polluted
10 Moisture 7.20 Amravati 2009 Cassia simea Polluted
11 Proteins 2.15 Amravati 2010 Cassia simea Non_Polluted
12 Carbohydrates 5.05 Amravati 2010 Cassia simea Non_Polluted
13 Lipids 4.30 Amravati 2010 Cassia simea Non_Polluted
14 Ash 9.00 Amravati 2010 Cassia simea Non_Polluted
15 Moisture 7.40 Amravati 2010 Cassia simea Non_Polluted
16 Proteins 2.71 Amravati 2010 Cassia simea Polluted
17 Carbohydrates 3.47 Amravati 2010 Cassia simea Polluted
18 Lipids 5.20 Amravati 2010 Cassia simea Polluted
19 Ash 8.00 Amravati 2010 Cassia simea Polluted
20 Moisture 8.00 Amravati 2010 Cassia simea Polluted
21 Proteins 2.63 Amravati 2011 Cassia simea Non_Polluted
22 Carbohydrates 4.77 Amravati 2011 Cassia simea Non_Polluted
23 Lipids 7.00 Amravati 2011 Cassia simea Non_Polluted
24 Ash 7.60 Amravati 2011 Cassia simea Non_Polluted
25 Moisture 6.90 Amravati 2011 Cassia simea Non_Polluted
26 Proteins 3.01 Amravati 2011 Cassia simea Polluted
27 Carbohydrates 5.38 Amravati 2011 Cassia simea Polluted
28 Lipids 6.60 Amravati 2011 Cassia simea Polluted
29 Ash 11.00 Amravati 2011 Cassia simea Polluted
30 Moisture 5.90 Amravati 2011 Cassia simea Polluted
I would like to make a barplot or scatterplot of content
vs quantity
from the data. My dataframe includes data for two cities (Amravati & Aurangabad), three years(2009, 2010, 2011), three plants (cassia simea, catheranthus roseus & datura metel) and two status (polluted and non-polluted).
I have tried to make a barplot using ggplot2
, but I could plot only with one facet_wrap. The R code I used is:
c <- ggplot(amr_nine, aes(content,quantity,fill=plant)) +
geom_bar() +
facet_wrap(~status) +
theme(axis.text.x = element_text(colour = "black"))+
theme(axis.text.y = element_text(colour = "black"))+
theme(panel.background = element_rect(fill='white', colour='black')) +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank()) +
scale_fill_manual(values=c("red", "blue", "green"))
My question is can we have multiple facets? so that I can include all my variables (i.e. cities, years, plants and status etc.). If not any other solution to plot all these variables in single plot is highly appreciated.
Thanks in advance...
Upvotes: 1
Views: 154
Reputation: 83215
When you want to put everything into one plot, it is better to use facet_grid
instead of facet_wrap
. For the following three examples, I added also some data for the other two plant species (for the other two plant species I used the same quantity-values, but changed the order a bit) and for the other city:
ggplot(amr_nine, aes(content,quantity,fill=plant)) +
geom_bar(stat="identity") +
theme(panel.background = element_rect(fill='white', colour='black'),
panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
axis.text.x=element_text(angle=90)) +
scale_fill_manual(values=c("red", "blue", "green")) +
facet_grid(city ~ status+year)
you get something like:
However, considering your data, I would advise to make a faceted plot for each city:
ggplot(amr_nine[amr_nine$city=="Amravati",], aes(content,quantity,fill=plant)) +
geom_bar(stat="identity") +
theme(panel.background = element_rect(fill='white', colour='black'),
panel.grid.major = element_blank(), panel.grid.minor = element_blank()) +
scale_fill_manual(values=c("red", "blue", "green")) +
facet_wrap(~status+year)
which gives:
You can repeat this for the other city (Aurangabad).
Besides stacking the bars on top of each other, you can also put them next to each other by adding position="dodge"
to the geom_bar
part of your code.
Another solution is to use line-graphs instead of a bar-plot:
ggplot(amr_nine, aes(as.factor(year), quantity, color=plant, group=plant)) +
geom_line() +
theme(panel.background = element_rect(fill='white', colour='black'),
panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
axis.text.x=element_text(angle=90)) +
scale_color_manual(values=c("red", "blue", "green")) +
facet_grid(content ~ city + status)
which gives:
Upvotes: 3
Reputation: 206197
You can have multiple factets, just bot all your conditioning variables in the same formula
facet_wrap(~status+plant+year+city)
Upvotes: 1