2011-01-04 6 views
6

私は宿題をして、stackoverflowで以前に回答されたサンプルとトピックをGoogleで検索しました。しかし、何も見つかりませんでした。は、矢印のようなグラフのエッジをプリフューズする必要があります。

私の問題は、矢印のような視界を持たない普通のエッジです。

ここ
 
LabelRenderer nameLabel = new LabelRenderer("name"); 
     nameLabel.setRoundedCorner(8, 8); 
     DefaultRendererFactory rendererFactory = new DefaultRendererFactory(nameLabel); 
     EdgeRenderer edgeRenderer; 
    edgeRenderer = new EdgeRenderer(prefuse.Constants.EDGE_TYPE_LINE, prefuse.Constants.EDGE_ARROW_FORWARD); 
     rendererFactory.setDefaultEdgeRenderer(edgeRenderer); 
     vis.setRendererFactory(rendererFactory); 


私はこれらが透明であってはなりません期待して、エッジの色について見たものである:ここで

は私がターゲットから目的地までの矢印が前方にありご希望に何をすべきかです

 
int[] palette = new int[]{ColorLib.rgb(255, 180, 180), ColorLib.rgb(190, 190, 255)}; 

     DataColorAction fill = new DataColorAction("socialnet.nodes", "gender", Constants.NOMINAL, VisualItem.FILLCOLOR, palette); 

     ColorAction text = new ColorAction("socialnet.nodes", VisualItem.TEXTCOLOR, ColorLib.gray(0)); 


     ColorAction edges = new ColorAction("socialnet.edges", VisualItem.STROKECOLOR, ColorLib.gray(200)); 
     ColorAction arrow = new ColorAction("socialnet.edges", VisualItem.FILLCOLOR, ColorLib.gray(200)); 

     ActionList colour = new ActionList(); 
     colour.add(fill); 
     colour.add(text); 
     colour.add(edges); 
     colour.add(arrow); 
     vis.putAction("colour", colour); 

こうして、私はどこが間違っているのだろうか? なぜ私のエッジが矢印のように見えないのですか?

ありがとうございます。詳細については

、私はすべてのコードを貼り付ける:

 
/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

package prefusedeneme; 

import javax.swing.JFrame; 

import prefuse.data.*; 
import prefuse.data.io.*; 
import prefuse.Display; 
import prefuse.Visualization; 
import prefuse.render.*; 
import prefuse.util.*; 
import prefuse.action.assignment.*; 
import prefuse.Constants; 
import prefuse.visual.*; 
import prefuse.action.*; 
import prefuse.activity.*; 
import prefuse.action.layout.graph.*; 
import prefuse.controls.*; 
import prefuse.data.expression.Predicate; 
import prefuse.data.expression.parser.ExpressionParser; 

public class SocialNetworkVis { 

    public static void main(String argv[]) { 

     // 1. Load the data 

     Graph graph = null; 
     /* graph will contain the core data */ 
     try { 
      graph = new GraphMLReader().readGraph("socialnet.xml"); 

     /* load the data from an XML file */ 
     } catch (DataIOException e) { 
      e.printStackTrace(); 
      System.err.println("Error loading graph. Exiting..."); 
      System.exit(1); 
     } 

     // 2. prepare the visualization 

     Visualization vis = new Visualization(); 
     /* vis is the main object that will run the visualization */ 
     vis.add("socialnet", graph); 
     /* add our data to the visualization */ 

     // 3. setup the renderers and the render factory 

     // labels for name 
     LabelRenderer nameLabel = new LabelRenderer("name"); 
     nameLabel.setRoundedCorner(8, 8); 
     /* nameLabel decribes how to draw the data elements labeled as "name" */ 

     // create the render factory 
     DefaultRendererFactory rendererFactory = new DefaultRendererFactory(nameLabel); 
     EdgeRenderer edgeRenderer; 
    edgeRenderer = new EdgeRenderer(prefuse.Constants.EDGE_TYPE_LINE, prefuse.Constants.EDGE_ARROW_FORWARD); 
     rendererFactory.setDefaultEdgeRenderer(edgeRenderer); 
     vis.setRendererFactory(rendererFactory); 


     // 4. process the actions 

     // colour palette for nominal data type 
     int[] palette = new int[]{ColorLib.rgb(255, 180, 180), ColorLib.rgb(190, 190, 255)}; 
     /* ColorLib.rgb converts the colour values to integers */ 


     // map data to colours in the palette 
     DataColorAction fill = new DataColorAction("socialnet.nodes", "gender", Constants.NOMINAL, VisualItem.FILLCOLOR, palette); 
     /* fill describes what colour to draw the graph based on a portion of the data */ 

     // node text 
     ColorAction text = new ColorAction("socialnet.nodes", VisualItem.TEXTCOLOR, ColorLib.gray(0)); 
     /* text describes what colour to draw the text */ 

     // edge 
     ColorAction edges = new ColorAction("socialnet.edges", VisualItem.STROKECOLOR, ColorLib.gray(200)); 
     ColorAction arrow = new ColorAction("socialnet.edges", VisualItem.FILLCOLOR, ColorLib.gray(200)); 
     /* edge describes what colour to draw the edges */ 

     // combine the colour assignments into an action list 
     ActionList colour = new ActionList(); 
     colour.add(fill); 
     colour.add(text); 
     colour.add(edges); 
     colour.add(arrow); 
     vis.putAction("colour", colour); 
     /* add the colour actions to the visualization */ 

     // create a separate action list for the layout 
     ActionList layout = new ActionList(Activity.INFINITY); 
     layout.add(new ForceDirectedLayout("socialnet")); 
     /* use a force-directed graph layout with default parameters */ 

     layout.add(new RepaintAction()); 
     /* repaint after each movement of the graph nodes */ 

     vis.putAction("layout", layout); 
     /* add the laout actions to the visualization */ 

     // 5. add interactive controls for visualization 

     Display display = new Display(vis); 
     display.setSize(700, 700); 
     display.pan(350, 350); // pan to the middle 
     display.addControlListener(new DragControl()); 
     /* allow items to be dragged around */ 

     display.addControlListener(new PanControl()); 
     /* allow the display to be panned (moved left/right, up/down) (left-drag)*/ 

     display.addControlListener(new ZoomControl()); 
     /* allow the display to be zoomed (right-drag) */ 

     // 6. launch the visualizer in a JFrame 

     JFrame frame = new JFrame("prefuse tutorial: socialnet"); 
     /* frame is the main window */ 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     frame.add(display); 
     /* add the display (which holds the visualization) to the window */ 

     frame.pack(); 
     frame.setVisible(true); 

     /* start the visualization working */ 
     vis.run("colour"); 
     vis.run("layout"); 

    } 
} 


+0

HIは、 私の質問はここで回答されています も https://sourceforge.net/projects/prefuse/forums/forum/343013/topic/4035245/index/page/1 私はランニングを発見しました次のページの例を参照してください。しかし、基本的なグラフサーチャーにとっては少し複雑です: http://goosebumps4all.net/34all/bb/showthread.php?tid=17 もし私がいくつかのコード行を与えなければならない場合は、キーラインはここにあります:

... graph = new GraphMLReader().readGraph("socialnet.xml"); ... Table n = graph.getNodeTable(); Table e = graph.getEdgeTable(); Graph g_new = new Graph(n, e, true); 
ご注意いただきありがとうございます。 – merve

答えて

2

あなたはプレフューズフォーラムで与えられた答えに満足している場合、私はあなたのコメントではよく分かりません。したがって、私はコードを演奏し、以下の変更であなたが望む動作を得ることができました。

入力XMLを変更して、グラフ要素のedgedefaultを指定しました。

... <graph edgedefault="directed"> ... 

は、その後のコードで、私はちょうど私が上矢印オフにするか、それらが前方または後方に表示するために得ることができることを確認するために、異なるEdgeRendererのedgetypesとarrowtypesと共演しました。私も曲線を試しました。例:

edgeRenderer = new EdgeRenderer(prefuse.Constants.EDGE_TYPE_CURVE, prefuse.Constants.EDGE_ARROW_FORWARD); 

もう一度、この回答を他のフォーラムで取得している可能性があります。

0

私は同じ質問につまずいた。入門しているプレフューズライブラリの将来のユーザーの場合:さらに以下

ColorAction arrowColor = new ColorAction("tree.edges", VisualItem.FILLCOLOR, ColorLib.gray(200)); 

と: あなたはRadialGraphView例に矢印を追加したい場合は、ditkinで述べた変更を行い、行を追加する必要があります。

// create the filtering and layout: 
[...] 
filter.add(arrowColor); // add this one 

基本的に答えはsourceforgeスレッドですが、ここで解決策を提供したいと思います。 merveのコードには、これらの命令が含まれています。

関連する問題