Wolfram mathematica 如何使用图边的权重标记图边

Wolfram mathematica 如何使用图边的权重标记图边,wolfram-mathematica,mathematica-8,Wolfram Mathematica,Mathematica 8,警告当Mathematica V8.0是最酷的孩子时,我发布了这个问题。从9.0.1版开始,该错误已被解决 国家: 然而: CompleteGraph[4, EdgeWeight -> Range@6, VertexShapeFunction -> "Name", EdgeLabels -> "EdgeWeight"] 结果: 所以,没有边缘标签。。。我想这是一只虫子 我使用了一个令人讨厌的结构,比如: adj = {{\[Infinity], 1, 1, 1, 1

警告当Mathematica V8.0是最酷的孩子时,我发布了这个问题。从9.0.1版开始,该错误已被解决

国家:

然而:

CompleteGraph[4,
 EdgeWeight -> Range@6,
 VertexShapeFunction -> "Name",
 EdgeLabels -> "EdgeWeight"]
结果:

所以,没有边缘标签。。。我想这是一只虫子

我使用了一个令人讨厌的结构,比如:

adj = {{\[Infinity], 1, 1, 1, 1}, {1, \[Infinity], 2, 2, 2}, 
       {1, 2, \[Infinity], 2, 2}, {1, 2, 2, \[Infinity], 2}, 
       {1, 2, 2, 2, \[Infinity]}};

WeightedAdjacencyGraph[adj,
    VertexShapeFunction -> "Name", 
    EdgeLabels -> 
     MapThread[Rule,{EdgeList@#,AbsoluteOptions[#, EdgeWeight]/.{_ -> x_}-> x}], 
    GraphHighlight -> FindEdgeCover[#]]  
                                        &@ WeightedAdjacencyGraph[adj]


更好的主意?

解决方案很简单。升级到V8.0.1:)

至少这是我所拥有的,它在那里起作用。(windows 7)

顺便说一句,我不知道边缘上的标签是否正确,但至少它是正确的
将它们放在图形上,与图像不同)。

对于常规的
图形地块
,您将需要使用
边缘衍生函数
()的稍微复杂的解决方案。假设有一个邻接矩阵,其中元素也是(方向)权重

这里有一些顶点的标签,假设您正在绘制国际银行间风险敞口的网络图(原始的有更多的国家!)

下面是您需要的。技巧是使用零件规范内的
#2
部分引用邻接矩阵,引用
nums
的正确元素,以及
均值[#1]
将标签定位在边缘中点。插槽
#1
似乎保存了顶点的坐标。

GraphPlot[lillums,directedges->True,
VertexRenderingFunction->({White,EdgeForm[Black],Disk[#,.04],
黑色,文本[名称[#2]],#1]}&),
EdgeRenderingFunction->({绝对厚度[2],红色,
箭头[0.02],箭头[1,0.05],黑色,
文本[Round@Abs[(lillums[#2[[1]],#2[[2]]]]]
百合花[#2[[2]],#2[[1]]]),意思是[#1],
背景->黄色]}&),顶点标记->真,
图像大小->600,
PlotLabel->样式[“打印标签”,粗体,14,FontFamily->“Arial”]]

edgelabel
工作正常<代码>边灯没有。

从Belisarius的第二个例子中可以明显看出,问题在于
EdgeWeights
而不是
edgelabel

这里有一些额外的证据
EdgeLabels
非常乐意正确显示各种标签。但当您要求mma显示“EdgeWights”时,无论您在其中存储了什么,它都会错误地显示1

CompleteGraph[4, VertexShapeFunction -> "Name",
 EdgeLabels -> {
   UndirectedEdge[1, 2] -> "hello", 
   UndirectedEdge[1, 4] -> "goodbye", UndirectedEdge[2, 3] -> 55, 
   UndirectedEdge[3, 4] -> \[Pi]/2, 
   UndirectedEdge[4, 2] -> 
   "\!\(\*UnderoverscriptBox[\(\[Sum]\), \(i = 0\), \(26\)]\)(-1\!\(\
   \*SuperscriptBox[\()\), \(i\)]\)\!\(\*SuperscriptBox[\(\[Theta]\), \
   \(n - i\)]\)", UndirectedEdge[1, 3] -> {a, b, c}}]

该错误不是
CompleteGraph
独有的
Graph
GridGraph
也有同样的问题。

EdgeLabels->“EdgeWight”在8.0.4中仍然不起作用,似乎不再出现在文档中。但是,有一种解决方案确实有效:

lilnums = {{0, 2., 1., 3., 0, 6.}, {0, 0, 1., 2., 0, 0}, {1., 8., 0, 2., 0, 2.},
  {10., 13., 7., 0, 0, 10.}, {0, 0, 0, 0, 0, 0}, {4., 1., 1., 2., 2., 0}}
names = {"AT", "AU", "CA", "CH", "CL", "ES"};
g = WeightedAdjacencyGraph[names, lilnums /. {0 -> \[Infinity]}, 
  VertexShapeFunction -> "Name" , ImagePadding -> 15];
SetProperty[g, EdgeLabels -> MapThread[#1 -> #2 &, 
  {EdgeList[g], PropertyValue[g, EdgeWeight]}]]

你有没有检查过使用邻接矩阵是否有效,矩阵中的数字是权重?我有一个笔记本(我想在家里),它展示了如何创建线厚与权重成比例的加权图——这是我所在领域中非常流行的数据表示方式。@belisarius&四个字母的单词:
Graph
不幸的是,仍然存在一些严重的问题,请小心并验证<代码>图形[]对象偶尔会处于损坏状态,导致某些函数给出错误结果或崩溃。我在移除顶点和同构测试方面遇到了一些问题。@Szabolcs我很少使用图形功能,每次我都要在Mma中选择不相交实现的复杂性中导航。我真的希望他们能在v9中解决这个问题!有趣的是,我的8.01/win7-64版本上的EdgeLabels文档页面不包含“EdgeWight”值。@belisarius似乎问题在于
EdgeWights
而不是
EdgeLabels
。(你可能已经意识到了。你的
MapThread
基本上是动态生成权重的。)我在Mac OS X的8.0.1中得到了相同的输出,但我不认为权重在任何情况下都应该是1,因为在他的例子中
范围
构造。@belisarius这也是我得到的,但我同意维尔比娅的观点,边缘的数字似乎不正确。@Nasser确实很奇怪<代码>边灯对于
图形
也不能正确显示(在8.0.1中)。尝试:
图形[{1\[Undirectedge]2,2\[Undirectedge]3,3\[Undirectedge]1},EdgeWight->{2,3,4},EdgeLabels->“EdgeWight”]
(可能是学究点)。对于权重大于1的情况,此绘图包含多个边标签(和边),每个标签(和边)一个接一个地放置在另一个上,这样的想法正确吗?(可能是)。例如,出于打印目的,是否会在完全相同的位置渲染每一个?(我在另一个领域也遇到过类似的边缘标签问题,因此很感兴趣)@TomD-我不这么认为。如果您将
符号[lilnums]
作为第一个参数,并且/或者如果使用了选项
MultiedgeStyle->None,则绘图相同。时间也一样。@Verbeia。谢谢你的澄清。我忽略了这一点。查看聊天,看看我是如何做语法高亮显示的。事实上,所有图形函数都有这个错误。谢谢这个很好用。使用相同的技术,我修改了边样式,使线的厚度与边的重量成比例。只需设置这个附加属性:
EdgeStyle->MapThread[#1->#2&,{EdgeList[g],AbsoluteThickness[#]&/@(1+3*重新缩放[PropertyValue[g,edgewight]])
CompleteGraph[4, VertexShapeFunction -> "Name",
 EdgeLabels -> {
   UndirectedEdge[1, 2] -> "hello", 
   UndirectedEdge[1, 4] -> "goodbye", UndirectedEdge[2, 3] -> 55, 
   UndirectedEdge[3, 4] -> \[Pi]/2, 
   UndirectedEdge[4, 2] -> 
   "\!\(\*UnderoverscriptBox[\(\[Sum]\), \(i = 0\), \(26\)]\)(-1\!\(\
   \*SuperscriptBox[\()\), \(i\)]\)\!\(\*SuperscriptBox[\(\[Theta]\), \
   \(n - i\)]\)", UndirectedEdge[1, 3] -> {a, b, c}}]
lilnums = {{0, 2., 1., 3., 0, 6.}, {0, 0, 1., 2., 0, 0}, {1., 8., 0, 2., 0, 2.},
  {10., 13., 7., 0, 0, 10.}, {0, 0, 0, 0, 0, 0}, {4., 1., 1., 2., 2., 0}}
names = {"AT", "AU", "CA", "CH", "CL", "ES"};
g = WeightedAdjacencyGraph[names, lilnums /. {0 -> \[Infinity]}, 
  VertexShapeFunction -> "Name" , ImagePadding -> 15];
SetProperty[g, EdgeLabels -> MapThread[#1 -> #2 &, 
  {EdgeList[g], PropertyValue[g, EdgeWeight]}]]