Lý thuyết đồ thị - phân tích và trực quan hóa


22

Tôi không chắc chắn đối tượng tham gia vào lợi ích CrossValidated. Bạn sẽ nói với tôi.

Tôi phải nghiên cứu một biểu đồ (từ lý thuyết đồ thị ) tức là. Tôi có một số điểm nhất định được kết nối. Tôi có một bảng với tất cả các dấu chấm và mỗi dấu chấm phụ thuộc vào nhau. (Tôi cũng có một bảng khác với hàm ý)

Câu hỏi của tôi là:
Có một phần mềm tốt (hoặc gói R) để nghiên cứu dễ dàng không?
Có một cách dễ dàng để hiển thị biểu đồ?


Tôi đã thử sử dụng cran.r-project.org/web/packages/graph/vignettes/graph.pdf nhưng điều đó cho thấy gói "Rgraphviz" không còn khả dụng nữa. Bất cứ ai có một giải pháp khác?
RockScience

1
Rgraphviz có trên bộ lọc sinh học: bioconductor.org/packages/release/bioc/html/Rgraphviz.html
Rob Hyndman

1
Cảm ơn! Graphviz hoàn hảo và rất linh hoạt, tôi sử dụng nó trong R với giao diện Rgraphviz và nó hoạt động rất tốt.
RockScience

Câu trả lời:


15

iGraph là một thư viện ngôn ngữ chéo (R, Python, Ruby, C) rất thú vị. Nó cho phép bạn làm việc với các đồ thị không được định hướng và định hướng và có khá nhiều thuật toán phân tích đã được triển khai.


1
(+1) Có vẻ như phản hồi của tôi đến sau bạn. Khi phản hồi của bạn nêu bật một số quan điểm khác nhau (đa nền tảng, thuật toán), tôi cảm thấy các phản hồi của chúng tôi không quá dư thừa, nhưng tôi có thể loại bỏ tôi mà không cần bất kỳ thăm dò nào.
chl

14

Có nhiều gói khác nhau để biểu diễn các đồ thị có hướng và không có hướng, ma trận tỷ lệ / kề, v.v. ngoài biểu đồ ; tìm ví dụ ở khung nhìn Nhiệm vụ gR .

Để trực quan hóa và tính toán cơ bản, tôi nghĩ rằng gói igraph là gói đáng tin cậy, ngoài Rgraphviz (trên BioC như được chỉ ra bởi @Rob). Xin lưu ý rằng để cái sau hoạt động tốt, graphviz cũng phải được cài đặt. Các igraph gói có thuật toán tốt để tạo bố trí tốt, giống như graphviz .

Dưới đây là một ví dụ về việc sử dụng, bắt đầu từ ma trận kề kề giả:

adj.mat <- matrix(sample(c(0,1), 9, replace=TRUE), nr=3)
g <- graph.adjacency(adj.mat)
plot(g)

văn bản thay thế


Cảm ơn câu trả lời của bạn. graphviz không dễ cài đặt với R, nhưng nó là một thư viện tuyệt vời
RockScience

FYI những gì tôi làm bây giờ là tôi tạo mã graphviz bằng R và tôi đọc nó trong mediawiki bằng cách sử dụng tiện ích mở rộng graphviz mediawiki. (Gói Rgraphviz không dễ cài đặt và không hoạt động với phiên bản R cuối cùng)
RockScience

"Gói 'biểu đồ' đã bị xóa khỏi kho CRAN."
bartektartanus

8

Ngoài những gì đã được nói, đối với nhiệm vụ bất thường (và ngoài R), bạn có thể quan tâm đến việc kiểm tra Gephi .


8

Một tùy chọn khác là gói statnet. Statnet có các chức năng cho tất cả các biện pháp thường được sử dụng trong SNA và cũng có thể ước tính các mô hình ERG. Nếu bạn có dữ liệu của mình trong danh sách cạnh, hãy đọc dữ liệu như sau (giả sử khung dữ liệu của bạn được gắn nhãn "edgelist"):

net <- as.network(edgelist, matrix.type = "edgelist", directed = TRUE) #if the network is directed, otherwise: directed = FALSE

Nếu dữ liệu của bạn nằm trong ma trận kề, bạn thay thế đối số matrix.type bằng "kề":

net <- as.network(edgelist, matrix.type = "adjacency", directed = TRUE)

Gói statnet có một số khả năng vẽ rất đẹp. Để thực hiện một cốt truyện đơn giản, chỉ cần gõ:

gplot(net)

Để chia tỷ lệ các nút theo tính trung tâm giữa chúng, chỉ cần thực hiện:

bet <- betweenness(net)
gplot(net, vertex.cex = bet)

Theo mặc định, hàm gplot sử dụng thuật toán Fruchterman-Reingold để đặt các nút, tuy nhiên, điều này có thể được kiểm soát từ tùy chọn chế độ, ví dụ để sử dụng MDS cho vị trí của các loại nút:

gplot(net, vertex.cex, mode = "mds")

hoặc sử dụng bố cục hình tròn:

gplot(net, vertex.cex, mode = "circle")

Có nhiều khả năng hơn, và hướng dẫn này bao gồm hầu hết các tùy chọn cơ bản. Đối với một ví dụ khép kín:

net <- rgraph(20) #generate a random network with 20 nodes
bet <- betweenness(net) #calculate betweenness scores
gplot(net) #a simple plot
gplot(net, vertex.cex = bet/3) #nodes scaled according to their betweenness centrality, the measure is divided by 3 so the nodes don't become to big.
gplot(net, vertex.cex = bet/3, mode = "circle") #with a circle layout
gplot(net, vertex.cex = bet/3, mode = "circle", label = 1:20) #with node labels

(+1) Không bao giờ sử dụng gói này, nhưng tổng quan của bạn đề nghị tôi nên thử nó. Có vẻ tốt từ cái nhìn đầu tiên.
chl

3

Một câu hỏi tương tự đã được hỏi trên cstheory, nếu bạn đặc biệt quan tâm đến đồ thị phẳng , hoặc trực quan hóa thư mục .

Gephi đã được đề cập ở đây, nhưng nó cũng được một số người khuyên dùng trên cstheory, vì vậy tôi nghĩ đó là một lựa chọn tốt.

Các tùy chọn thú vị khác bao gồm:

  • Flare cung cấp một số công cụ trực quan thực sự thú vị và tạo ra đồ họa rất đẹp cho các báo cáo và giấy tờ.
  • Cyptoscape có một số công cụ phân tích và trực quan rất mạnh mẽ. Nó đặc biệt tốt cho hóa học và sinh học phân tử.
  • Trang web này cung cấp các liên kết đến nhiều công cụ và thư viện trực quan đẹp khác (mặc dù không dành cho R).

2

Tôi thấy NodeXL rất hữu ích và dễ sử dụng. Đó là một mẫu MS Excel cung cấp nhập / xuất đồ thị dễ dàng, định dạng các cạnh / đỉnh, tính toán một số số liệu, có một số thuật toán phân cụm. Bạn có thể dễ dàng sử dụng hình ảnh tùy chỉnh như các đỉnh.
Một công cụ hữu ích khác đối với tôi là bố cục Microsoft Automatic Graph cung cấp bố cục tốt có thể được thử trực tuyến (với trình duyệt hỗ trợ SVG).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.