Group geom_violin by two features

Viewed 31

At the moment I have the following plot:

sens <- ggplot(Meow.Moment, aes(x = L, y = `Moment LLDF`, group = UG, fill = UG)) + geom_violin() + theme_classic() +
  labs(x = "Span Length (ft)", y = "Moment LLDF", 
           fill = element_blank()) + facet_wrap(vars(S), scales = "free_x") +
  annotate("segment", x=-Inf, xend=Inf, y=-Inf, yend=-Inf, size = 0.35)+
  annotate("segment", x=-Inf, xend=-Inf, y=-Inf, yend=Inf, size = 0.35) +
  annotate("segment", x=Inf, xend=Inf, y=-Inf, yend=Inf, size = 0.35) +
   theme(axis.text.y = element_text(size=8, colour="black"),
          axis.text.x = element_text(size=8, colour="black"),
          axis.title.x = element_text(size=10, colour="black",  vjust=-0.5),
          axis.title.y = element_text(size=10, colour="black", vjust=0.5, margin = margin(0,4,0,-6)),
          axis.line=element_blank(), plot.margin=unit(c(0,0.5,0,2), "mm"),
          axis.ticks = element_line(colour = "black", size = 0.2),
          strip.text.x = element_text(size = 8), 
         strip.background = element_rect(color = "black", size = 0.4)) + guides(fill=FALSE)

enter image description here

But I don't want the plot two have facets. I just want one singular plot where the fill is defined by S. So the desired output would be like:

enter image description here

Although I am able to get this done with geom_point (I got this from esquisse::esquisser())

enter image description here

I just get one singular violin per S when I try to unfacet the existing plot.

DATA:

dput(Meow.Moment)
structure(list(S = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Girder Spacing of 9 ft", 
"Girder Spacing of 12 ft", "Girder Spacing of 15 ft"), class = "factor"),
UG = structure(c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L), .Label = c("UG-84", "UG-92", "UG-100", 
"UG-108", "UG-116", "UG-124"), class = "factor"), Sample = c("CSI", 
"CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", 
"CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", 
"CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", 
"CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", 
"CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", 
"CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", 
"CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", 
"CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", 
"CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", 
"CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", 
"CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", 
"CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", 
"CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", 
"CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", 
"CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", 
"CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", 
"CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", 
"CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", 
"CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", 
"CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", 
"CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", "CSI", 
"CSI", "CSI", "CSI", "CSI", "CSI", "CSI"), Girder = c("Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5", 
"Girder 5", "Girder 5", "Girder 5", "Girder 5", "Girder 5"
), `Moment LLDF` = c(0.829658713617925, 0.802254249812911, 
0.818271760316323, 0.798926202232163, 0.829092206170858, 
0.789710362673591, 0.807066799702746, 0.801743962319106, 
0.771071110539227, 0.806510686351582, 0.787547772924069, 
0.765948409481265, 0.814481631581756, 0.789385548058162, 
0.79742059987377, 0.823294185024105, 0.822442048155208, 0.802027714592132, 
0.792691759774845, 0.783113530894846, 0.782637619291739, 
0.794684376428344, 0.814938654118887, 0.792059565852289, 
0.78475054090018, 0.792401520759085, 0.816494345290019, 0.78729786559531, 
0.773908826064692, 0.757404231913479, 0.805126738244052, 
0.787556044327052, 0.759625034503122, 0.785663504736756, 
0.808266360013464, 0.780442145314726, 0.767428121136581, 
0.751154966852657, 0.785276750149863, 0.753207294165337, 
0.798895282097261, 0.778281518390181, 0.780998228459373, 
0.810220249896759, 0.7914483509399, 0.796869402945514, 0.79536896084061, 
0.81732057741998, 0.775140378824485, 0.790055331797835, 0.759131337526724, 
0.805441532174879, 0.817626751464502, 0.787309590801557, 
0.795023463295533, 0.789739937472447, 0.785685423271192, 
0.754233545172118, 0.791018992130728, 0.769953091847507, 
0.784711947860645, 0.789815685917924, 0.812877556313658, 
0.812071803493204, 0.801077480777046, 0.782115845503981, 
0.936166958464838, 0.969601772876514, 0.981972011078133, 
0.95361090609495, 0.952212457564706, 0.954630809830582, 0.958551852231704, 
0.918078702004235, 0.958444706401157, 0.961922306439318, 
0.982878595220735, 0.945854074103618, 0.975857928182832, 
0.930566561107146, 0.952354359677116, 0.963733263264507, 
0.955444589902455, 0.97655038396045, 0.947214656751851, 0.948533835993996, 
0.912548415197095, 0.952586976160581, 0.957299874340395, 
0.945043692318454, 0.936198622349903, 0.933459754514722, 
0.912134831062641, 0.92681201572401, 0.956912145974936, 0.933656297720585, 
0.928069150026263, 0.929598839871277, 0.894383825158354, 
0.916399434869829, 0.925470182225384, 0.942297024466573, 
0.93021151569879, 0.950238695916041, 0.950713622320118, 0.908328653526128, 
0.918067551182414, 0.922550819358927, 0.889759075543031, 
0.949192241992033, 0.980045096503129, 0.963142100437858, 
0.969426523202303, 0.992450608192995, 0.99401525000583, 0.973136320891866, 
0.964814483694716, 0.965516013727242, 0.946426432127773, 
0.92811480337392, 0.955395345308237, 0.965275430394139, 0.961378465964699, 
0.984893055269537, 0.985943827916758, 0.942663484796184, 
0.972343883625275, 0.95684674702656, 0.957679705181029, 0.920769105536728, 
0.938701863236633, 0.61845934438617, 0.597977894598147, 0.615677512157292, 
0.594845826489815, 0.608301102607007, 0.593491607206214, 
0.593871375333026, 0.580726459027617, 0.594313093375663, 
0.597870056692868, 0.569233442538943, 0.579856824731606, 
0.596588481294792, 0.618338340420678, 0.592098169587876, 
0.60820726731498, 0.592453523060563, 0.614985431829363, 0.59324083507316, 
0.56804750675771, 0.597045002116048, 0.588213632202119, 0.584019160224941, 
0.59936917042855, 0.584104240706208, 0.606474110194516, 0.571887816707146, 
0.588725851797858, 0.585436295843731, 0.609751891753297, 
0.559978881133602, 0.585180562535037, 0.591969028185904, 
0.576691671945567, 0.580585998456362, 0.598849232301871, 
0.602383046477909, 0.576402829371173, 0.564493454692426, 
0.552718437594626, 0.596239929624496, 0.577769100422642, 
0.577785102917542, 0.640306628440231, 0.626192521590228, 
0.588175522316855, 0.576999078283373, 0.606469379273172, 
0.626209837436387, 0.626062564197095, 0.623681871475408, 
0.602232181879516, 0.602347430641963, 0.629926673975867, 
0.57930514393975, 0.614953470377665, 0.620475070085263, 0.606953387051025, 
0.614343648928633, 0.592558501451535, 0.593549203873702, 
0.592990443418476, 0.596999599469191, 0.568290581231915, 
0.617048528484048), L = c(240L, 240L, 240L, 240L, 240L, 240L, 
240L, 240L, 240L, 240L, 240L, 260L, 260L, 260L, 260L, 260L, 
260L, 260L, 260L, 260L, 260L, 260L, 280L, 280L, 280L, 280L, 
280L, 280L, 280L, 280L, 280L, 280L, 280L, 300L, 300L, 300L, 
300L, 300L, 300L, 300L, 300L, 300L, 300L, 300L, 200L, 200L, 
200L, 200L, 200L, 200L, 200L, 200L, 200L, 200L, 200L, 220L, 
220L, 220L, 220L, 220L, 220L, 220L, 220L, 220L, 220L, 220L, 
226L, 226L, 226L, 226L, 226L, 226L, 226L, 226L, 226L, 226L, 
226L, 243L, 243L, 243L, 243L, 243L, 243L, 243L, 243L, 243L, 
243L, 243L, 263L, 263L, 263L, 263L, 263L, 263L, 263L, 263L, 
263L, 263L, 263L, 285L, 285L, 285L, 285L, 285L, 285L, 285L, 
285L, 285L, 285L, 186L, 186L, 186L, 186L, 186L, 186L, 186L, 
186L, 186L, 186L, 186L, 206L, 206L, 206L, 206L, 206L, 206L, 
206L, 206L, 206L, 206L, 206L, 255L, 255L, 255L, 255L, 255L, 
255L, 255L, 255L, 255L, 255L, 255L, 276L, 276L, 276L, 276L, 
276L, 276L, 276L, 276L, 276L, 276L, 297L, 297L, 297L, 297L, 
297L, 297L, 297L, 297L, 297L, 297L, 297L, 317L, 317L, 317L, 
317L, 317L, 317L, 317L, 317L, 317L, 317L, 317L, 215L, 215L, 
215L, 215L, 215L, 215L, 215L, 215L, 215L, 215L, 215L, 237L, 
237L, 237L, 237L, 237L, 237L, 237L, 237L, 237L, 237L, 237L
)), row.names = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 
11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 
24L, 25L, 26L, 27L, 28L, 29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L, 
37L, 38L, 39L, 40L, 41L, 42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 
50L, 51L, 52L, 53L, 54L, 55L, 56L, 57L, 58L, 59L, 60L, 61L, 62L, 
63L, 64L, 65L, 66L, 67L, 68L, 69L, 70L, 71L, 72L, 73L, 74L, 75L, 
76L, 77L, 78L, 79L, 80L, 81L, 82L, 83L, 84L, 85L, 86L, 87L, 88L, 
89L, 90L, 91L, 92L, 93L, 94L, 95L, 96L, 97L, 98L, 99L, 100L, 
102L, 103L, 104L, 105L, 106L, 107L, 108L, 109L, 110L, 111L, 112L, 
113L, 114L, 115L, 116L, 117L, 118L, 119L, 120L, 121L, 122L, 123L, 
124L, 125L, 126L, 127L, 128L, 129L, 130L, 131L, 132L, 133L, 134L, 
135L, 136L, 137L, 138L, 139L, 140L, 141L, 142L, 143L, 144L, 145L, 
147L, 148L, 149L, 150L, 151L, 152L, 153L, 154L, 155L, 156L, 157L, 
158L, 159L, 160L, 161L, 162L, 163L, 164L, 165L, 166L, 167L, 168L, 
169L, 170L, 171L, 172L, 173L, 174L, 175L, 176L, 177L, 178L, 179L, 
180L, 181L, 182L, 183L, 184L, 185L, 186L, 187L, 188L, 189L, 190L, 
191L, 192L, 193L, 194L, 195L, 196L, 197L, 198L), class = "data.frame")
1 Answers

You can make a group based on both UG and S variables using a composite variable UGS:

Meow.Moment %>%
  mutate(UGS = paste(UG, S, sep = "_")) %>%
  ggplot(aes(x = L, y = `Moment LLDF`, group = UGS, fill = UG))  + geom_violin() + theme_classic() +
  labs(x = "Span Length (ft)", y = "Moment LLDF", 
       fill = element_blank()) +
  theme(axis.text.y = element_text(size=8, colour="black"),
        axis.text.x = element_text(size=8, colour="black"),
        axis.title.x = element_text(size=10, colour="black",  vjust=-0.5),
        axis.title.y = element_text(size=10, colour="black", vjust=0.5, margin = margin(0,4,0,-6)),
        axis.line=element_blank(), plot.margin=unit(c(0,0.5,0,2), "mm"),
        axis.ticks = element_line(colour = "black", size = 0.2),
        strip.text.x = element_text(size = 8), 
        strip.background = element_rect(color = "black", size = 0.4)) + guides()

enter image description here

Related