2014-09-11 1 views
0

для dataframeigraph, как изменить размер узла и цвет границы/толщину при условии

df <- data.frame(g1=c("x1","x2","x2","x3","x4","x5","x5","x3"), 
           g2=c("y1","y4","y2","y4","y3","y4","y5","y4"), 
           g1value=c(1,2,2,3,4,5,5,3), 
           g2value=c(2,4,2,4,5,4,NA, 4), 
           stringsAsFactors = FALSE) 

library(igraph) 
g=graph.data.frame(df, directed=F) 
plot(g) 

как бы указать размер узлов, так что каждый размер х-узлов соответствуют g1value, и у узлов в g2value (игнорировать узел, если его размер равен na)?

и как изменить цвет или толщину границы узла на условиях, например, когда узел равен x2?

Если есть много узлов, и результат построения графика переполнен, так или иначе, чтобы коснуться его?

Спасибо.

+2

В вашем примере у вас разные размеры для одного и того же узла. т.е. 'y4' имеет размер 4 и 3 – user20650

+1

Извините, я его изменил – santoku

ответ

0

Это начало - вы можете передавать разные векторы размеров и цветов аргументам plot.igraph, чтобы они применялись к различным узлам. Они задаются в порядке V(g)$name.

# tweaking your data to increase node size 
df <- data.frame(g1=c("x1","x2","x2","x3","x4","x5","x5","x3"), 
       g2=c("y1","y4","y2","y4","y3","y4","y5","y4"), 
       g1value=10*c(1,2,2,3,4,5,5,3), 
       g2value=10*c(2,4,2,4,5,4,NA, 4), 
       stringsAsFactors = FALSE) 

library(igraph) 

g <- graph.data.frame(df[,1:2], directed=F) 

# create a vector of vertex sizes conditional on g*values in df 
# set missing values to size 0 
r <- data.frame(g=c(df$g1, df$g2), value=c(df$g1value, df$g2value)) 
sz <- r$value[match(V(g)$name, r$g)] 
sz[is.na(sz)] <- 0 

# create a vertor of border colours conditional on node type 
bd <- ifelse(grepl("x", V(g)$name), "red", NA) 

# add the size and border colour vectors to relevant plot arguments  
plot(g, vertex.size=sz, vertex.frame.color=bd) 


igraph имеет хорошие страницы справки см ?igraph::layout для вариантов компоновки графа, ?plot.igraph и ?igraph.plotting для некоторых планировавших опций/аргументов.

Для ширина границыthis link.

+0

В' V (g) 'и 8 строках в' df' есть 10 узлов, поэтому подход 'ifelse' здесь не кажется правильным, если вычисление 'sz'. – josliber

+0

@josilber; обновленный с довольно неудовлетворительной попыткой - пожалуйста, не стесняйтесь улучшать – user20650

+0

Я столкнулся с проблемой перекрытия вершин друг с другом, когда есть больше очков. есть ли способ разрешить это, кроме макета круга? Пример: z = paste0 ("z", 1: 1000) k = rep (paste0 ("k", 1: 500), 2) df = data.frame (k, z) g <- graph. data.frame (df, direct = F) sz = sample (2000) – santoku

 Смежные вопросы

  • Нет связанных вопросов^_^