7

警告!Mathematicav8.0が一番かっこいい子供だったときに質問を投稿しました。バグはバージョン9.0.1で解決されました

The help for EdgeLabels状態:

ここに画像の説明を入力してください

でも:

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]

ここに画像の説明を入力してください

より良いアイデア?

4

4 に答える 4

9

通常の場合、 (ドキュメントGraphPlot)を使用したもう少し複雑なソリューションが必要になります。要素が(方向)重みでもある隣接行列があるとします。EdgeRenderingFunction

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"}

以下はあなたが必要とすることをします。#2秘訣は、パーツ仕様内のパーツを使用して隣接行列に戻る参照、の正しい要素を参照することnums、およびMean[#1]エッジの中点にラベルを配置することです。スロット#1は頂点の座標を保持しているようです。

GraphPlot[lilnums, DirectedEdges -> True, 
 VertexRenderingFunction -> ({White, EdgeForm[Black], Disk[#, .04], 
 Black, Text[names[[#2]], #1]} &), 
 EdgeRenderingFunction -> ({AbsoluteThickness[2], Red, 
 Arrowheads[0.02], Arrow[#1, 0.05], Black, 
 Text[Round@ Abs[(lilnums[[#2[[1]], #2[[2]]]] + 
   lilnums[[#2[[2]], #2[[1]]]])], Mean[#1], 
  Background -> Yellow]} &), VertexLabeling -> True, 
 ImageSize -> 600,  
  PlotLabel -> Style["Plot Label", Bold, 14, FontFamily -> "Arial"]]

ここに画像の説明を入力してください

于 2011-09-12T10:25:43.560 に答える
5

EdgeLabels-> "EdgeWeight"は8.0.4でも機能せず、ドキュメントに含まれていないようです。ただし、これが機能する1つのソリューションです。

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]}]]
于 2012-02-25T20:22:18.433 に答える
4

EdgeLabels正常に動作します。EdgeWeightsではない。

ベリサリウスの2番目の例から、問題EdgeWeightsEdgeLabels

ここにいくつかの追加の証拠があります。EdgeLabelsさまざまなラベルが正しく表示されます。しかし、mmaに表示を要求すると"EdgeWeights"、そこに何を保存したかに関係なく、誤って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}}]

EdgeWeights.png

バグはに固有のものではありませんCompleteGraph。 同じ問題がありますGraphGridGraph

于 2011-09-14T01:12:54.743 に答える
3

解決策は簡単です。V8.0.1にアップグレードします:)

少なくともそれは私が持っているものであり、そこで機能します。(Windows 7)

ここに画像の説明を入力してください

ところで、端のラベルが正しいかどうかはわかりませんが、少なくとも、画像とは異なり、図に表示されます)。

于 2011-09-12T06:32:25.447 に答える