Home > Enterprise >  Remove y-tick labels on a dummbell plot to create space
Remove y-tick labels on a dummbell plot to create space

Time:11-15

I got help on here to use the facet-wrap for my dumbbell plot but I want to create space for my graph. This is the current graph with facet_wrap. So I just want the y-ticks to appear once(i.e., on the left plots) thatenter image description here

data10A <- structure(list(Session = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), conditon2 = structure(c(10L, 
4L, 12L, 6L, 11L, 5L, 1L, 7L, 3L, 9L, 2L, 8L, 10L, 4L, 12L, 6L, 
11L, 5L, 1L, 7L, 3L, 9L, 2L, 8L), .Label = c("CEN_LLL", "CTL_LLL", 
"IPS_LLL", "CEN_RRR", "CTL_RRR", "IPS_RRR", "CEN_RLR", "CTL_RLR", 
"IPS_RLR", "CEN_LRL", "CTL_LRL", "IPS_LRL"), class = "factor"), 
    Trial_type = structure(c(2L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 
    1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 
    2L), .Label = c("Retention", "Transfer"), class = "factor"), 
    NormalizedJerk_102 = c(1270.168699, 2099.703957, 3259.268053, 
    1152.257445, 3810.890123, 4601.918336, 1792.371775, 1288.768888, 
    2699.08162, 1650.968794, 2018.457394, 6159.567785, 931.350429, 
    1053.84252, 1611.673955, 1034.363607, 5352.195367, 2499.83996, 
    1560.678962, 915.3845866, 1948.757464, 1341.815274, 2113.732859, 
    2051.140838), NormalizedJerk_104 = c(853.7034116, 924.8554548, 
    2268.966702, 675.7160839, 2442.874632, 1603.954653, 1010.111276, 
    794.1752256, 1313.813984, 1197.638788, 1039.577947, 3125.131019, 
    561.2311988, 767.7541159, 1019.744071, 769.6067294, 2232.404471, 
    1292.509181, 884.8343164, 663.0273865, 1230.369444, 717.8466364, 
    1536.027898, 1027.358586), key = c("Change in normalized jerk", 
    "Change in normalized jerk", "Change in normalized jerk", 
    "Change in normalized jerk", "Change in normalized jerk", 
    "Change in normalized jerk", "Change in normalized jerk", 
    "Change in normalized jerk", "Change in normalized jerk", 
    "Change in normalized jerk", "Change in normalized jerk", 
    "Change in normalized jerk", "Change in normalized jerk", 
    "Change in normalized jerk", "Change in normalized jerk", 
    "Change in normalized jerk", "Change in normalized jerk", 
    "Change in normalized jerk", "Change in normalized jerk", 
    "Change in normalized jerk", "Change in normalized jerk", 
    "Change in normalized jerk", "Change in normalized jerk", 
    "Change in normalized jerk")), row.names = c(NA, -24L), class = c("tbl_df", 
"tbl", "data.frame"))
library(ggplot2)
library(dumbbell)
library(ggh4x)

data10A$key <- paste(data10A$Trial_type, data10A$Session, sep = "\n")
dumbbell::dumbbell(data10A, id = "conditon2", key = "key",
                   leg = "Test", 
                   column1 = "NormalizedJerk_102", 
                   column2 = "NormalizedJerk_104", 
                   delt = 1, lab1 = "Pre-test", lab2 = "Post-test", 
                   p_col1 = "black", p_col2 = "grey40", 
                   textsize = 4, segsize = 1.5, 
                   pointsize = 2.5, 
                   title = "Change in Normalized jerk from Pre- to Post-test")    
  facet_wrap( ~ key, scales="free", ncol=2)  
  theme(axis.text.x = element_text(size = 12, face = "bold"),
        axis.text.y = element_text(size = 11, face = "bold"),
        legend.position = "right",
        legend.text = element_text(size = 12), 
        legend.title = element_text(size = 14),
        strip.text = element_text(face = "bold", size = 14, color = "black"))

CodePudding user response:

TBMK your desired result could not achieved by facet_nested alone. The issue is that with scales="free" you end up with a "duplicated" y-scale per facet. However, simply dropping scales="free" is not an option as in that case you end up with a plot showing the unused condition2 categories in each facet.

Therefore one option to achieve your desired result would be to make separate plot for each Trial_Type and glue them together using e.g. patchwork. This will allow you to drop scales="free". Additionally, to make use of facet_nested(_wrap) I dropped dumbbell and constructed the dumbbell chart from scratch using geom_segment and geom_point plus geom_text to add the labels for the differences.

library(ggplot2)
library(ggh4x)
library(patchwork)
library(magrittr)

make_dumbbell <- function(x, max_x) {
  n_y <- length(unique(x$conditon2))
  
  x$conditon2 <- as.character(x$conditon2)
  
  ggplot(x, aes(y = conditon2, yend = conditon2))  
    geom_segment(aes(x = NormalizedJerk_102, xend = NormalizedJerk_104), size = 1.5, color = "gray80")  
    geom_point(aes(NormalizedJerk_102), size = 2.5, color = "black")  
    geom_point(aes(NormalizedJerk_104), size = 2.5, color = "grey40")  
    geom_text(aes(label = scales::number(NormalizedJerk_104 - NormalizedJerk_102, accuracy = .1)),
      x = max_x, hjust = 1, fontface = "bold"
    )  
    annotate(geom = "text", label = "DIFF", y = n_y   1, x = max_x, color = "red", fontface = "bold", hjust = 1)  
    scale_y_discrete(expand = expansion(add = c(.6, 1.6)))  
    facet_nested_wrap(~ Trial_type   Session)  
    theme_bw()  
    theme(
      axis.text.x = element_text(size = 12, face = "bold"),
      axis.text.y = element_text(size = 11, face = "bold"),
      legend.position = "right",
      legend.text = element_text(size = 12),
      legend.title = element_text(size = 14),
      strip.text = element_text(face = "bold", size = 14, color = "black")
    )  
    labs(x = NULL, y = NULL)
}

max_x <- 1.25 * max(c(data10A$NormalizedJerk_102, data10A$NormalizedJerk_104))

data10A %>%
  split(.$Trial_type) %>%
  lapply(make_dumbbell, max_x = max_x) %>%
  wrap_plots(ncol = 1)

  • Related