summaryrefslogtreecommitdiff
path: root/src/Chapter4/graph/visualization/SimpleGraphViewer.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/Chapter4/graph/visualization/SimpleGraphViewer.java')
-rw-r--r--src/Chapter4/graph/visualization/SimpleGraphViewer.java86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/Chapter4/graph/visualization/SimpleGraphViewer.java b/src/Chapter4/graph/visualization/SimpleGraphViewer.java
new file mode 100644
index 0000000..7cb46e4
--- /dev/null
+++ b/src/Chapter4/graph/visualization/SimpleGraphViewer.java
@@ -0,0 +1,86 @@
+package chapter4.graph.visualization;
+
+import Chapter4.util.TweetFileToGraph;
+import java.awt.Dimension;
+import java.awt.Shape;
+import java.awt.geom.Ellipse2D;
+import java.io.File;
+
+import javax.swing.JFrame;
+
+import org.apache.commons.collections15.Transformer;
+import GraphElements.RetweetEdge;
+import GraphElements.UserNode;
+import edu.uci.ics.jung.algorithms.layout.KKLayout;
+import edu.uci.ics.jung.algorithms.layout.Layout;
+import edu.uci.ics.jung.algorithms.scoring.EigenvectorCentrality;
+import edu.uci.ics.jung.graph.DirectedGraph;
+import edu.uci.ics.jung.visualization.BasicVisualizationServer;
+
+public class SimpleGraphViewer {
+ public static void main(String[] args){
+
+ File tweetFile;
+
+ if(args.length > 0){
+ tweetFile = new File(args[0]);
+ }
+ else{
+ tweetFile = new File("synthetic_retweet_network.json");
+ }
+
+ DirectedGraph<UserNode, RetweetEdge> retweetGraph = TweetFileToGraph.getRetweetNetwork(tweetFile);
+
+ /*
+ * Converts a node to its string representation
+ */
+ Transformer<UserNode, String> stringer = new Transformer<UserNode, String>(){
+ public String transform(UserNode n){
+ return n.toString();
+ }
+ };
+
+ /*
+ * Calculate the centrality
+ */
+ //calculate the betweenness centrality
+// final InDegreeScorer<UserNode> centralityScore = new InDegreeScorer<UserNode>(retweetGraph);
+// final BetweennessCentrality<UserNode, RetweetEdge> centralityScore = new BetweennessCentrality<UserNode, RetweetEdge>(retweetGraph);
+// final PageRank<UserNode, RetweetEdge> centralityScore = new PageRank<UserNode, RetweetEdge>(retweetGraph, 0.85);
+ final EigenvectorCentrality<UserNode, RetweetEdge> centralityScore = new EigenvectorCentrality<UserNode, RetweetEdge>(retweetGraph);
+ centralityScore.evaluate();
+
+ double centralityMax = 0.0f;
+ for(UserNode node : retweetGraph.getVertices()){
+ centralityMax = Math.max(centralityMax, centralityScore.getVertexScore(node));
+ }
+ final double centralityMaxFinal = centralityMax;
+
+ /*
+ * Sizes a node by some centrality measure
+ */
+ Transformer<UserNode, Shape> shaper = new Transformer<UserNode, Shape>(){
+ public Shape transform(UserNode n){
+ System.out.println("User: " + n.getUsername() + " Cent: " + centralityScore.getVertexScore(n) + " Max: " + centralityMaxFinal);
+ double radius = 50 * (centralityScore.getVertexScore(n)) / centralityMaxFinal;
+ radius = Math.max(radius, 5.0f);
+ float fRadius = (float) radius;
+ return new Ellipse2D.Float(-fRadius/2, -fRadius/2, fRadius, fRadius);
+ }
+ };
+
+ Layout<UserNode, RetweetEdge> layout = new KKLayout<UserNode, RetweetEdge>(retweetGraph);
+ layout.setSize(new Dimension(500, 500));
+
+ BasicVisualizationServer<UserNode, RetweetEdge> vv = new BasicVisualizationServer<UserNode, RetweetEdge>(layout);
+ vv.setPreferredSize(new Dimension(550, 550));
+ vv.getRenderContext().setVertexLabelTransformer(stringer);
+ vv.getRenderContext().setVertexShapeTransformer(shaper);
+
+ JFrame jframe = new JFrame("Simple Graph View");
+ jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ jframe.getContentPane().add(vv);
+ jframe.pack();
+ jframe.setVisible(true);
+ }
+}