discourse_map(text.var, grouping.var, edge.constant, sep = "_", condense = TRUE, ...)
"word_stats"
object (i.e., the
output of a word_stats
function).missing
) to 2.5 times the number of social actors.TRUE
sentCombine
is used to
condense text by grouping variable.Returns a list: rawThe dataframe with to and from columns (the edges) + word counts edge_word_countA dataframe of edges and word counts + proportional word count vertex_word_countA dataframe of vertices and word counts + proportional word count plotAn igraph object
View the flow of discourse from social actors.
For an example of the video generated from the Animate
output of discourse_map
see:
https://www.youtube.com/watch?v=7LcqFZODXNo&feature=youtu.be. An HTML
output can be viewed:
http://trinker.github.io/qdap_examples/animation_dialogue.
## <strong>Not run</strong>: # discourse_map(DATA$state, list(DATA$person, DATA$sex)) # x <- with(mraja1, discourse_map(dialogue, person)) # x # lview(x) # library(igraph) # plot(visual(x), edge.curved=FALSE) # # ## Quickly add/remove a title # Title(x) <- "Act 1" # x # Title(x) <- NULL # x # # ## Augmenting the plot # library(qdapTools) # mygraph <- visual(x) # # plot(mygraph, edge.curved=TRUE) # # V(mygraph)$sex <- V(mygraph)$name %lc% raj.demographics[, 1:2] # V(mygraph)$color <- ifelse(V(mygraph)$sex=="f", "pink", "lightblue") # # plot(mygraph, edge.curved=TRUE) # # V(mygraph)$family <- V(mygraph)$name %l+% raj.demographics[, c(1, 3)] # cols <- qcv(blue, red, brown, darkgreen, grey10) # V(mygraph)$label.color <- lookup(V(mygraph)$family, # unique(V(mygraph)$family), cols) # # plot(mygraph, edge.curved=TRUE) # # ## Community detection # x <- with(mraja1, discourse_map(dialogue, person)) # wc <- walktrap.community(visual(x)) # colors <- rainbow(max(membership(wc))) # plot(x, vertex.color=colors[membership(wc)]) # # ## Repeated Measures (BASIC EXAMPLE) # ##------------------------------ # # ## First merge data and map to discourse per act # ## to separate networks # # dat <- key_merge(raj, raj.demographics) # list_dat <- split(dat, dat$act) # plot_dat <- lapply(list_dat, function(x) with(x, discourse_map(dialogue, person))) # # opar <- par()$mar # par(mfrow=c(3, 2), mar=c(0, 0, 3, 0)) # # lapply(seq_along(plot_dat), function(i){ # plot(plot_dat[[i]]) # mtext(paste("Act", names(plot_dat)[i]), side=3) # }) # # # ## Repeated Measures (EXTENDED EXAMPLE) # ##------------------------------ # fam_key <- data.frame(fam=unique(raj.demographics$fam.aff), # cols=qcv(blue, grey10, red, orange), # stringsAsFactors = FALSE) # # par(mfrow=c(3, 2), mar=c(0, 1, 3, 1)) # lapply(seq_along(plot_dat), function(i){ # # THE_PLOT <- visual(plot_dat[[i]]) # # V(THE_PLOT)$sex <- V(THE_PLOT)$name %l% raj.demographics[, 1:2] # V(THE_PLOT)$color <- ifelse(V(THE_PLOT)$sex=="f", "pink", "lightblue") # V(THE_PLOT)$family <- V(THE_PLOT)$name %lc+% raj.demographics[, c(1, 3)] # V(THE_PLOT)$label.color <- lookup(V(THE_PLOT)$family, fam_key) # # plot(THE_PLOT, edge.curved=TRUE) # mtext(paste("Act", names(plot_dat)[i]), side=3) # }) # frame() # bords <- rep("black", 7) # bords[3] <- "white" # legend(.29, .95, c("Female", "Male", NA, as.character(fam_key[, 1])), # fill=c("pink", "lightblue", NA, fam_key[, 2]), border=bords, cex=1.5) # # ## Reset graphics margins # par(mar=opar) # # ## ANIMATION # #=========== # test <- discourse_map(DATA$state, list(DATA$person)) # # ## Very quick, hard to see # Animate(test) # # pdf("test.pdf") # par(mar=c(0, 0, 1, 0)) # Animate(test, title="Test Plot") # dev.off() # # ## Animate it # ##----------- # library(animation) # library(igraph) # # loc <- reports::folder(animation_dialogue) # ans <- Animate(test) # # ## Set up the plotting function # oopt <- animation::ani.options(interval = 0.1) # # FUN <- function() { # lapply(seq_along(ans), function(i) { # par(mar=c(0, 0, 1, 0)) # set.seed(10) # plot.igraph(ans[[i]], edge.curved=TRUE, layout=layout.circle) # mtext("Discourse Map", side=3) # animation::ani.pause() # }) # } # # ## Detect OS # type <- if(.Platform$OS.type == "windows") shell else system # saveGIF(FUN(), interval = 0.1, outdir = loc, cmd.fun = type) # # saveVideo(FUN(), video.name = "discourse_map.avi", interval = 0.1, outdir = loc) # # saveLatex(FUN(), autoplay = TRUE, loop = FALSE, latex.filename = "tester.tex", # caption = "animated dialogue", outdir = loc, ani.type = "pdf", # ani.dev = "pdf", ani.width = 5, ani.height = 5.5, interval = 0.1) # # saveHTML(FUN(), autoplay = FALSE, loop = TRUE, verbose = FALSE, # outdir = file.path(loc, "new"), single.opts = # "'controls': ['first', 'previous', 'play', 'next', 'last', 'loop', 'speed'], 'delayMin': 0") # # # ## More Elaborate Layout # test2 <- with(mraja1, discourse_map(dialogue, person)) # # loc2 <- reports::folder(animation_dialogue2) # ans2 <- Animate(test2) # ## Set up the plotting function # oopt <- animation::ani.options(interval = 0.1) # # FUN3 <- function() { # lapply(seq_along(ans2), function(i) { # par(mar=c(0, 0, 1, 0)) # set.seed(10) # plot.igraph(ans2[[i]], edge.curved=TRUE, layout=layout.auto) # mtext("Discourse Map\nRomeo and Juliet: Act 1", side=3) # animation::ani.pause() # }) # } # # saveHTML(FUN3(), autoplay = FALSE, loop = FALSE, verbose = FALSE, # outdir = file.path(loc2, "new"), single.opts = # "'controls': ['first', 'play', 'loop', 'speed'], 'delayMin': 0") # # saveVideo(FUN3(), video.name = "discourse_map.avi", interval = 0.2, # outdir = loc2) # ## <strong>End(Not run)</strong>