zoukankan      html  css  js  c++  java
  • 【转】Plotting texts as graphs with R and igraph

    原文转自:http://blog.ynada.com/303

    I’ve plotted several word association graphs for this New York Times article (1st paragraph) using Rand the igraph library.

    #1, random method

    text-igraph-random

    #2, circle method

    text-igraph-circle

    #3, sphere method

    text-igraph-sphere

    #4, spring method

    text-igraph-spring

    #5, fruchterman-reingold method

    text-igraph-fruchterman-reingold

    # 6, kamada-kawai method

    text-igraph-kamada-kawai

    #7, graphopt method

    text-igraph-graphopt

    The red vertices mark cliques. Here’s the (rough) R code for plotting such graphs:

    rm(list=ls());

    library("igraph");
    library("Cairo");

    # read parameters
    print("Text-as-Graph for R 0.1");
    print("------------------------------------");

    print("Path (no trailing slash): ");
    datafolder <- scan(file="", what="char");

    print("Text file: ");
    datafile <- scan(file="", what="char");

    txt <- scan(paste(datafolder, datafile, sep="/"), what="char", sep=" ", encoding="UTF-8");

    print("Width/Height (e.g. 1024x768): ");
    res <- scan(file="", what="char");
    rwidth <- unlist(strsplit(res, "x"))[1]
    rheight <- unlist(strsplit(res, "x"))[2]

    words <- unlist(strsplit(gsub("[[:punct:]]", " ", tolower(txt)), "[[:space:]]+"));

    g.start <- 1;

    g.end <- length(words) - 1;

    assocs <- matrix(nrow=g.end, ncol=2)

    for (i in g.start:g.end)
    {
    assocs[i,1] <- words[i];
    assocs[i,2] <- words[i+1];
    print(paste("Pass #", i, " of ", g.end, ". ", "Node word is ", toupper(words[i]), ".", sep=""));
    }

    print("Build graph from data frame...");
    g.assocs <- graph.data.frame(assocs, directed=F);

    print("Label vertices...");
    V(g.assocs)$label <- V(g.assocs)$name;

    print("Associate colors...");
    V(g.assocs)$color <- "Gray";

    print("Find cliques...");
    V(g.assocs)[unlist(largest.cliques(g.assocs))]$color <- "Red";

    print("Plotting random graph...");
    CairoPNG(paste(datafolder, "/", "text-igraph-random.png", sep=""), width=as.numeric(rwidth), height=as.numeric(rheight));
    plot(g.assocs, layout=layout.random, vertex.size=4, vertex.label.dist=0);
    dev.off();

    print("Plotting circle graph...");
    CairoPNG(paste(datafolder, "/", "text-igraph-circle.png", sep=""), width=as.numeric(rwidth), height=as.numeric(rheight));
    plot(g.assocs, layout=layout.circle, vertex.size=4, vertex.label.dist=0);
    dev.off();

    print("Plotting sphere graph...");
    CairoPNG(paste(datafolder, "/", "text-igraph-sphere.png", sep=""), width=as.numeric(rwidth), height=as.numeric(rheight));
    plot(g.assocs, layout=layout.sphere, vertex.size=4, vertex.label.dist=0);
    dev.off();

    print("Plotting spring graph...");
    CairoPNG(paste(datafolder, "/", "text-igraph-spring.png", sep=""), width=as.numeric(rwidth), height=as.numeric(rheight));
    plot(g.assocs, layout=layout.spring, vertex.size=4, vertex.label.dist=0);
    dev.off();

    print("Plotting fruchterman-reingold graph...");
    CairoPNG(paste(datafolder, "/", "text-igraph-fruchterman-reingold.png", sep=""), width=as.numeric(rwidth), height=as.numeric(rheight));
    plot(g.assocs, layout=layout.fruchterman.reingold, vertex.size=4, vertex.label.dist=0);
    dev.off();

    print("Plotting kamada-kawai graph...");
    CairoPNG(paste(datafolder, "/", "text-igraph-kamada-kawai.png", sep=""), width=as.numeric(rwidth), height=as.numeric(rheight));
    plot(g.assocs, layout=layout.kamada.kawai, vertex.size=4, vertex.label.dist=0);
    dev.off();

    #CairoPNG(paste(datafolder, "/", "text-igraph-reingold-tilford.png", sep=""), width=as.numeric(rwidth), height=as.numeric(rheight));
    #plot(g.assocs, layout=layout.reingold.tilford, vertex.size=4, vertex.label.dist=0);
    #dev.off();

    print("Plotting graphopt graph...");
    CairoPNG(paste(datafolder, "/", "text-igraph-graphopt.png", sep=""), width=as.numeric(rwidth), height=as.numeric(rheight));
    plot(g.assocs, layout=layout.graphopt, vertex.size=4, vertex.label.dist=0);
    dev.off();

    print("Done!");

  • 相关阅读:
    [SCOI2003]严格N元树
    CF280 C. Game on Tree
    [HDU2281]Square Number
    [HDU5391]Zball in Tina Town
    [HDU3988]Harry Potter and the Hide Story
    [HDU5794]A Simple Chess
    [HDU5451]Best Solver
    [HDU1724]Ellipse
    [HDU6304]Chiaki Sequence Revisited
    [HDU6343]Graph Theory Homework
  • 原文地址:https://www.cnblogs.com/mlv5/p/3688687.html
Copyright © 2011-2022 走看看