Home > Enterprise >  Error in dumbbell plot with facet grid, unable to create a side by side plot
Error in dumbbell plot with facet grid, unable to create a side by side plot

Time:11-15

I tried plotting a dumbbell plot side by side with a facet grid but got some interesting errors. enter image description here

Error: At least one layer must contain all faceting variables: Trial_type, Session..

  • Plot is missing Trial_type, Session.
  • Layer 1 is missing Session.
  • Layer 2 is missing Session.
  • Layer 3 is missing Session.
  • Layer 4 is missing Session.
  • Layer 5 is missing Trial_type, Session.
  • Layer 6 is missing Session. Run rlang::last_error() to see where the error occurred. In addition: Warning messages: 1: In min(x) : no non-missing arguments to min; returning Inf 2: In max(x) : no non-missing arguments to max; returning -Inf 3: In min(x) : no non-missing arguments to min; returning Inf 4: In max(x) : no non-missing arguments to max; returning -Inf
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(tidyverse)
  library(dumbbell)
 dumbbell::dumbbell(data10A, id = "conditon2", key = "Trial_type", 
          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( Trial_type ~ Session., 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:

The issue is that dumbbell::dumbbell does some data pre-processing before constructing the dumbbell chart via ggplot2. Among other things unnecessary columns get dropped during this step, i.e. only the columns specified in the arguments of dumbbell are kept while all other columns which in your case includes your Session column get dropped. As a consequence you are not able to facet by Session.

One workaround would be to add a new key column to your data which is simply the interaction of Trial_type and Session. This key column you could then passed to the key argument off dumbbell and could be used as faceting variable:

library(ggplot2)
library(dumbbell)

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"))

Created on 2021-11-14 by the reprex package (v2.0.1)

  • Related