2010-11-29 6 views
8
  1. Mathematica 8에서 그래프 오브젝트를 수정하는 방법을 알고있는 사람이 있습니까? 특히 그래프를 마우스 오른쪽 버튼으로 클릭 할 때와 동일한 기능을 얻는 방법.Mathematica 8.0의 새로운 그래프

  2. 새로운 그래프 함수 중 일부는 Combinatorica과 충돌합니다. Mathematica가 함수의 기본 제공 버전을 사용하도록 강제 할 수 있습니까? 즉, CompleteGraph의 Combinatorica 버전을 가져 오는 Needs["Combinatorica"]을 수행 한 후에 내장 된 CompleteGraph에 액세스 할 수있는 방법이 있습니까?

그래프에서 상황에 맞는 메뉴를 사용하면 GraphStyle 및 GraphLayout을 변경할 수 있으며이를 프로그래밍 방식으로 변경하고 싶습니다. 다음은 그래프의 GraphStyle이

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

그러나, 그 그리드 그래프에 브렛의 조리법을 시도 VertexCoordinates

같은 원래의 그래프의 옵션을 잊어 객체 나 변경을 발견 한 방법이다

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

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

새로운 그래프 객체는 Mathematica 8에서 원 자성을 갖습니다. 따라서 문자열이나 이미지처럼 일반적인 방식으로 조작 할 수있는 내부 구조는 없습니다. 특히 특이한 점은 새 오브젝트가 인 FullForm을 가지고 있으며 심볼릭하게 조작 할 수있는 것처럼처럼 보입니다. 하지만 외형은 속일 수 있습니다. 패턴 일치에 접근 할 수없는 표현 일뿐만 아니라, 복사하여 붙여 넣기를 사용하여 Mathematica로 다시 보내면 올바른 그래프 사양이 아닙니다.

그래프 구조를 조작하는 데 사용할 수있는 몇 가지 해킹을 발견했습니다.당신은이 같은이 기능을 사용할 수 있습니다

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

: 첫 번째 시도는 그래프의 특성을 추출하기 위해 "공식적인"채널을 사용하는 방법

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

이 기능은 그러나 VertexList를 사용 EdgeList를PropertyValue 그래프 속성을 추출합니다. 유감스럽게도이 방법으로는 일부 옵션을 복구 할 수 없습니다. 예를 들어 그래픽 옵션 ImageSize은이 방법을 사용하면 손실됩니다. 대부분의 그래프 옵션을 유지하기 위해 표시되는 두 번째 함수는 더 양호하게 수행하고, 그 나쁜 성질에도 불구

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

:

이보다 더 가증 해킹 FullForm의 의사 상징적 표현을 이용한다. 나는 "가장"이라고 말합니다. 사실 래퍼, 모양 함수 및 그래프 속성과 같은 더 복잡한 옵션을 아직 실험하지 않았기 때문에 말입니다. Wolfram이 그래프 객체의 표현을 변경하거나 (또는 ​​가능한 모든 그래프 정의에 대해 작동하는 경우에도)이 메소드가 변경되지 않을 것이라는 보장은 없습니다.

해킹없이이를 수행하는 방법이 있어야합니다. 나는 그래프 오브젝트의 완전한 상징적 인 표현을 줄 수있는 몇 가지 기능이 숨어 있다는 희망을 여전히 갖고있다.

Combinatorica 패키지를로드 한 후에 발생하는 심볼 충돌에 대해서는 패키지 이름을 명시 적으로 지정하여 원래 심볼에 액세스 할 수 있습니다. 시스템 `CompleteGraph. 무서운 경고를 실행하여

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

내가 볼프람 효과적으로 Combinatorica 패키지를 비하되어 있습니다 : 당신이 기호는 Combinatorica 기호보다 우선 시스템을 선호하는 경우 패키지 검색 순서를 변경하려면 다음 식을 계산할 수 패키지를로드 할 때 오류 메시지가 나타납니다.

+0

경우에만 알림을 보냅니다 때문에 우연히이 업데이 트를 발견했습니다 래퍼도 작동하는 것 같습니다 –

+0

우수 정보입니다. +1 –

3

Graph에 올바른 좌표를 재 할당 fixCoordinates 기능이 하나 개의 솔루션입니다, 당신은 할 수 사용이 컨텍스트를 사용하여 두 개의 구별해야한다. 따라서 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-graphplot-graphic/4250069 # 4250069 –

+0

GridGraph에서 꼭지점을 순열하지 않도록 해답을 업데이트했습니다. –