2014-09-01 35 views
5

Tôi đã thử nghiệm với HiveR và đã tạo thành công một ô hive đại diện cho một trong các tập dữ liệu mà tôi đang làm việc. Đồ thị ban đầu cho dữ liệu là một Hairball cổ điển:Cắt âm mưu Hive

enter image description here

Tuy nhiên, một âm mưu tổ ong cho một cái nhìn đơn giản hơn nhiều và trực quan hơn của dữ liệu:

enter image description here

Tuy nhiên, vấn đề là cốt truyện chỉ chiếm một phần tương đối nhỏ của canvas. Tôi đã thử các thủ thuật khác nhau để cắt xén nó xuống để cốt truyện chiếm phần lớn khung hình, nhưng không ai trong số chúng đã thành công. Các tùy chọn hứa hẹn nhất là viết cốt truyện cho một tập tin pdf hoặc eps và sau đó sử dụng pdfcrop hoặc epstool để cắt bỏ khoảng trắng, nhưng không ai trong số họ làm việc trong thực tế. Tôi nghi ngờ rằng cốt truyện có một số yếu tố vô hình đang thổi phồng hộp giới hạn.

Có ai có bất kỳ ý tưởng nào về việc làm thế nào lô đất này có thể được cắt giảm hiệu quả không? [Tôi biết rằng tôi có thể làm điều đó bằng tay, nhưng tôi sẽ phải sản xuất một số các lô này và tôi đang tìm kiếm một cách có hệ thống/lập trình để làm điều đó.]

Cấu trúc dữ liệu cho ô điều khiển có thể được tìm thấy here.

Rất cám ơn, Andrew.

Đây là đoạn mã để tạo cốt truyện:

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

Bạn cũng có thể đăng mã để tạo cốt truyện này không? – Andrie

+0

Kế hoạch tốt. Làm xong. – DataWookie

Trả lời

0

Những gì tôi sẽ làm gì sử dụng pdfcrop là.

knitr có hàm plot_crop tuyệt vời sẽ hoạt động rất tốt cho bạn.

Bạn có thể cần phải cài đặt pdfcrop/ImageMagick, nhưng điều này sẽ cho phép bạn lập trình tạo các ô này và loại bỏ khoảng trắng.

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

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