tabClHier.R 18.1 KB
Newer Older
dmattek's avatar
dmattek committed
1
2
3
4
#
# Time Course Inspector: Shiny app for plotting time series data
# Author: Maciej Dobrzynski
#
dmattek's avatar
dmattek committed
5
# This module is a tab for hierarchical clustering (base R hclust + dist)
dmattek's avatar
Added:  
dmattek committed
6

dmattek's avatar
dmattek committed
7
# UI ----
dmattek's avatar
Added:  
dmattek committed
8
9
10
11
clustHierUI <- function(id, label = "Hierarchical CLustering") {
  ns <- NS(id)
  
  tagList(
dmattek's avatar
dmattek committed
12
    h4('Hierarchical clustering'),
dmattek's avatar
Added:  
dmattek committed
13
14
15
16
17
18
19
20
21
22
    br(),
    fluidRow(
      column(4,
             selectInput(
               ns("selectPlotHierDiss"),
               label = ("Select type of dissimilarity measure:"),
               choices = list("Euclidean" = 1,
                              "Maximum" = 2,
                              "Manhattan" = 3,
                              "Canberra" = 4,
dmattek's avatar
dmattek committed
23
                              "DTW" = 5),
dmattek's avatar
Added:  
dmattek committed
24
               selected = 1
dmattek's avatar
dmattek committed
25
26
27
28
29
30
31
32
33
34
35
36
37
38
             ),
             selectInput(
               ns("selectPlotHierLinkage"),
               label = ("Select linkage method:"),
               choices = list(
                 "Average" = 1,
                 "Complete" = 2,
                 "Single" = 3,
                 "Centroid" = 4,
                 "Ward" = 5,
                 "Ward D2" = 6,
                 "McQuitty" = 7
               ),
               selected = 5
dmattek's avatar
Added:  
dmattek committed
39
40
41
42
43
44
45
46
47
48
49
50
51
             )
      ),
      column(4,
             sliderInput(
               ns('inPlotHierNclust'),
               '#dendrogram branches to colour',
               min = 1,
               max = 20,
               value = 1,
               step = 1,
               ticks = TRUE,
               round = TRUE
             ),
dmattek's avatar
dmattek committed
52
             
53
             # These two lines are to manually assign colours to clusters; it doesn't really work well, so skip
dmattek's avatar
dmattek committed
54
             # NOT USED AT THE MOMENT!
55
56
             #checkboxInput(ns('chBPlotHierClAss'), 'Manually assign cluster colours'),
             #uiOutput(ns('uiPlotHierClAss')),
dmattek's avatar
dmattek committed
57
             
dmattek's avatar
Added:  
dmattek committed
58
59
             checkboxInput(ns('chBPlotHierClSel'), 'Manually select clusters to display'),
             uiOutput(ns('uiPlotHierClSel')),
dmattek's avatar
dmattek committed
60
             downloadButton(ns('downCellCl'), 'Download CSV with cluster assignments')
dmattek's avatar
Added:  
dmattek committed
61
62
63
64
      )
    ),
    
    br(),
dmattek's avatar
dmattek committed
65
    
dmattek's avatar
Added:  
dmattek committed
66
    tabsetPanel(
dmattek's avatar
dmattek committed
67
68
      tabPanel('Heatmap',
               br(),
dmattek's avatar
Added:  
dmattek committed
69
70
71
               fluidRow(
                 column(3,
                        selectInput(
dmattek's avatar
dmattek committed
72
73
74
75
                          ns("selectPlotHierPalette"),
                          label = "Heatmap\'s colour palette",
                          choices = l.col.pal,
                          selected = 'Spectral'
dmattek's avatar
Added:  
dmattek committed
76
                        ),
dmattek's avatar
dmattek committed
77
                        checkboxInput(ns('inPlotHierRevPalette'), 'Reverse heatmap\'s colour palette', TRUE),
78
79
80
81
82
83
84
85
86
87
88
                        checkboxInput(ns('selectPlotHierKey'), 'Plot colour key', TRUE),
                        checkboxInput(ns('chBsetColBounds'), 'Set bounds for colour scale', FALSE),
                        
                        fluidRow(
                          column(3,
                                 uiOutput(ns('uiSetColBoundsLow'))
                          ),
                          column(3,
                                 uiOutput(ns('uiSetColBoundsHigh'))
                          )
                        )
dmattek's avatar
Added:  
dmattek committed
89
90
                 ),
                 column(3,
91
                        selectInput(
dmattek's avatar
dmattek committed
92
93
94
95
                          ns("selectPlotHierPaletteDend"),
                          label = "Dendrogram\'s colour palette",
                          choices = l.col.pal.dend.2,
                          selected = 'Color Blind'
96
                        ),
dmattek's avatar
dmattek committed
97
                        checkboxInput(ns('selectPlotHierDend'), 'Plot dendrogram and re-order samples', TRUE),
dmattek's avatar
Added:  
dmattek committed
98
99
                        sliderInput(
                          ns('inPlotHierNAcolor'),
dmattek's avatar
dmattek committed
100
                          'Shade of grey for NA values',
dmattek's avatar
Added:  
dmattek committed
101
102
103
104
105
                          min = 0,
                          max = 1,
                          value = 0.8,
                          step = .1,
                          ticks = TRUE
106
                        )
dmattek's avatar
dmattek committed
107
                        
108
                 ),
dmattek's avatar
dmattek committed
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
                 column(3,
                        numericInput(
                          ns('inPlotHierMarginX'),
                          'Bottom margin',
                          5,
                          min = 1,
                          width = "120px"
                        ),
                        numericInput(
                          ns('inPlotHierFontY'),
                          'Font size column labels',
                          1,
                          min = 0,
                          width = "180px",
                          step = 0.1
                        ),
dmattek's avatar
Added:  
dmattek committed
125
126
127
128
                        numericInput(ns('inPlotHierHeatMapHeight'), 
                                     'Display plot height [px]', 
                                     value = 600, 
                                     min = 100,
dmattek's avatar
dmattek committed
129
130
                                     step = 100,
                                     width = "180px")
131
                        
dmattek's avatar
Added:  
dmattek committed
132
                 ),
dmattek's avatar
dmattek committed
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
                 column(3,
                        numericInput(
                          ns('inPlotHierMarginY'),
                          'Right margin',
                          20,
                          min = 1,
                          width = "120px"
                        ),
                        numericInput(
                          ns('inPlotHierFontX'),
                          'Font size row labels',
                          1,
                          min = 0,
                          width = "180px",
                          step = 0.1
                        )
dmattek's avatar
Added:  
dmattek committed
149
150
151
                 )
               ),
               
dmattek's avatar
dmattek committed
152
               downPlotUI(ns('downPlotHier'), "Download PNG"),
dmattek's avatar
Added:  
dmattek committed
153
               actionButton(ns('butPlotHierHeatMap'), 'Plot!'),
dmattek's avatar
dmattek committed
154
               withSpinner(plotOutput(ns('outPlotHier')))
dmattek's avatar
Added:  
dmattek committed
155
      ),
dmattek's avatar
dmattek committed
156
      
dmattek's avatar
dmattek committed
157
      tabPanel('Averages',
dmattek's avatar
dmattek committed
158
               br(),
dmattek's avatar
dmattek committed
159
160
               modTrajRibbonPlotUI(ns('modPlotHierTrajRibbon'))),
      
dmattek's avatar
dmattek committed
161
162
      tabPanel('Time series',
               br(),
163
164
               modTrajPlotUI(ns('modPlotHierTraj'))),
      
165
      tabPanel('PSD',
dmattek's avatar
dmattek committed
166
               br(),
167
168
               modPSDPlotUI(ns('modPlotHierPsd'))),
      
dmattek's avatar
dmattek committed
169
170
      tabPanel('Cluster distribution',
               br(),
dmattek's avatar
Added:  
dmattek committed
171
172
173
174
175
176
               modClDistPlotUI(ns('hierClDistPlot'), 'xxx'))
      
    )
  )
}

dmattek's avatar
dmattek committed
177
# SERVER ----
178
clustHier <- function(input, output, session, in.data4clust, in.data4trajPlot, in.data4stimPlot) {
dmattek's avatar
Added:  
dmattek committed
179
  
180
181
182
183
184
185
186
187
188
189
190
  output$uiPlotHierClAss = renderUI({
    ns <- session$ns
    
    if(input$chBPlotHierClAss) {
      selectInput(ns('inPlotHierClAss'), 'Assign cluster order', 
                  choices = seq(1, input$inPlotHierNclust, 1),
                  multiple = TRUE, 
                  selected = seq(1, input$inPlotHierNclust, 1))
    }
  })
  
dmattek's avatar
Added:  
dmattek committed
191
192
193
194
195
196
197
198
199
200
  output$uiPlotHierClSel = renderUI({
    ns <- session$ns
    
    if(input$chBPlotHierClSel) {
      selectInput(ns('inPlotHierClSel'), 'Select clusters to display', 
                  choices = seq(1, input$inPlotHierNclust, 1),
                  multiple = TRUE, 
                  selected = 1)
    }
  })
dmattek's avatar
dmattek committed
201
  
202
  # UI for setting lower and upper bounds for heat map colour scale  
203
204
205
206
  output$uiSetColBoundsLow = renderUI({
    ns <- session$ns
    
    if(input$chBsetColBounds) {
dmattek's avatar
dmattek committed
207
      
208
      loc.dt = in.data4trajPlot()
dmattek's avatar
dmattek committed
209
      
210
211
212
213
214
215
216
217
218
219
220
221
222
223
      numericInput(
        ns('inSetColBoundsLow'),
        label = 'Lower',
        step = 0.1, 
        value = floor(min(loc.dt[['y']], na.rm = T))
      )
    }
  })
  
  
  output$uiSetColBoundsHigh = renderUI({
    ns <- session$ns
    
    if(input$chBsetColBounds) {
dmattek's avatar
dmattek committed
224
      
225
226
227
228
229
230
231
232
233
234
235
      loc.dt = in.data4trajPlot()
      
      numericInput(
        ns('inSetColBoundsHigh'),
        label = 'Upper',
        step = 0.1, 
        value = ceil(max(loc.dt[['y']], na.rm = T))
      )
    }
  })
  
dmattek's avatar
Added:  
dmattek committed
236
237
238
239
240
241
  # calculate distance matrix for further clustering
  # time series arranged in rows with columns corresponding to time points
  userFitDistHier <- reactive({
    cat(file = stderr(), 'userFitDistHier \n')
    
    dm.t = in.data4clust()
dmattek's avatar
dmattek committed
242
    
dmattek's avatar
Added:  
dmattek committed
243
244
245
246
    if (is.null(dm.t)) {
      return(NULL)
    }
    
247
    #pr_DB$set_entry(FUN = fastDTW, names = c("fastDTW"))
dmattek's avatar
Added:  
dmattek committed
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
    cl.dist = dist(dm.t, method = s.cl.diss[as.numeric(input$selectPlotHierDiss)])
    
    return(cl.dist)
  })
  
  # perform hierarchical clustering and return dendrogram coloured according to cutree
  # branch coloring performed using dendextend package
  userFitDendHier <- reactive({
    cat(file = stderr(), 'userFitDendHier \n')
    
    dm.dist = userFitDistHier()
    
    if (is.null(dm.dist)) {
      return(NULL)
    }
    
    cl.hc = hclust(dm.dist, method = s.cl.linkage[as.numeric(input$selectPlotHierLinkage)])
dmattek's avatar
dmattek committed
265
    
266
267
268
269
    # number of clusters at which dendrigram is cut
    loc.k = input$inPlotHierNclust
    
    # make a palette with the amount of colours equal to the number of clusters
dmattek's avatar
dmattek committed
270
271
272
    #loc.col = get(input$selectPlotHierPaletteDend)(n = loc.k)
    loc.col = ggthemes::tableau_color_pal(input$selectPlotHierPaletteDend)(n = loc.k)
    
273
    # take into account manual assignment of cluster numbers
dmattek's avatar
dmattek committed
274
275
276
277
    # NOT USED AT THE MOMENT
    #if (input$chBPlotHierClAss) {
    #  loc.col = loc.col[as.numeric(input$inPlotHierClAss)]
    #}
278
    
dmattek's avatar
Added:  
dmattek committed
279
280
    dend <- as.dendrogram(cl.hc)
    dend <- color_branches(dend, 
281
282
                           col = loc.col, 
                           k = loc.k)
dmattek's avatar
Added:  
dmattek committed
283
284
285
286
    
    return(dend)
  })
  
dmattek's avatar
dmattek committed
287
  
dmattek's avatar
Added:  
dmattek committed
288
289
290
291
292
293
294
295
296
  # returns table prepared with f-n getClCol
  # for hierarchical clustering
  getClColHier <- reactive({
    cat(file = stderr(), 'getClColHier \n')
    
    loc.dend = userFitDendHier()
    if (is.null(loc.dend))
      return(NULL)
    
297
298
299
300
301
302
303
304
305
306
307
    loc.dt = getClCol(loc.dend, input$inPlotHierNclust)
    
    # Display clusters specified in the inPlotHierClSel field
    # Data is ordered according to the order of clusters specified in this field
    if(input$chBPlotHierClSel) {
      loc.dt = loc.dt[cl.no %in% input$inPlotHierClSel]
      loc.dt[, cl.no := factor(cl.no, levels = input$inPlotHierClSel)]
      setkey(loc.dt, cl.no)
    }
    
    return(loc.dt)
dmattek's avatar
Added:  
dmattek committed
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
  })
  
  
  
  # return all unique track object labels (created in dataMod)
  # This will be used to display in UI for trajectory highlighting
  getDataTrackObjLabUni_afterTrim <- reactive({
    cat(file = stderr(), 'getDataTrackObjLabUni_afterTrim\n')
    loc.dt = in.data4trajPlot()
    
    if (is.null(loc.dt))
      return(NULL)
    else
      return(unique(loc.dt$id))
  })
  
  # return dt with cell IDs and their corresponding condition name
  # The condition is the column defined by facet groupings
  getDataCond <- reactive({
    cat(file = stderr(), 'getDataCond\n')
    loc.dt = in.data4trajPlot()
    
    if (is.null(loc.dt))
      return(NULL)
    else
      return(unique(loc.dt[, .(id, group)]))
    
  })
  
  # prepare data for plotting trajectories per cluster
  # outputs dt as data4trajPlot but with an additional column 'cl' that holds cluster numbers
  # additionally some clusters are omitted according to manual selection
  data4trajPlotCl <- reactive({
    cat(file = stderr(), 'data4trajPlotCl: in\n')
    
    loc.dt = in.data4trajPlot()
    
    if (is.null(loc.dt)) {
      cat(file = stderr(), 'data4trajPlotCl: dt is NULL\n')
      return(NULL)
    }
    
    cat(file = stderr(), 'data4trajPlotCl: dt not NULL\n')
    
    # get cellIDs with cluster assignments based on dendrogram cut
dmattek's avatar
dmattek committed
353
    loc.dt.cl = getDataCl(userFitDendHier(), input$inPlotHierNclust)
dmattek's avatar
dmattek committed
354
355
356
    
    # add the column with cluster assignemnt to the main dataset
    loc.dt = merge(loc.dt, loc.dt.cl, by = COLID)
dmattek's avatar
Added:  
dmattek committed
357
    
358
359
360
    # Display clusters specified in the inPlotHierClSel field
    # Data is ordered according to the order of clusters specified in this field
    if(input$chBPlotHierClSel) {
dmattek's avatar
Added:  
dmattek committed
361
      loc.dt = loc.dt[cl %in% input$inPlotHierClSel]
362
363
364
      loc.dt[, cl := factor(cl, levels = input$inPlotHierClSel)]
      setkey(loc.dt, cl)
    }
dmattek's avatar
Added:  
dmattek committed
365
366
367
368
    
    return(loc.dt)    
  })
  
369
370
371
372
373
374
375
376
377
378
379
380
381
382
  data4stimPlotCl <- reactive({
    cat(file = stderr(), 'data4stimPlotCl: in\n')
    
    loc.dt = in.data4stimPlot()
    
    if (is.null(loc.dt)) {
      cat(file = stderr(), 'data4stimPlotCl: dt is NULL\n')
      return(NULL)
    }
    
    cat(file = stderr(), 'data4stimPlotCl: dt not NULL\n')
    return(loc.dt)
  })
  
dmattek's avatar
Added:  
dmattek committed
383
384
385
386
387
388
389
390
391
392
  # download a list of cellIDs with cluster assignments
  output$downCellCl <- downloadHandler(
    filename = function() {
      paste0('clust_hierch_data_',
             s.cl.diss[as.numeric(input$selectPlotHierDiss)],
             '_',
             s.cl.linkage[as.numeric(input$selectPlotHierLinkage)], '.csv')
    },
    
    content = function(file) {
dmattek's avatar
dmattek committed
393
      write.csv(x = getDataCl(userFitDendHier(), input$inPlotHierNclust), file = file, row.names = FALSE)
dmattek's avatar
Added:  
dmattek committed
394
395
396
397
398
399
400
401
402
403
404
405
406
407
    }
  )
  
  # prepare data for barplot with distribution of items per condition  
  data4clDistPlot <- reactive({
    cat(file = stderr(), 'data4clDistPlot: in\n')
    
    # get cell IDs with cluster assignments depending on dendrogram cut
    loc.dend <- userFitDendHier()
    if (is.null(loc.dend)) {
      cat(file = stderr(), 'plotClDist: loc.dend is NULL\n')
      return(NULL)
    }
    
dmattek's avatar
dmattek committed
408
409
    # get cell id's with associated cluster numbers
    loc.dt.cl = getDataCl(loc.dend, input$inPlotHierNclust)
dmattek's avatar
Added:  
dmattek committed
410
411
412
413
414
415
416
417
    
    # get cellIDs with condition name
    loc.dt.gr = getDataCond()
    if (is.null(loc.dt.gr)) {
      cat(file = stderr(), 'plotClDist: loc.dt.gr is NULL\n')
      return(NULL)
    }
    
dmattek's avatar
dmattek committed
418
    loc.dt = merge(loc.dt.cl, loc.dt.gr, by = COLID)
dmattek's avatar
Added:  
dmattek committed
419
    
dmattek's avatar
dmattek committed
420
    
dmattek's avatar
Added:  
dmattek committed
421
422
    loc.dt.aggr = loc.dt[, .(nCells = .N), by = .(group, cl)]
    
423
424
425
426
427
428
429
    # Display clusters specified in the inPlotHierClSel field
    # Data is ordered according to the order of clusters specified in this field
    if(input$chBPlotHierClSel) {
      loc.dt.aggr = loc.dt.aggr[cl %in% input$inPlotHierClSel]
      loc.dt.aggr[, cl := factor(cl, levels = input$inPlotHierClSel)]
      setkey(loc.dt.aggr, cl)
    }
dmattek's avatar
Added:  
dmattek committed
430
431
432
433
    return(loc.dt.aggr)
    
  })
  
434
  createMethodStr = reactive({
dmattek's avatar
dmattek committed
435
    
436
    paste0(s.cl.diss[as.numeric(input$selectPlotHierDiss)],
dmattek's avatar
dmattek committed
437
438
           '_',
           s.cl.linkage[as.numeric(input$selectPlotHierLinkage)])
439
440
441
    
  })
  
dmattek's avatar
Added:  
dmattek committed
442
443
444
445
446
447
448
449
450
451
452
453
454
  # Function instead of reactive as per:
  # http://stackoverflow.com/questions/26764481/downloading-png-from-shiny-r
  # This function is used to plot and to downoad a pdf
  plotHier <- function() {
    
    loc.dm = in.data4clust()
    if (is.null(loc.dm))
      return(NULL)
    
    loc.dend <- userFitDendHier()
    if (is.null(loc.dend))
      return(NULL)
    
455
456
457
458
459
460
461
    loc.col.bounds = NULL
    if (input$chBsetColBounds)
      loc.col.bounds = c(input$inSetColBoundsLow, input$inSetColBoundsHigh)
    else 
      loc.col.bounds = NULL
    
    
dmattek's avatar
dmattek committed
462
    loc.p = LOCplotHeatmap(loc.dm,
dmattek's avatar
dmattek committed
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
                           loc.dend, 
                           palette.arg = input$selectPlotHierPalette, 
                           palette.rev.arg = input$inPlotHierRevPalette, 
                           dend.show.arg = input$selectPlotHierDend, 
                           key.show.arg = input$selectPlotHierKey, 
                           margin.x.arg = input$inPlotHierMarginX, 
                           margin.y.arg = input$inPlotHierMarginY, 
                           nacol.arg = input$inPlotHierNAcolor, 
                           font.row.arg = input$inPlotHierFontX, 
                           font.col.arg = input$inPlotHierFontY, 
                           breaks.arg = loc.col.bounds,
                           title.arg = paste0(
                             "Distance measure: ",
                             s.cl.diss[as.numeric(input$selectPlotHierDiss)],
                             "\nLinkage method: ",
                             s.cl.linkage[as.numeric(input$selectPlotHierLinkage)]
                           ))
dmattek's avatar
Added:  
dmattek committed
480
481
482
483
484
    
    return(loc.p)
  }
  
  
dmattek's avatar
dmattek committed
485
  
dmattek's avatar
Added:  
dmattek committed
486
487
488
489
  #  Hierarchical - display heatmap
  getPlotHierHeatMapHeight <- function() {
    return (input$inPlotHierHeatMapHeight)
  }
dmattek's avatar
dmattek committed
490
  
dmattek's avatar
Added:  
dmattek committed
491
492
493
494
495
496
497
498
499
500
501
502
  output$outPlotHier <- renderPlot({
    locBut = input$butPlotHierHeatMap
    
    if (locBut == 0) {
      cat(file = stderr(), 'outPlotHier: Go button not pressed\n')
      
      return(NULL)
    }
    
    plotHier()
  }, height = getPlotHierHeatMapHeight)
  
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
  createFnameHeatMap = reactive({
    
    paste0('clust_hierch_heatMap_',
           s.cl.diss[as.numeric(input$selectPlotHierDiss)],
           '_',
           s.cl.linkage[as.numeric(input$selectPlotHierLinkage)],
           '.png')
  })
  
  createFnameTrajPlot = reactive({
    
    paste0('clust_hierch_tCourses_',
           s.cl.diss[as.numeric(input$selectPlotHierDiss)],
           '_',
           s.cl.linkage[as.numeric(input$selectPlotHierLinkage)], 
           '.pdf')
  })
  
  createFnameRibbonPlot = reactive({
    
    paste0('clust_hierch_tCoursesMeans_',
           s.cl.diss[as.numeric(input$selectPlotHierDiss)],
           '_',
           s.cl.linkage[as.numeric(input$selectPlotHierLinkage)], 
           '.pdf')
  })
  
530
531
532
533
534
535
536
537
538
  createFnamePsdPlot = reactive({
    
    paste0('clust_hierch_tCoursesPsd_',
           s.cl.diss[as.numeric(input$selectPlotHierDiss)],
           '_',
           s.cl.linkage[as.numeric(input$selectPlotHierLinkage)], 
           '.pdf')
  })
  
539
540
541
542
543
  createFnameDistPlot = reactive({
    
    paste0('clust_hierch_clDist_',
           s.cl.diss[as.numeric(input$selectPlotHierDiss)],
           '_',
544
545
           s.cl.linkage[as.numeric(input$selectPlotHierLinkage)], '.pdf')  
  })
546
  
dmattek's avatar
Added:  
dmattek committed
547
548
  
  #  Hierarchical - Heat Map - download pdf
549
  callModule(downPlot, "downPlotHier", createFnameHeatMap, plotHier)
dmattek's avatar
dmattek committed
550
  
551
  # plot individual trajectories withina cluster  
dmattek's avatar
Added:  
dmattek committed
552
553
  callModule(modTrajPlot, 'modPlotHierTraj', 
             in.data = data4trajPlotCl, 
554
             in.data.stim = data4stimPlotCl,
dmattek's avatar
Added:  
dmattek committed
555
556
             in.facet = 'cl',  
             in.facet.color = getClColHier,
557
             in.fname = createFnameTrajPlot)
dmattek's avatar
Added:  
dmattek committed
558
  
559
  # plot cluster means
dmattek's avatar
dmattek committed
560
561
  callModule(modTrajRibbonPlot, 'modPlotHierTrajRibbon', 
             in.data = data4trajPlotCl, 
562
             in.data.stim = data4stimPlotCl,
dmattek's avatar
dmattek committed
563
564
             in.facet = 'cl',  
             in.facet.color = getClColHier,
565
             in.fname = createFnameRibbonPlot)
dmattek's avatar
dmattek committed
566
  
567
568
569
570
571
572
  # plot cluster PSD
  callModule(modPSDPlot, 'modPlotHierPsd',
             in.data = data4trajPlotCl,
             in.facet = 'cl',
             in.facet.color = getClColHier,
             in.fname = createFnamePsdPlot)
dmattek's avatar
dmattek committed
573
  
574
  # plot distribution barplot
dmattek's avatar
Added:  
dmattek committed
575
576
577
  callModule(modClDistPlot, 'hierClDistPlot', 
             in.data = data4clDistPlot,
             in.cols = getClColHier,
578
             in.fname = createFnameDistPlot)
dmattek's avatar
dmattek committed
579
  
dmattek's avatar
Added:  
dmattek committed
580
581
  
}