哪个开源Java图形绘制框架用于具有以下要求的网络图?该图表将少于1000个节点.
1)具有平行边缘
2)在单个图形内的有向和无向边缘
3)由图像表示的节点
4)用户与节点和边缘的交互
5)动态地添加/删除节点和边缘
6)在节点和边缘上的多个标记,不同的级别用户可以关闭/打开标签.(如绘制图层并关闭/打开图层)
7)不同的布局算法,以显示星形,环形,网格拓扑
我评估了JUNG和Prefuse.这是我为每个要求找到的.
1)当JUNG支持时,Prefuse不能显示平行边缘.可以预操作代码来显示平行边缘吗?由于这涉及基本的数据级别更改,我相信通常的自定义呈现更改会更加困难.
2)我没有在prefuse和JUNG中找到任何对组合图(有向和无向边)的引用.有没有人知道呢?
3)Prefuse和JUNG都很容易
4)prefeuse和JUNG再次为用户交互提供支持.
5)prefuse和JUNG都支持它.重绘图表时每个框架如何执行?我在另一篇文章中看到,prefuse在动态更新方面效果不佳(Prefuse Toolkit:动态添加节点和边缘)
6)这归结为修改图形并重新绘制它.所以问题变得与5)相同
7)JUNG和prefuse都有多种布局算法.但是当我尝试在JUNG和Prefuse中使用FruchtermanReingoldLayout显示相同的数据集时,我会得到不同的显示.有什么想法吗?虽然Prefuse中的大多数布局算法都是基于JUNG实现的,Prefuse中的布局算法似乎显示出比JUNG更好的布局(渲染也更好).PreFuse布局(如ForceDirectedLayout/FruchtermanReingoldLayout和CircleLayout)直接映射到星形,圆形,网格拓扑.
在这些要求之外,prefuse对表达式和查询语言有很好的支持,但看起来它不像JUNG那样积极开发.哪一个有更好的可视化?关于哪一个适合以及如何克服缺点的任何建议?
我可以使用其他任何框架吗?
我正在寻找一个分发jung2包的maven存储库.不幸的是,我无法找到有关其位置的任何信息.
更新:我已经包含了cental存储库repo1.
<repository>
<id>central</id>
<name>Maven Repository Switchboard</name>
<layout>default</layout>
<url>http://repo1.maven.org/maven2</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
Run Code Online (Sandbox Code Playgroud)
但我仍然得到一个错误:10/4/10 1:31:57 PM CEST:缺少神器net.sf.jung:jung2:jar:2.0.1:编译.我在Mac OSX上使用Maven 3.0-SNAPSHOT.
Update2:Jung2依赖声明:
<dependency>
<groupId>net.sf.jung</groupId>
<artifactId>jung2</artifactId>
<version>2.0.1</version>
<type>pom</type>
</dependency>
Run Code Online (Sandbox Code Playgroud)
添加pom后,没有错误消息.不幸的是,maven没有检索jung2模块的罐子.
[解决]我还添加了对jung-graph-impl的依赖,我现在可以在我的项目中使用jung2:
<dependency>
<groupId>net.sf.jung</groupId>
<artifactId>jung-graph-impl</artifactId>
<version>2.0.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud) 如何更改Jung Visualization Library中特定顶点的大小?
我正在阅读文档,但我不是非常熟悉java,我找不到任何好的例子.
我无法显示具有自动布局的JGraphX.
我的程序(下面的代码)创建一个这样的输出:

一个足够的结果可能看起来像这样(我用手移动它们):

我不必坚持JGraphX.我还测试JUNG和JGraphT.但到目前为止,这是我最好的结果.我需要的是我的数据视图,其上有定向的eges和一些标签.
我制作了一个示例代码,展示了它是如何创建的.它类似于http://forum.jgraph.com/questions/4810/how-to-layout-nodes-automatically-using-fast-organic-layout.有一个评论从2012年,提到相同的问题"[...]但是我注意到节点有时重叠,你知道一种方法来解决这个问题,我已经玩了属性,它似乎很随意.一般来说如何改善外观的任何建议?"
public class Test extends JFrame {
public static void main(String[] args) {
JFrame f = new JFrame();
f.setSize(800, 800);
f.setLocation(300, 200);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final mxGraph graph = new mxGraph();
mxGraphComponent graphComponent = new mxGraphComponent(graph);
f.getContentPane().add(graphComponent, BorderLayout.CENTER);
f.setVisible(true);
Object parent = graph.getDefaultParent();
graph.getModel().beginUpdate();
try {
Object start = graph.insertVertex(parent, "start", "start", 100,
100, 80, 30);
for (int i = 0; i < 10; i++) {
Object a = graph.insertVertex(parent, …Run Code Online (Sandbox Code Playgroud) 我现在被Java库Jung困住了.
我显示顶点和边,只有我找不到顶点着色的任何函数,我需要顶点的值,而不是鼠标.
import edu.uci.ics.jung.algorithms.layout.FRLayout;
import edu.uci.ics.jung.algorithms.layout.Layout;
import edu.uci.ics.jung.graph.Graph;
import edu.uci.ics.jung.visualization.BasicVisualizationServer;
import edu.uci.ics.jung.visualization.decorators.PickableVertexPaintTransformer;
import edu.uci.ics.jung.visualization.decorators.ToStringLabeller;
import edu.uci.ics.jung.visualization.renderers.DefaultVertexLabelRenderer;
import edu.uci.ics.jung.visualization.renderers.Renderer.VertexLabel.Position;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
import org.apache.commons.collections15.Transformer;
import org.apache.commons.collections15.functors.ConstantTransformer;
public class Design {
public Graph<String, Integer> g;
public Design() {
this.g = ProjectTools.readNet("SmallTown.net");
}
public static <Paint> void main(String[] args) {
Design sgv = new Design();
Layout<Integer, String> layout = new FRLayout(sgv.g);
layout.setSize(new Dimension(800,800));
BasicVisualizationServer<Integer, String> vv =
new BasicVisualizationServer<Integer, String>(layout);
Transformer<Integer,Paint> vertexPaint = new Transformer<Integer,Paint>() {
public Paint …Run Code Online (Sandbox Code Playgroud) 我是JUNG的新手.我尝试使用TreeLayout绘制树的图形,但树永远不会像真正的树一样出现.每次树看起来都不一样.如何使树看起来像普通树,其根部位于顶部,其余节点从其下降?
我正在使用jung直观地显示大型数据集(1000个节点)但是当我放大或缩小或移动节点时系统变得非常迟缓.反正有没有改进JUNG图形的渲染?
我写了一个小图形可视化类:
public void simpleGraph(SparseMultigraph<Vertex,SEdge> graph, String name) {
Layout<Vertex, SEdge> layout = new ISOMLayout(graph);
layout.setSize(new Dimension(800,800));
BasicVisualizationServer<Vertex, SEdge> vv = new BasicVisualizationServer<Vertex, SEdge>(layout);
vv.setPreferredSize(new Dimension(850,850)); //Sets the viewing area size
JFrame frame = new JFrame(name);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(vv);
frame.pack();
frame.setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)
如何为顶点和边添加标签?值存储在我的自定义顶点类中.我可以迭代布局或BasicVisualizationServer中的所有顶点并添加标签吗?
谢谢你的帮助!
我一直在寻找我的问题的解决方案,但没有什么是我想要的.
我想要做的是将整个JUNG图(使用自定义顶点和边渲染)保存到图像(PNG或JPEG).当我将VisualizationViewer保存到BufferedImage时,它只占用可见部分.我想保存整个图表,所以这不是一个选项.
有没有人知道如何将整个图形渲染成图像?
提前致谢!