R: mosaicplot labels situated wrong

Viewed 35

So I made this mosaicgraph pitting participants who voted strategically (StrategischeWahl2021) in 2021 against their gender (Q2) using the following code, but as you can see, the labels for StrategischeWähler2021 are situated wrong and I am yet to find a solution for that. MosaicplotI made several other mosaicplots and they all worked perfectly, the labels were positioned just right, so now I am kinda lost. Any help would be greatly appreciated ;)

mosaic(data = Test,
       ~Q2 + StrategischeWahl2021,
       direction = c("v", "h"),
       shade = TRUE,
       labeling_args = list(set_varnames = c(StrategischeWahl2021 = "StrategischeWähler2021", Q2 = "Geschlecht"), 
                            set_labels = list(StrategischeWahl2021 = c("Nein", "Ja")), rep = FALSE),
       gp = shading_hcl, gp_args = list(interpolate = c(1, 1.8)))

this is my data:

Test <- Test %>% 
+   select (Q2, StrategischeWahl2021)
> dput (Test)
structure(list(Q2 = c("Weiblich", "Weiblich", "Männlich", "Weiblich", 
"Männlich", "Männlich", "Männlich", "Männlich", "Weiblich", "Männlich", 
"Männlich", "Weiblich", "Weiblich", "Weiblich", "Männlich", "Männlich", 
"Männlich", "Nichtbinäres / Drittes Geschlecht", "Weiblich", 
"Männlich", "Männlich", "Weiblich", "Männlich", "Weiblich", "Weiblich", 
"Weiblich", "Weiblich", "Männlich", "Männlich", "Männlich", "Weiblich", 
"Männlich", "Männlich", "Weiblich", "Männlich", "Weiblich", "Männlich", 
"Weiblich", "Männlich", "Männlich", "Männlich", "Weiblich", "Weiblich", 
"Weiblich", "Männlich", "Männlich", "Weiblich", "Männlich", "Weiblich", 
"Männlich", "Männlich", "Männlich", "Männlich", "Männlich", "Männlich", 
"Männlich", "Männlich", "Männlich", "Männlich", "Männlich", "Weiblich", 
"Weiblich", "Weiblich", "Männlich", "Nichtbinäres / Drittes Geschlecht", 
"Weiblich", "Weiblich", "Männlich", "Weiblich", "Weiblich", "Männlich", 
"Weiblich", "Weiblich", "Nichtbinäres / Drittes Geschlecht", 
"Männlich", "Weiblich", "Männlich", "Männlich", "Männlich", "Weiblich", 
"Männlich", "Männlich", "Männlich", "Männlich", "Weiblich", "Männlich", 
"Weiblich", "Weiblich", "Männlich", "Männlich", "Weiblich", "Weiblich", 
"Weiblich", "Weiblich", "Weiblich", "Männlich", "Männlich", "Weiblich", 
"Männlich", "Männlich", "Weiblich", "Männlich", "Männlich", "Weiblich", 
"Männlich", "Männlich", "Weiblich", "Männlich", "Männlich", "Männlich", 
"Weiblich", "Weiblich", "Weiblich", "Männlich", "Männlich", "Weiblich", 
"Männlich", "Weiblich", "Männlich", "Weiblich", "Nichtbinäres / Drittes Geschlecht", 
"Männlich", "Männlich", "Männlich", "Männlich", "Männlich", "Weiblich", 
"Weiblich", "Männlich", "Weiblich", "Männlich", "Weiblich", "Weiblich", 
"Weiblich", "Weiblich", "Männlich", "Weiblich", "Weiblich", "Weiblich", 
"Weiblich", "Weiblich", "Männlich", "Weiblich", "Männlich", "Weiblich", 
"Weiblich", "Männlich", "Männlich", "Weiblich", "Männlich", "Weiblich", 
"Männlich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Männlich", 
"Weiblich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Männlich", 
"Keine Angabe", "Weiblich", "Männlich", "Männlich", "Männlich", 
"Männlich", "Männlich", "Männlich", "Männlich", "Weiblich", "Männlich", 
"Männlich", "Weiblich", "Männlich", "Weiblich", "Weiblich", "Männlich", 
"Männlich", "Weiblich", "Männlich", "Männlich", "Weiblich", "Weiblich", 
"Männlich", "Männlich", "Männlich", "Weiblich", "Männlich", "Weiblich", 
"Weiblich", "Männlich", "Männlich", "Weiblich", "Weiblich", "Weiblich", 
"Weiblich", "Weiblich", "Männlich", "Weiblich", "Männlich", "Weiblich", 
"Männlich", "Weiblich", "Weiblich", "Männlich", "Männlich", "Männlich", 
"Weiblich", "Männlich", "Männlich", "Weiblich", "Weiblich", "Männlich", 
"Weiblich", "Nichtbinäres / Drittes Geschlecht", "Weiblich", 
"Weiblich", "Weiblich", "Weiblich", "Weiblich", "Männlich", "Männlich", 
"Männlich", "Männlich", "Männlich", "Männlich", "Männlich", "Männlich", 
"Männlich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", 
"Weiblich", "Männlich", "Weiblich", "Weiblich", "Männlich", "Weiblich", 
"Weiblich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", 
"Weiblich", "Weiblich", "Weiblich", "Männlich", "Weiblich", "Männlich", 
"Männlich", "Weiblich", "Weiblich", "Männlich"), StrategischeWahl2021 = c("0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "1", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "1", "1", "1", "0", 
"0", "0", "0", "1", "0", "0", "0", "0", "0", "0", "1", "0", "0", 
"0", "0", "0", "0", "0", "0", "1", "0", "0", "1", "0", "0", "1", 
"0", "1", "0", "0", "0", "0", "0", "0", "1", "0", "0", "0", "0", 
"1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"1", "0", "0", "1", "0", "1", "0", "0", "1", "0", "1", "1", "0", 
"0", "0", "1", "0", "0", "1", "0", "1", "1", "0", "0", "0", "0", 
"0", "1", "0", "0", "0", "1", "0", "1", "0", "1", "1", "0", "0", 
"1", "0", "0", "0", "0", "1", "0", "1", "0", "0", "0", "1", "0", 
"0", "0", "1", "0", "0", "0", "1", "0", "1", "0", "0", "0", "0", 
"0", "1", "0", "0", "0", "1", "1", "0", "0", "0", "0", "1", "0", 
"1", "0", "0", "0", "0", "0", "1", "0", "0", "1", "0", "0", "0", 
"1", "0", "0", "0", "0", "0", "0", "0", "1", "1", "0", "0", "0", 
"1", "0", "0", "0", "0", "0", "1", "0", "1", "0", "1", "0", "0", 
"1", "0", "0", "0", "0", "0", "0", "0", "1", "1", "0", "0", "0", 
"1", "0", "0", "1", "0", "1", "0", "0", "0", "0", "0", "1", "0", 
"1", "1", "0", "1", "0", "0", "1", "0", "0", "0", "0", "1", "0", 
"1", "0", "1", "1", "1", "0", "0", "0", "0", "1", "0", "0", "0", 
"1", "0", "0", "0", "0", "1", "1", "0", "0", "0", "0")), row.names = 3:261, class = "data.frame")
> 
1 Answers

I'm not sure what your ideal version of this plot is, so I added several things, some of which are commented out with notes regarding their purpose. That way, you can include or exclude these options as you see fit.

I'm about 99% sure that most settings are like margin: TRBL or top, right, bottom, left. An example and why this matters—on the mosaic, you have labels on top and on the left.

mosaic(data = Test, pop = F,
       ~Q2 + StrategischeWahl2021,
       direction = c("v", "h"),
       shade = TRUE,
       spacing = spacing_increase(start = 0.5, rate = 1.5), #creates space in plot
       labeling_args = list(
         # offset_labels = c(.3, .05, .05, 0),  # lifts labels away from plot
         # offset_varnames = c(.5, .5, .5, .5), # lifts varname away from plot
         just_labels = c("center", "right"), # Ja & Nein Ausrichtung
         gp_labels = gpar(fontsize = 10),    # make font smaller
         set_varnames = c(StrategischeWahl2021 = "StrategischeWähler2021",
                          Q2 = "Geschlecht"),
         set_labels = list(StrategischeWahl2021 = c("Nein", "Ja")),
         rep = FALSE), 
       gp = shading_hcl, gp_args = list(interpolate = c(1, 1.8)),
       margin = c(1, 1, 1, 4)) # if you lift varnames, add a margin!

enter image description here

If you wanted even more control, you can use the grid library.

gg <- grid.grab()
grid.newpage()
gg$children[[5]]$label <- "Pearson\nResiduen"
val <- gsub("^.*\\\n", "", gg$children[[6]]$label)
gg$children[[6]]$label <- paste0("p-Wert\n", val)
grid.draw(gg)

enter image description here

Related