2010-11-29 1 views
8
  1. 誰かがMathematica 8でグラフオブジェクトを修正する方法を考え出したことはありますか?特に、グラフを右クリックしたときと同じ機能を得る方法。Mathematica 8.0の新しいグラフ

  2. 新しいグラフ関数のいくつかはCombinatoricaと衝突しますが、Mathematicaに組み込みバージョンの関数を使用させる方法はありますか?つまり、CompleteGraphのCombinatoricaバージョンをインポートするNeeds["Combinatorica"]を実行した後で、内蔵のCompleteGraphにアクセスする方法はありますか?

1を明確にするために、グラフ上のコンテキストメニューを使用すると、GraphStyleとGraphLayoutを変更することができます、と私はプログラム的にそれらを変更できるようにしたいと思います。ここで私はグラフのGraphStyleが

g = GridGraph[{4, 4}]; 
BooleanGraph[Or, g, g, GraphStyle -> "DiagramBlack"] 

オブジェクトに変更することが分かっ一つの方法は、しかし、それは、グリッド、グラフ上のブレットのレシピ

g = GridGraph[{3, 2}, ImageSize -> Tiny] 
coords = PropertyValue[{g, #}, VertexCoordinates] & /@ VertexList[g]; 
Graph[EdgeList[g], GraphStyle -> "BasicGold", 
VertexCoordinates -> coords, ImageSize -> Tiny] 

http://yaroslavvb.com/upload/save/mathematica-change-style.png

をしようと VertexCoordinates

のような元のグラフのオプションを忘れています

Mathematicaがグラフ操作でグラフ座標をどのように扱うかにバグがあるようです。 permutes座標の下の最初の行は、おそらく座標に関連する内部警告を出します。各頂点に非整数の頂点と明示的な座標を使用しても効果はありません。一つの解決策は、店舗にある世界的に調整し、#2のために変更

VertexDelete[GridGraph[{3, 3}], 1] 
NeighborhoodGraph[VertexDelete[GridGraph[{3, 3}], 1], 2] 
+2

Re。 2:System'CompleteGraph? –

+0

Re#2、あなたはコンテキストパスからCombinatoricaを削除することができます - 次に、すべてのCombinatorica関数を明示的な完全パスで参照してください... – Simon

+0

コンテキストパスからどのように削除しますか? –

答えて

14

新しいGraphオブジェクトはMathematica 8ではアトミックである。したがって、文字列や画像のように、通常の方法で操作できる内部構造を持たない。特に珍しいことは、新しいオブジェクトにFullFormがあり、のように見えることが象徴的に操作できるようなことです。しかし、外見は欺くことができます - パターンマッチングではその表現にアクセスできないだけでなく、コピー&ペーストを使ってMathematicaに戻すと有効なグラフ仕様でもありません。

私は、グラフ構造を操作するために使用できるいくつかのハックを発見しました。グラフのプロパティを抽出する「公式」のチャンネルを使用する最初の試み:

adjustedGraph[g_, newOptions___] := 
    Graph[ 
    [email protected], 
    [email protected], 
    newOptions, 
    [email protected]@Table[p -> PropertyValue[g, p], {p, PropertyList[g]}] 
    ] 

あなたはこのように、この機能を使用することができます。この機能はVertexListをEdgeListを使用しています

g = GridGraph[{4, 4}, GraphStyle -> "DiagramBlack", ImageSize -> Tiny] 
adjustedGraph[g, GraphStyle -> "BasicGold"] 

PropertyValueグラフのプロパティを抽出します。残念ながら、この手段では一部のオプションを回復できません。たとえば、グラフィックオプションImageSizeは、この方法では失われます。ほとんどのグラフオプションを保持するように見えるように、この第二の機能は、より良好に行い、その邪悪な性質にもかかわらず

adjustedGraph2[g_, newOptions___] := 
    "[email protected]" ~~ ToString[g, InputForm] // 
    ToExpression // 
    #[[1, 3]] & // 
    Graph[[email protected], [email protected], newOptions, Sequence @@ #] & 

アンさらに凶悪なハックは、FullFormの擬似記号表現を利用します。ラッパー、形状関数、事後に割り当てられたグラフプロパティのようなもっと難解なオプションをまだ試していないので、私は「ほとんど」と言います。 Wolframがグラフオブジェクトの表現を変更する(あるいは、すべての可能なグラフ定義に対して今でも機能する)ので、このメソッドが変更されないという保証はありません。

ハッキングなしでこれを達成する方法があるはずです。私はまだグラフオブジェクトの完全な象徴的表現を与える潜在的な機能があることを願っています。

Combinatoricaパッケージの読み込み後に発生するシンボルの競合については、パッケージ名を明示的に指定することによって元のシンボルにアクセスすることができます。 System`CompleteGraph。怖い警告を発行することにより、

$ContextPath = 
    $ContextPath /. 
    {x___, c : "Combinatorica`", y___, s:"System`", z___} :> {x, y, s, c, z} 

私はヴォルフラムが効果的Combinatoricaパッケージを卑下していることに注意してください:あなたはシンボルがCombinatoricaシンボルよりも優先されるシステムを持っていることを好む場合は、パッケージの検索順序を変更するには、次の式を評価できパッケージを読み込むと、エラーメッセージが表示されます。

+0

ラッパーでも動作するようです。 –

+0

優れた情報。 +1 –

3

Graphへの正しい座標を再割り当てするfixCoordinates機能を持っている、あなたは可能な使用は、コンテキストを使用して2つを区別する必要があります。したがって、System`CompleteGraph[5]は新しいV8グラフを作成し、Combinatorica`CompleteGraph[5]は古いCombinatoricaグラフを作成します。

#1で何を意味するのかはっきりしませんが、グラフをグラフィックスに変換すると、以前と同じようにコンテキストメニューが表示されます。私はこれが改善であると確信していません。

4

以下は、元のグラフの頂点座標を保持します。

g = CompleteGraph[5]; 
coords = PropertyValue[{g, #}, VertexCoordinates] & /@ VertexList[g]; 
Graph[VertexList[g], EdgeList[g], GraphStyle -> "BasicGold", 
VertexCoordinates -> coords] 

Mathematica graphics

私はそれを試していないが、同様に他のオプションを保存することができ似た何かを思うだろう。

+0

例は –

+0

で更新された頂点の順番を変更するように見えるこの動作はGraphPlotに似ていますが、ときどき頂点順の並べ替えが終わりますhttp://stackoverflow.com/questions/4245946/vertexcoordinate-rules-and-vertexlist-from-graphplot-graphic/4250069#4250069 –

+0

GridGraphの頂点を置換しないという答えを更新しました。 –

関連する問題