Come fare un grafo ad albero
Abbiamo visto qui come realizzare seplicemente
particolari tipi di grafi ad albero. Ad es. con:
library(cluster)
cosa <- c(1,2,3,4,5,6,7,8)
pltree(agnes(cosa),ylab=NULL,main=NULL,yaxt="n")
realizzo come immagine il grafo sotto a sinistra. Se dimensiono
opportunamente l'immagine e la salvo come BMP la posso aprire con Paint
o con un'altra applicazione, modificarla, aggiungere delle scritte e salvarla
come GIF nella forma raffigurata a destra.
![](grafi2.gif)
Con:
cosa <- c(1,2,3,4,5,6,7,8,9,10,11,12,13)
pltree(agnes(cosa),ylab=NULL,main=NULL,yaxt="n")
ho:
![](grafi3.gif)
cosa <- c(1,2,3,4,5,6,7,8,9,10,11)
pltree(agnes(cosa),ylab=NULL,main=NULL,yaxt="n",lwd=2,col="blue",lty=2)
![](grafi4.gif)
Altra possibilità, facile e flessibile, è costruire delle
immagini come le seguenti (in cui traccio un reticolato per facilitare
la costruzione e che poi cancello). Se voglio posso aggiungere delle
scritte più elaborate, realizzate in Teχ
Poi posso salvare le immagini nel modo detto sopra. Questo procedimento ha
degli evidenti vantaggi: in poche righe di testo posso salvare una "immagine"
(e comunicarla con pochi bit e con qualunque dispositivo elettronico).
dev.new(width=3,height=3); par(mai = c(0,0,0,0))
plot(c(0,10),c(0,10),type="n",fg="white")
x <- seq(0,10,1); abline(h=x,v=x,lty=3,col="grey")
lines(c(1,4),c(4.5,3)); lines(c(1,4),c(5.5,7))
lines(c(5,8),c(8,9.5)); lines(c(5,8),c(7,5.5))
lines(c(5,8),c(2,0.5)); lines(c(5,8),c(3,4.5))
text(0.5,5,"A")
text(4.5,7.5,"B"); text(4.5,2.5,"C")
text(8.5,9.5,"D"); text(8.5,5.5,"E")
text(8.5,4.5,"F"); text(8.5,0.5,"G")
# possiamo poi ridimensionare la finestra
# Ottengo l'immagine sopra a sinistra.
#
# fatta la prova, "tolgo" la griglia:
plot(c(0,10),c(0,10),type="n",fg="white")
x <- seq(0,10,1); abline(h=x,v=x,lty=3,col="white")
lines(c(1,4),c(4.5,3)); lines(c(1,4),c(5.5,7))
lines(c(5,8),c(8,9.5)); lines(c(5,8),c(7,5.5))
lines(c(5,8),c(2,0.5)); lines(c(5,8),c(3,4.5))
text(0.5,5,"A")
text(4.5,7.5,"B"); text(4.5,2.5,"C")
text(8.5,9.5,"D"); text(8.5,5.5,"E")
text(8.5,4.5,"F"); text(8.5,0.5,"G")
# Ottengo l'immagine al centro
#
# Una grafo più articolato:
dev.new(width=3,height=3); par(mai = c(0,0,0,0))
plot(c(0,10),c(0,10),type="n",fg="white")
x <- seq(0,10,1); abline(h=x,v=x,lty=3,col="grey")
lines(c(1,3),c(5.5,7)); lines(c(1,3),c(4.5,3))
text(0.5,5,"A"); text(3.5,7.5,"B")
text(3.5,2.5,"C")
lines(c(4,6),c(8,9)); lines(c(4,6),c(7.5,6.5))
lines(c(4,6),c(2.5,3.5)); lines(c(4,6),c(2,1))
text(6.5,9,"D"); text(6.5,6.5,"E")
text(6.5,3.5,"F"); text(6.5,1,"G")
lines(c(7,9),c(9,9.75)); lines(c(7,9),c(9,8.25))
lines(c(7,9),c(6.5,7.25)); lines(c(7,9),c(6.5,5.75))
lines(c(7,9),c(1,1.75)); lines(c(7,9),c(1,0.25))
lines(c(7,9),c(3.5,4.25)); lines(c(7,9),c(3.5,2.75))
text(9.5,9.5,"H"); text(9.5,8.5,"I")
text(9.5,7.25,"L"); text(9.5,6.25,"M")
text(9.5,4.25,"N"); text(9.5,3.25,"O")
text(9.5,1.5,"P"); text(9.5,0.5,"Q")
# Ottengo quello a destra, che posso ritracciare con
# col="white" al posto di col="grey"
#
# Un altro grafo:
plot(c(0,10),c(0,10),type="n",fg="white")
x <- seq(0,10,1); abline(h=x,v=x,lty=3,col="grey")
lines(c(0,5),c(5,5),col="blue"); lines(c(0,5),c(5,8),col="blue"); lines(c(0,5),c(5,2),col="blue")
lines(c(5,10),c(5,6),col="blue"); lines(c(5,10),c(5,4),col="blue")
lines(c(5,10),c(8,7),col="blue"); lines(c(5,10),c(8,9),col="blue")
lines(c(5,10),c(2,1),col="blue"); lines(c(5,10),c(2,3),col="blue")
text(5,8.7,"A"); text(5,5.7,"B"); text(5,2.7,"C")
text(10,9.5,"P"); text(10,7.5,"N")
text(10,6.5,"P"); text(10,4.5,"N")
text(10,3.5,"P"); text(10,1.5,"N")
#
plot(c(0,10),c(0,10),type="n",fg="white")
lines(c(0,5),c(5,5),col="blue"); lines(c(0,5),c(5,8),col="blue"); lines(c(0,5),c(5,2),col="blue")
lines(c(5,10),c(5,6),col="blue"); lines(c(5,10),c(5,4),col="blue")
lines(c(5,10),c(8,7),col="blue"); lines(c(5,10),c(8,9),col="blue")
lines(c(5,10),c(2,1),col="blue"); lines(c(5,10),c(2,3),col="blue")
text(5,8.7,"A"); text(5,5.7,"B"); text(5,2.7,"C")
text(10,9.5,"P"); text(10,7.5,"N")
text(10,6.5,"P"); text(10,4.5,"N")
text(10,3.5,"P"); text(10,1.5,"N")