나는 곧 ggraphCRAN에 복종 할 것이다 – 나는 맹세한다! 그러나 그동안 나는 블로그의 중앙 부분을 설명하는 게시물의 범위 게시하여 큰 이벤트에 대한 기대를 구축하기로 결정했습니다 ggraph레이아웃 , 노드 , 모서리 및 연결 . 이 모든 게시물은 ggraph에 비 네트 (vignettes)로 포함되며 잠재적으로 약간 수정 된 형태로 포함됩니다. 우리가 그래프 구조를 그릴 때 가장 먼저 생각해야 할 모든 것을 시작하기 위해 …

레이아웃

매우 짧은 용어로, 레이아웃은 특정 그래프 구조를 그릴 때 노드의 수직 및 수평 배치입니다. 반대로 레이아웃 알고리즘은 그래프 구조 (및 잠재적으로 몇 가지 추가 매개 변수)를 가져 와서 노드의 수직 및 수평 위치를 반환하는 알고리즘입니다. 종종 사람들이 네트워크 시각화를 생각할 때, 강하게 연결된 노드가 가까운 곳에 플로팅되도록 시도되는 노드 – 에지 다이어그램을 생각합니다. 레이아웃은 하이브 플롯 및 트리 맵과 같이 다른 많은 것들도 가능합니다. 뒤에있는 주요 요인 중 하나는 ggraph그래프 구조의 시각적 표현을 지원하는 API를 개발하는 것이 었습니다. 이것을 달성하기 위해서는 먼저 레이아웃을 정의하는 유연한 방법이 필요합니다 …

ggraph() 과 create_layout()

레이아웃은 노드의 공간적 위치에 대한 전체적인 스펙이므로 플롯의 모든 레이어에 적용되므로 기하 구조 또는 통계에 대한 호출 외부에서 정의되어야합니다. 에서 ggraph그것은 종종 사용하여 플롯 초기화의 일부로 수행 ggraph()에 의도에 상응하는 기능 – ggplot(). 최소한으로 ggraph()지원되는 그래프 객체를 전달해야합니다 ggraph.

 


레이아웃을 지정하지 않으면 ggraph귀하를 위해 하나를 선택 하게됩니다 . 이는 신속하게 작동하고 실행되도록하기위한 것입니다. 레이아웃의 선택은 최종 결과가 전달할 내용에 큰 영향을 미치므로 사용자의 의도에 따라 결정되어야합니다. 지금부터 모든 호출 ggraph()에는 레이아웃 사양이 포함됩니다.

레이아웃 알고리즘이 추가 매개 변수를 받아들이는 경우 (대부분 수행) 호출에 다음 ggraph()과 같이 제공 될 수 있습니다 .

플롯을 생성하는 동안 레이아웃을 지정하는 것 외에도이를 사용하여 별도로 발생할 수 있습니다 create_layout(). 이 함수는 ggraph 호출에서 그래프 구조 대신 나중에 사용할 수 있는 것과 동일한 인수를 사용 ggraph()하지만 layout_ggraph객체를 반환합니다 .

반환 값을 조사해 보면 create_layout()실제로 data.frame노드 위치와 (가능한) 특성 임을 알 수 있습니다. 또한 원래의 그래프 객체는 다른 관련 정보와 함께 속성으로 전달됩니다.

 

그냥 그렇듯이 data.frame모든 표준 ggplot2호출은 노드를 처리하여 작동합니다. 여전히 geom_node_*()제공되는 패밀리의 사용은 ggraph데이터 구조의 어느 부분이 작업되고 있는지 명시 적으로 나타내므로 권장됩니다.

 

새로운 데이터 소스에 대한 지원 추가

상자가 부족 ggraph지원 dendrogram하고 igraph뿐만 아니라 기본적으로 오브젝트 hclust및 network상기 하나의 변환을 통해. 추가 클래스에 대한 지원이 필요하면 클래스에 특정 메소드 세트를 추가하여이를 수행 할 수 있습니다. ggraph소스 코드는 다음에 안내해야하지만 간략하게 아래 방법을 설명합니다.

create_layout.myclass()

이 메서드는 그래프 구조를 가져 와서 layout_ggraph객체를 반환 합니다. 객체는 data.frame올바른 클래스와 속성이 추가 된 객체입니다 . 클래스는 반드시 c('layout_myclass', 'layout_ggraph', 'data.frame')있어야하고 , 레이아웃이 원형 표현으로 변환되었는지 여부를 논리적 graph으로 나타내는 circular특성 뿐만 아니라 원래 그래프 객체를 보유 하는 속성 을 적어도 가져야합니다 . 그래프 구조에 노드에 대한 추가 정보가 포함되어 있으면이 data.frame열을 플로트 중에 액세스 할 수 있도록 열로 추가해야합니다 .

getEdges.layout_myclass()

이 메서드는의 반환 값을 취해 create_layout.myclass()그래프 구조의 모서리를 반환합니다. 반환 값은 가장자리 목록의 형태 여야하며 가장자리 에있는 끝 노드의 색인을 제공 하는 to및 from열이 있어야합니다. 또한 circular열을 포함해야하며 , 다시 레이아웃을 원형으로 간주해야하는지 여부를 나타냅니다. 그래프 구조에서 가장자리에 첨부 된 추가 데이터가있는 경우 이러한 데이터를 열로 추가해야합니다 data.frame.

getConnection.layout_myclass()

이 메소드는 두 개의 노드 사이의 최단 경로를 노드 색인 목록으로 리턴합니다. 이 방법은 무시할 수 있지만 geom_conn_*레이어에 대한 지원이 부족 합니다.

layout_myclass_*()

이 클래스에서 사용할 수 있어야하는 모든 유형의 레이아웃 알고리즘은 별도의 layout_myclass_layoutname()함수 로 정의해야합니다 . 이 함수는 또는에 인수 'layoutname'가 사용될 때 호출됩니다 . 최소한 새로운 클래스에는 정의 된 클래스가 있어야합니다 .layoutggraph()create_layout()layout_myclass_auto()

 

레이아웃이 풍부하다.

ggraph맨 먼저 가장 중요한 것은 여러 가지 레이아웃이 있습니다. 왜냐하면 igraph노드 에지 다이어그램을 그리는 데 많은 레이아웃을 구현 하기 때문에이 모든 것들을 사용할 수 있습니다 ggraph. 또한 ggraph드로잉 즐거움을위한 새로운 레이아웃 유형 및 알고리즘을 많이 제공합니다.

원형도에 대한 주석

일부 레이아웃은 표준 직교 투영과 극좌 영 투영에서 효과적으로 표시 될 수 있습니다. 표준 접근법 ggplot2은 예를 들어 좌표계를 변경하는 것입니다 coord_polar(). 이 접근 방식은 문법과 일치하지만 ggraph레이어가 원형에 응답하는 방법을 결정할 수 없으므로 최적이 아닙니다 . 이것의 주요한 예는을 사용하여 플롯에 직선을 그리려는 것 coord_polar()입니다. 대신 원형은 레이아웃 사양의 일부이며 circular데이터 의 열 이있는 레이어로 전달 되어 각 레이어가 적절하게 응답 할 수있게합니다. 때로는 동일한 레이아웃의 표준 및 순환 표현이 너무 자주 사용되어 다른 이름을 갖게됩니다. 에서ggraph그들은 같은 이름을 가지며 다음과 같이 circular설정 되었는지 여부 만 다릅니다 TRUE.

모든 레이아웃에 의미있는 순환 표현이있는 것은 아닙니다.이 경우 circular인수는 무시됩니다.

노드 – 에지 다이어그램 레이아웃

igraph클래식 노드 엣지 다이어그램 (대개 털볼 (hairball)이라고 함)에 대해 총 13 개의 서로 다른 레이아웃 알고리즘을 제공합니다. 이 중 일부는 무작위 , 그리드 , 및 스타 와 같이 매우 간단 하지만 그래프의 다른 특성을 기반으로 노드의 위치를 ​​최적화하려고 시도하는 사람들도 있습니다. 알고리즘이 다른 시나리오에 맞게 최적화되었으므로 “최상의 레이아웃 알고리즘”과 같은 것은 없습니다. 가능한 한 “최적 노드 위치”결과의 범위 중 하나이기 때문에 선택의 여지가있는 실험을하고 최종 결과를 염분으로 기억하십시오. 다음은 igraph고등학교 그래프에서 적용 가능한 모든 레이아웃을 실행 한 결과를 보여주는 애니메이션 입니다.

하이브 플롯

하이브 플롯은 여전히 ​​기술적으로 노드 엣지 다이어그램이지만 그래프의 연결 정보가 아니라 노드와 관련된 정보를 사용하기 때문에 나머지 부분과 조금 다릅니다. 이것은 하이브 플롯이 일정한 범위까지 해석 가능하고 그래프 구조의 작은 변화에 덜 취약하다는 것을 의미합니다. 그것들은 덜 일반적이기 때문에 사용은 종종 추가적인 설명을 요구할 것입니다.

계층 적 레이아웃

나무와 계층 구조는 그래프 구조의 중요한 하위 집합이며 ggraph시각적 표현을 위해 최적화 된 다양한 레이아웃을 제공합니다. 이 중 일부는 가장자리 대신에 인클로저와 위치를 사용하여 관계를 전달합니다 (예 : 트리 맵과 원 포장). 그럼에도 불구하고 이러한 레이아웃은 가장자리를 그리기 위해 사용할 수 있습니다.

가장 잘 알려진 나무 줄거리는 아마 dendrograms 것입니다. 두 개체 igraph와 dendrogram개체는 멍멍 모양으로 그릴 수 있지만 dendrogram개체 에만 분기 지점 배치를위한 높이 정보가 제공됩니다. igraph 객체의 경우 이것은 가장 긴 조상 길이에 의해 추론됩니다.

Dendrograms는 루트에 주어진 공간을 희생시키면서 트리의 리프에 더 많은 공간을 제공 할 수있는 순환 변환에 적용 할 수있는 레이아웃 중 하나입니다.

앞으로 더

이것으로 첫 번째 소개 게시물을 결론 짓습니다 ggraph. 레이아웃의 사용 방법을 설명하고 그 결과 플롯에 매우 큰 영향을 미칠 수있는 방법을 보여주기를 바랍니다. 더 많은 것을 기대해주십시오 …

최신 정보

 

참조: ggraph 소개 : 레이아웃 · 데이터 상상력