可视化二分图

7

有人可以推荐一个在C#中可视化二分图的库或代码吗?

Graph#似乎不直接支持这种类型的图(但是有一些支持来解开顶点的支持)。

我想创建像这个二分图那样的图形,并在节点中添加一些文本。节点具有相同的宽度和高度将是理想的。

如果存在WPF控件,则会非常完美,因为它适用于graph#。 也许甚至存在XAML定义? 作为替代方案:报告窗口也可以非常好。

可能有更多Graph#经验的人可以提供如何使用Graph#实现此目的的提示。

尝试了一下NodeXL,但似乎不是完美的解决方案, 因为节点似乎不能太多地进行修改。也许有人可以提供 更好的解决方案。已经与Soroush提供的NetworkView玩过。 目前,这最接近我想要的结果。

-更新- 尝试了Soroush Falahati共享的NetworkView。这似乎是一个很好的基础, 但还不如我需要的灵活。我有问题相信那里 没有库可以直接完成这些事情。 (NetworkView具有在控件中设置连接/边的出色功能 这使它比NodeXL更加强大)。也许Graph#甚至可以做得更多, 但目前我只尝试了这两个。


由于我也找不到,所以我在这里问了。自己编写是可能的,但它只是当前项目中的一点点花哨,我不想花太多时间。如果存在,我会使用它,如果不存在,我稍后会编写一个(我认为大约需要三到四个月的时间)。 - Mare Infinitus
我会发布它,但首先看看 @edallme 是否能更好地帮助你。 :) - Soroush Falahati
@SoroushFalahati 请恢复您的答案。目前,NetworkView是最接近我想要的东西。我相信在我自己实现它时,我会以它为基础。 - Mare Infinitus
实际上,其中一位版主将其删除了,因为它除了链接到其他地方之外没有任何内容。所以忘了它吧,我无法恢复它。 :) - Soroush Falahati
由于它仍然是最有价值的答案,我真的很想将赏金奖励给你。也许你可以提供另一个答案。NodeXL仍然存在,但我认为使用它比使用NetworkView更难实现某些功能。 - Mare Infinitus
显示剩余6条评论
6个回答

2

没有使用jQuery,只用C#和WPF。非常感谢您的回答! - Mare Infinitus
难道没有比这个更好的答案吗?这个答案没有帮助...不应该得到赏金。 - Mare Infinitus

2
您可以在NodeXL中近似呈现您的二分图可视化,并通过消除边交叉来改进它。我使用您的示例二分图,在下面的图像中,按其侧(u或v)对节点进行了着色。它们使用Sugiyama算法布置,该算法最小化边交叉。我在Excel 2007-2013的交互式NodeXL模板中执行此操作,但所有这些功能都应作为独立的NodeXL C#和WPF类库提供。截至本帖发布时,当前库可在此处下载。

Bipartite graph in NodeXL Sugiyama layout

我还尝试过NodeXL的组盒布局,以分离组并在网格中单独显示它们,但效果不佳。

NodeXL bipartite graph

免责声明:我是NodeXL项目的顾问。


当然可以!您可以通过手动输入正确的单元格来完成,或者使用名为“自动填充列”的功能,该功能可以从表中的任何其他数据列创建标签。 - edallme
找到了NodeXLControl,它似乎很符合我的需求。但是没有演示项目可以看看它的工作原理吗? - Mare Infinitus
有这些类库,但是如果没有演示和文档无法使用时,要得到结果并不容易。(在chm部分总是出现“您似乎没有网络连接”的提示)。也许有更好的文档,但chm并不是很好。 - Mare Infinitus
找到问题所在了:是因为我把它放在一个包含“#”字符的文件夹中(实际上是C#)。 - Mare Infinitus
你的回答是最努力的,所以你获得了奖励。但我会在业余时间里尝试一下来自codeproject的那个。也许NodeXL将在未来版本中加入。 - Mare Infinitus
显示剩余8条评论

1

肯定有。仍在玩NetworkView,认为这是可视化二分图的一个非常好的基础。 - Mare Infinitus

1
  1. yFiles WPF是一款针对Windows Presentation Foundation (WPF)应用程序的广泛的.NET类库。 其一流的UI控件可用于查看和编辑图表,使您能够通过单击按钮自动排列复杂的图形、图表和网络。 我们专为基于Windows Forms的应用程序打造的图表库是yFiles.NET。

  2. Graph#是一个图形布局框架。 它包含一些布局算法和适用于WPF应用程序的GraphLayout控件。

  3. 使用WPF可视化循环依赖关系的图表


0

如果你可以在Windows Forms中完成它,那么你可以使用NShape。由于源代码是可用的,如果需要的话,你可能可以将其移植到WPF。这可能比从头开始编写要好。或者,你可以托管一个WinForms控件来获得所需的功能。虽然不如纯WPF解决方案那样好。


0

D3.js是一种基于数据操作文档的JavaScript库。D3使用HTML、SVG和CSS帮助您将数据呈现出来。D3强调Web标准,使您可以充分利用现代浏览器的全部功能,而不必绑定专有框架,结合强大的可视化组件和数据驱动的DOM操作方法。

D3允许您将任意数据绑定到文档对象模型(DOM),然后对文档应用数据驱动的转换。例如,您可以使用D3从数字数组生成HTML表格。或者,使用相同的数据创建一个交互式SVG条形图,具有平滑的过渡和交互。

D3不是一个试图提供每个可能特性的庞大框架。相反,D3解决了问题的关键:基于数据高效地操作文档。这避免了专有表示,并提供了非凡的灵活性,暴露了Web标准(如CSS3、HTML5和SVG)的全部功能。D3的开销极小,非常快速,支持大型数据集和交互和动画的动态行为。D3的函数式风格通过各种组件和插件实现代码重用。

http://d3js.org/

http://mbostock.github.com/d3/talk/20111116/force-collapsible.html


2
D3用于可视化,而不是绘图。Matplotlib非常适合通过调用pylab.hist(data)之类的函数轻松生成出版质量的图表,而D3更为通用。基本概念是创建一组对象(通常是SVG中的形状),并将数据绑定到它们上面。您使用数据来操作它们的属性,因此可以根据输入数据向量在屏幕周围放置例如矩形等形状。D3制作简单图表有点麻烦,但当您想要做一些更自定义的东西时,它真的很出色。 - zandi
1
D3非常适合动画和交互:使用D3几乎可以轻松实现动画。还记得那些矩形吗?只需将新的数据向量绑定到它们上面,然后使用内置的过渡效果,使形状轻松滑入其新位置(或大小、颜色等)。交互性源于D3是用JavaScript实现的,允许您在键盘或鼠标输入响应时发生这些转换。 - zandi
2
D3是一种神奇的技术,我可以向世界上任何人发送一个HTML文件,他们的浏览器中的可视化效果都会完美呈现。唯一的限制是必须使用符合HTML5、CSS3和嵌入式JavaScript标准的浏览器(这使得最近版本的Firefox、Chrome、Safari甚至Internet Explorer 9+都可以)。 - zandi
好的...我看到你喜欢D3。那么只需要解决“WPF中的Javascript”问题,对吧? - Mare Infinitus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接