2013-09-17 2 views
1

я сделал этот пост на прошлой неделе, но я не объяснить это правильно, я надеюсь, что некоторые из вас может помочь мне в этот раз ...концентрические кольца в круговой диаграмме как вершины сети с помощью R

I Я пытаюсь привлечь многослойные концентрические кольца как вершину графа.

Здесь вы найдете простую версию того, что я did, и вот что я want to do. Обратите внимание, что край также следует перетаскивать с помощью вершины.

Это код бывший:

library(igraph) 
g=graph.empty(4) 
g[1,2]=T 
g[3,4]=T 
resColors=matrix(as.character(list("green","red","green","green","green","grey","grey", "green","green","green","red","red","green","green","green","green","red","red","green","green")), nrow=vcount(g)) 
colors = list() 
values = list() 
for (i in 1:vcount(g)) { 
    values[[i]] = rep(1, times = ncol(resColors)) 
    colors[i] = list(resColors[i,]) 
} 
size=c(60,50,30,20) 
plot(g, vertex.shape = "pie", vertex.pie = values, vertex.pie.color = colors, vertex.size = size) 

Спасибо, Нат

+0

Я не уверен, что вы хотите, но этот код создает перекрывающиеся концентрические круговые диаграммы: 'layout (matrix (c (1,1,1,1,2,1,1,1,1), nrow = 3)); пирог (X = C (0.5,0.3,0.2)); pie (x = c (0,4,0,25,0,35)) ' –

+0

Этот код создает четыре круговые диаграммы, две из которых являются концентрическими. Однако я не уверен, как добавить в стрелки: par (mar = c (1,1,1,1)); макет (матрица (c (1,1,1,0,0,0, 1,2,1,0,0,0, 1,1,1,0,3,0, 0,0,0,0, 0,0, 0,0,0,0,0,0, 0,0,0,0,4,0), nrow = 6, byrow = TRUE)); пирог (X = C (0.4,0.3,0.2,0.1)); пирог (X = C (0.4,0.3,0.2,0.1)); пирог (x = c (0,4,0,3,0,2,0,1)); pie (x = c (0,4,0,3,0,2,0,1)); –

+0

Также ознакомьтесь со следующей страницей в документах igraph: http://igraph.sourceforge.net/doc/R/igraph.vertex. forms.html. По сути, это говорит вам о том, как создавать пользовательские формы вершин для igraph. Скорее всего, вам нужно создать пользовательскую функцию ящика диаграммы, а затем передать это 'add.vertex.shape' каким-то образом. –

ответ

0

Решение было проще, чем я, хотя, в случае, если кто-то нуждается в ответ:

Перед черчения, вы называете макет, fruchterman.reingold в качестве примера:

lay <- layout.fruchterman.reingold(g) 

Затем редактируемого лежал в примере, вы хотите узла 3 на узле 1:

lay[3,] <- lay[1,] 

И, наконец, вы участок с отредактированным макетом:

plot(g, vertex.shape = "pie", vertex.pie = values, vertex.pie.color = colors, 
    vertex.size = size, layout = lay) 
0

Это может вам начать в базе R. Вы должны были бы играть с макетом и стрелами больше, если вы хотите стрелки касаются круговых диаграмм.

par(mar=c(1,1,1,1)); 
layout(matrix(c(0,0,0,0,0,0,0, 
       0,0,0,0,0,0,0, 
       1,1,1,1,6,6,0, 
       1,2,2,5,5,6,0, 
       1,2,2,1,0,0,0, 
       1,1,1,3,0,0,0, 
       0,0,0,0,3,0,0, 
       0,0,0,0,0,3,4, 
       0,0,0,0,0,4,4), nrow=9, byrow=TRUE)); 

pie(x=c(0.4,0.3,0.2,0.1), labels = NA); 
pie(x=c(0.4,0.3,0.2,0.1), labels = NA); 

plot(x=1, y=1, type='n', axes = FALSE, xlim = c(0,100), ylim = c(0,100)) 
arrows(x0=0, y0=100, x1 = 80, y1 = 20, length=0.25) 

pie(x=c(0.4,0.3,0.2,0.1), labels = NA); 

plot(x=1, y=1, type='n', axes = FALSE, xlim = c(0,100), ylim = c(0,100)) 
arrows(x0=0, y0=0, x1 = 80, y1 = 90) 

pie(x=c(0.4,0.3,0.2,0.1), labels = NA); 

enter image description here

В качестве альтернативы, может быть, есть способ смешивать и сочетать графики и изображения из разных пакетов, которые могут помочь в этом случае. Смотрите здесь: Combine base and ggplot graphics in R figure window

EDIT:

Если вы просто используете один plot заявление, вместо двух в примере выше, и заполняют всю layout с этим один невидимый сюжет, то вы можете добавить столько, сколько arrows как вы хотеть. Важно отметить, что у вас, вероятно, был бы очень мелкомасштабный контроль над размещением этих arrows через координаты x и y, которые вы указываете каждой стрелке. Вы бы ввели pie графики на одном plot и, возможно, получите arrows, чтобы коснуться диаграмм pie с небольшими проблемами через пробную версию и ошибку.