1

I have data set where I have two factors with four levels and each has some character value. A sample of my data set is below.
I need to produce a graph similar to one in this question.
I have tried running

ggplot(dff) + 
  geom_bar(df, aes(x = Seedling, y = Genotype, fill = Genotype),stat = "identity", position = "stack")+
  facet_grid(~Treatment)

Unfortunately this is a bit beyond my R skils at the moment and would appreciate some help.

Thanks in advance.

dff <- structure(list(Seedling = c("King Edward", "King Edward", "King Edward",  "King Edward", "King Edward", "King Edward", "King Edward", "King Edward",  "Setanta", "Setanta", "Setanta", "Sarpo Mira", "T5821/11", "T5821/11",  "T5821/11", "T5821/11", NA, "T5821/11", "T5821/11", NA, "T5821/11",  "Setanta", "Setanta", "T5821/11", "Setanta", "T5821/11", "T5821/11",  "Setanta", NA, "Setanta", "Setanta", "Setanta", "King Edward",  "King Edward", "King Edward", "King Edward", "T5821/11", "T5821/11",  "T5821/11", "T5821/11", "Setanta", "Setanta", "Setanta", "Setanta",  "T5821/11", "T5821/11", "T5821/11", "T5821/11", "Setanta", "Setanta",  "Setanta", "Setanta", "King Edward", "King Edward", "King Edward",  "King Edward", "Setanta", "Setanta", "Setanta", "Setanta", "King Edward",  "King Edward", "King Edward", "King Edward", "King Edward", "King Edward",  "King Edward", "King Edward", "Setanta", "Setanta", "Setanta",  "Setanta", "Setanta", "Setanta", "Setanta", "Setanta", "King Edward",  "King Edward", "King Edward", "King Edward", "King Edward", "King Edward",  "King Edward", "King Edward", "Setanta", "Setanta", "Setanta",  "Setanta", "Setanta", "Setanta", "Setanta", "Setanta", "King Edward",  "King Edward", "King Edward", "King Edward", "King Edward", "King Edward",  "King Edward", "King Edward", "T5821/11", "T5821/11", "T5821/11",  "T5821/11", "King Edward", "King Edward", "King Edward", "King Edward",  "King Edward", "King Edward", "King Edward", "King Edward", "Setanta",  "Setanta", "Setanta", "Setanta", "King Edward", "King Edward",  "King Edward", "King Edward", "Setanta", "Setanta", "Setanta",  "Setanta", "King Edward", "King Edward", "King Edward", "King Edward",  NA, NA, NA, NA, "Sarpo Mira", "Sarpo Mira", "Sarpo Mira", "Sarpo Mira",  "Sarpo Mira", "Sarpo Mira", "Sarpo Mira", "Sarpo Mira", "Sarpo Mira",  "Sarpo Mira", "Sarpo Mira", "Sarpo Mira", "Sarpo Mira", "Sarpo Mira",  "Sarpo Mira", "Sarpo Mira", "Sarpo Mira", "Sarpo Mira", "Sarpo Mira",  "Sarpo Mira", "Sarpo Mira", "Sarpo Mira", "Sarpo Mira", "Sarpo Mira",  "T5821/11", "T5821/11", "T5821/11", "T5821/11", "T5821/11", "T5821/11",  "T5821/11", "T5821/11", "T5821/11", "T5821/11", "T5821/11", "T5821/11",  "Sarpo Mira", "Sarpo Mira", "Sarpo Mira", "Sarpo Mira", "Sarpo Mira",  "Sarpo Mira", "Sarpo Mira", "Sarpo Mira", "King Edward", "King Edward",  "King Edward", "King Edward"), Treatment = c(1L, 1L, 1L, 1L,  1L, 1L, 1L, 1L, 2L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, NA, 1L, 1L, NA,  1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, NA, 3L, 3L, 3L, 1L, 1L, 1L, 1L,  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,  4L, 4L, 4L, 4L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L,  4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 3L, 3L, 3L, 3L,  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L,  4L, 4L, 4L, 4L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,  4L, 4L, 4L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, NA, NA, NA, NA,  4L, 4L, 4L, 4L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 4L, 4L, 4L, 4L,  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,  2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L ), Genotype = c("6 A1", NA, "8 A1", "8 A1", "8 A1", "8 A1", "8 A1",  "8 A1", "6 A1", "6 A1", "13 A2", "13 A2", "13 A2", NA, NA, "13 A2",  NA, "13 A2", "13 A2", "8 A1", "13 A2", "6 A1", "6 A1", "13 A2",  "13 A2", "8 A1", NA, "13 A2", "8 A1", "13 A2", "8 A1", "13 A2",  "8 A1", "13 A2", "13 A2", "13 A2", "8 A1", "13 A2", "13 A2",  "8 A1", "6 A1", "13 A2", "6 A1", "6 A1", "13 A2", "13 A2", NA,  "13 A2", "13 A2", "6 A1", "6 A1", "13 A2", NA, "8 A1", "8 A1",  "13 A2", "8 A1", "8 A1", "6 A1", "13 A2", "8 A1", "8 A1", "8 A1",  "8 A1", "6 A1", "8 A1", "8 A1", "8 A1", "13 A2", "13 A2", "13 A2",  "13 A2", "6 A1", "6 A1", "6 A1", "13 A2", "8 A1", "8 A1", "8 A1",  "8 A1", "6 A1", "6 A1", NA, "8 A1", "6 A1", "6 A1", "8 A1", "6 A1",  "8 A1", "8 A1", "8 A1", "13 A2", "13 A2", "8 A1", "13 A2", "13 A2",  "13 A2", "13 A2", "6 A1", "13 A2", "6 A1", "6 A1", "8 A1", "8 A1",  "8 A1", "8 A1", "8 A1", "6 A1", "8 A1", "8 A1", "6 A1", "8 A1",  "8 A1", "8 A1", "6 A1", "13 A2", "8 A1?", "8 A1", "8 A1", "8 A1?",  "13 A2", "6 A1", "13 A2", "13 A2", "8 A1", "8 A1", NA, "8 A1",  "13 A2", "13 A2", "13 A2", "13 A2", "13 A2", "13 A2", "13 A2",  "13 A2", "13 A2", NA, "13 A2", NA, "13 A2", "13 A2", "13 A2",  NA, "13 A2", "13 A2", "13 A2", "13 A2", "13 A2", NA, "13 A2",  "13 A2", "13 A2", NA, "13 A2", "13 A2", "13 A2", "6 A1", "6 A1",  NA, "13 A2", "13 A2", "13 A2", "13 A2", NA, "13 A2", "13 A2",  "13 A2", NA, NA, NA, NA, NA, NA, "13 A2", NA, NA, "13 A2", NA,  NA)), .Names = c("Seedling", "Treatment", "Genotype"), row.names = c(NA, 
-180L), class = c("tbl_df", "tbl", "data.frame"))
Marco Sandri
  • 23,289
  • 7
  • 54
  • 58
m_c
  • 496
  • 2
  • 19

1 Answers1

2

There's a couple problems here in making the plot you provided as an example

-The graph is using one variable and a grouping or fill variable
-You are looking to plot counts and not the actual names
-Might want to clean up NA's

dff <- dff[complete.cases(dff),] #cleanup all NA rows  

ggplot(dff, aes(Seedling, fill = Genotype))+  
geom_bar(stat = "count", position = "dodge")+  
facet_wrap(~Treatment, ncol = 2)

To make the graphs a little more legible, you could turn the x.axis text and maybe remove the duplicated genotypes

ggplot(dff, aes(Seedling, fill = Genotype))+
geom_bar(stat = "count", position = "dodge")+
facet_wrap(~Treatment, ncol = 2)+
theme(axis.text.x = element_text(angle = 60, hjust = 1))
Geochem B
  • 418
  • 3
  • 13
  • Thanks for the answer. Your code to clean up did not work so I used dff <- dff[complete.cases(dff),] . Any way to make bars stacked? – m_c Jul 20 '17 at 19:00
  • In `geom_bar` use `position = "stacked"` – Geochem B Jul 20 '17 at 19:02
  • There was also a [similar](https://stackoverflow.com/questions/45222767/how-to-create-a-geom-bar-of-two-tables-using-ggplot) question asked where the plot type is different but may also fit your needs. – Geochem B Jul 20 '17 at 19:05
  • It is actually `position = "stack"`. Thanks. Do I have to set coloring variable to get colours I want for the plot or...? This is my last question! :) – m_c Jul 20 '17 at 19:15
  • My bad on "stack", and I'm not sure about the cleaning up NA's. When i entered the data and look at `str(dff)` I'm getting Seedling is a character, Treatment is an integer, and Genotype is also a character. You may have a factor there that is creating problems. I agree though that `complete.cases` is better. Updating for reference – Geochem B Jul 20 '17 at 19:22
  • Cool, aaaand any suggestion on colours? :)And structure of my df is same as you described it. – m_c Jul 20 '17 at 19:24
  • Haha, I'm a little colorblind so I would avoid my suggestions but offer some [professional help](http://www.cookbook-r.com/Graphs/Colors_(ggplot2)/) – Geochem B Jul 20 '17 at 19:26