Teori grafik - analisis dan visualisasi

22

Saya tidak yakin subjek masuk ke dalam minat CrossValidated. Anda akan memberi tahu saya.

Saya harus belajar grafik (dari teori grafik ) yaitu. Saya memiliki sejumlah titik yang terhubung. Saya punya meja dengan semua titik dan titik masing-masing tergantung. (Saya juga punya meja lain dengan implikasinya)

Pertanyaan saya adalah:
Apakah ada perangkat lunak yang baik (atau paket R) untuk dipelajari dengan mudah?
Apakah ada cara mudah untuk menampilkan grafik?

RockScience
sumber
Saya telah mencoba menggunakan cran.r-project.org/web/packages/graph/vignettes/graph.pdf tetapi sepertinya paket "Rgraphviz" tidak tersedia lagi. Adakah yang punya solusi lain?
RockScience
1
Rgraphviz ada di bioconductor: bioconductor.org/packages/release/bioc/html/Rgraphviz.html
Rob Hyndman
1
Terima kasih! Graphviz sempurna dan sangat fleksibel, saya menggunakannya dalam R dengan antarmuka Rgraphviz dan berfungsi dengan baik.
RockScience

Jawaban:

15

iGraph adalah perpustakaan lintas-bahasa (R, Python, Ruby, C) yang sangat menarik. Ini memungkinkan Anda untuk bekerja dengan grafik yang tidak terarah dan terarah dan memiliki beberapa algoritma analisis yang sudah diterapkan.

nico
sumber
1
(+1) Tampaknya respons saya datang setelah tanggapan Anda. Karena respons Anda menyoroti perspektif yang agak berbeda (lintas platform, algoritme), saya merasa respons kami tidak terlalu berlebihan, tetapi saya dapat menghapusnya tanpa masalah.
chl
14

Ada berbagai paket untuk mewakili grafik langsung dan tidak langsung, insiden / adjacency matrix, dll. Selain grafik ; lihat misalnya di tampilan Tugas gR .

Untuk visualisasi dan perhitungan dasar, saya pikir paket igraph adalah yang dapat diandalkan, selain Rgraphviz (pada BioC seperti yang ditunjukkan oleh @Rob). Ketahuilah bahwa agar yang terakhir berfungsi dengan baik, graphviz harus diinstal juga. The igraph paket memiliki algoritma yang bagus untuk menciptakan layout yang baik, seperti graphviz .

Berikut ini adalah contoh penggunaan, mulai dari matriks adjacency palsu:

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

teks alternatif

chl
sumber
Terima kasih atas jawaban anda. Graphviz tidak mudah dipasang dengan R, tetapi tampaknya menjadi perpustakaan yang bagus
RockScience
FYI yang saya lakukan sekarang adalah saya membuat kode graphviz dengan R dan saya membacanya di mediawiki menggunakan ekstensi graphwz mediawiki. (Paket Rgraphviz tidak mudah dipasang dan tidak berfungsi dengan versi R yang terakhir)
RockScience
"Paket 'grafik' telah dihapus dari repositori CRAN."
bartektartanus
8

Selain dari apa yang telah dikatakan, untuk tugas vusualisasi saja (dan di luar dari R), Anda mungkin tertarik untuk memeriksa Gephi .

F. Tusell
sumber
8

Pilihan lain adalah paket statnet. Statnet memiliki fungsi untuk semua tindakan yang biasa digunakan dalam SNA, dan juga dapat memperkirakan model ERG. Jika Anda memiliki data di daftar tepi, baca data sebagai berikut (dengan asumsi frame data Anda diberi label "edgelist"):

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

Jika data Anda dalam matriks adjacency Anda mengganti argumen matrix.type dengan "adjacency":

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

Paket statnet memiliki beberapa kemampuan merencanakan yang sangat bagus. Untuk melakukan plot sederhana cukup ketik:

gplot(net)

Untuk skala node berdasarkan sentralitas antar mereka, cukup lakukan:

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

Secara default fungsi gplot menggunakan algoritma Fruchterman-Reingold untuk menempatkan node, namun ini dapat dikontrol dari opsi mode, misalnya untuk menggunakan MDS untuk penempatan tipe node:

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

atau untuk menggunakan tata letak lingkaran:

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

Ada banyak lagi kemungkinan, dan panduan ini mencakup sebagian besar opsi dasar. Untuk contoh yang lengkap:

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
Thomas Jensen
sumber
(+1) Tidak pernah menggunakan paket ini, tetapi ikhtisar Anda menyarankan agar saya mencobanya. Tampak bagus pada pandangan pertama.
chl
3

Sebuah pertanyaan serupa diminta pada cstheory, juga jika Anda secara khusus tertarik grafik planar , atau visualisasi bibliografi .

Gephi sudah disebutkan di sini, tetapi juga direkomendasikan oleh beberapa orang di cstheory, jadi saya pikir itu adalah pilihan yang baik.

Opsi keren lainnya termasuk:

  • Flare menyediakan beberapa alat visualisasi yang sangat keren dan membuat grafik yang sangat cantik untuk laporan dan makalah.
  • Cyptoscape memiliki beberapa alat analisis dan visualisasi yang sangat kuat. Ini sangat baik untuk kimia dan biologi molekuler.
  • Situs web ini menyediakan tautan ke banyak alat dan perpustakaan visualisasi bagus lainnya (walaupun tidak untuk R).
Artem Kaznatcheev
sumber
2

Saya menemukan NodeXL sangat membantu dan mudah digunakan. Ini adalah template MS Excel yang menyediakan impor / ekspor grafik, pemformatan tepi / simpul, menghitung beberapa metrik, memiliki beberapa algoritma pengelompokan. Anda dapat dengan mudah menggunakan gambar khusus sebagai simpul.
Alat lain yang membantu saya adalah tata letak Microsoft Automatic Graph yang menyediakan tata letak yang baik dapat dicoba secara online (dengan peramban yang mendukung SVG).

Kniganapolke
sumber