2014-09-01 9 views
5

Ho sperimentato con HiveR e creato con successo una trama hive che rappresenta uno dei set di dati con cui lavoro. Il grafico originale per i dati è una palla di pelo classico:Ritaglio diagramma Hive

enter image description here

Tuttavia, una trama alveare dà una visione molto più semplice e più intuitiva dei dati:

enter image description here

Tuttavia, il problema è che la trama occupa solo una porzione relativamente piccola della tela. Ho provato vari trucchi per ridurlo in modo che la trama occupi la maggior parte del fotogramma, ma nessuno di essi ha avuto successo. Le opzioni più promettenti erano scrivere la trama in un file pdf o eps e poi usare pdfcrop o epstool per tagliare lo spazio bianco, ma nessuno dei due ha funzionato nella pratica. Sospetto che la trama abbia degli elementi invisibili che stanno gonfiando il riquadro di delimitazione.

Qualcuno ha qualche idea su come questa trama può essere ritagliata efficacemente? [So che potrei farlo manualmente, ma dovrò produrre un certo numero di questi grafici e sto cercando un modo sistematico/programmatico per farlo.]

La struttura dati per la trama dell'alveare può essere trovata here.

Molte grazie, Andrew.

ecco il codice per creare la trama:

set.seed(3) 

VERTICES <- 512 

library(igraph) 

big.graph <- barabasi.game(VERTICES, power = 1, 
          out.seq = sort(sample(c(1, 2, 3, 4), VERTICES, replace = TRUE, 
               prob = c(0.1, 0.7, 0.1, 0.1))), 
          directed = FALSE, out.pref = TRUE) 
library(HiveR) 
library(digest) 

V(big.graph)$name <- sapply(1:VERTICES, function(n) {digest(n, algo = "crc32", serialize = TRUE)}) 

big.matrix <- get.adjacency(big.graph, type= "lower", attr=NULL, names=TRUE, sparse=FALSE) 

colnames(big.matrix) <- V(big.graph)$name 
rownames(big.matrix) <- colnames(big.matrix) 

hive <- adj2HPD(big.matrix, axis.cols = "black") 
hive <- mineHPD(hive, option = "rad <- tot.edge.count") 
hive <- mineHPD(hive, option = "axis <- source.man.sink") 

summary = sumHPD(hive, chk.all = TRUE, plot.list = TRUE) 
# 
occluding = subset(summary, n1.ax == n2.ax & n1.rad == n2.rad) 
occluding = unique(c(as.character(occluding$n1.lab), as.character(occluding$n2.lab))) 
# 
hive$nodes$radius = ifelse(hive$nodes$lab %in% occluding, jitter(hive$nodes$radius), hive$nodes$radius) 

library(grid) 

plotHive(hive, bkgnd = "white") 
+1

Puoi pubblicare anche il tuo codice per creare questo grafico? – Andrie

+0

Buon piano. Fatto. – DataWookie

risposta

0

Quello che vorrei fare è uso pdfcrop.

knitr ha un'eccellente funzione plot_crop che funzionerà molto bene per te.

Potrebbe essere necessario installare pdfcrop/ImageMagick, ma questo consente di produrre questi grafici e rimuovere gli spazi bianchi.

pdf("graph.pdf") 
plotHive(hive, bkgnd = "white") 
dev.off() 

library(knitr) 
plot_crop("graph.pdf")