# Copia via via i comandi, da un # al successivo
#
# Che cosa fanno i comandi seguenti?
par( mai = c(0.5,0.5,0.1,0.1) )
plot( c(-5,5), c(-5,8), type="n")
abline(h=seq(-5,8,1),v=seq(-5,5,1),lty=3,col="grey60")
abline(h=0,v=0,lty=2)
f <- function(x) x^2/5+1
plot(f,-5,5,add=TRUE,col="blue")
# Come ottenere il grafico della relazione inversa?
# Non posso farlo come grafico di funzione. Potrei
# spezzarlo nel grafico di pił funzioni. Oppure:
t <- seq(-5,5,len=1000)
lines(t^2/5+1,t)
abline(0,1,col="red")
# se voglio una scala monometrica:
plot( c(-5,5), c(-5,8), type="n",asp=1)
abline(h=seq(-5,8,1),v=seq(-5,5,1),lty=3,col="grey60")
abline(h=0,v=0,lty=2)
# invece di  plot  posso usare  curve  con cui posso non specificare
# l'intervallo
curve(f,add=TRUE,col="blue")
lines(t^2/5+1,t)
abline(0,1,col="red")
# una scritta
text(3.2,-0.5,"la rel. inversa")
# una scritta inclinata
text(-3,-3,"la bis. di I e III quad.",srt=45)
#
# Una animazione gestita col mouse
x1 <- -30; x2 <- 30; y1 <- -30; y2 <- 30; avvio <- 1
par( mai = c(0.5,0.5,0.1,0.1) )
while(1==1) {
plot(c(x1,x2),c(y1,y2),type="n",xlab="", ylab="", asp=1)
abline(h=seq(y1,y2,5),v=seq(x1,x2,5),lty=3,col="orange")
abline(h=0,v=0,col="blue",lty=2)
if (avvio==1) {text(0,-25.5,"clicca pił volte; infine premi ESC",col="red"); avvio <-0}
x <- c(13,11,10, 9, 7,7.5, 7, 9,10,11,13,17,20,20.5,18.5,21,20,17,13)
y <- c(17,16,15,13,10, 13,16,13,11,10, 9, 9,11,  12,  13,13,15,17,17)
x <- x-7; y <- y-10; lines(x,y)
p <- locator(1); p <- c(round(p$x*2)/2,round(p$y*2)/2);
polygon(c(-29,-21,-21,-29),c(21,21,29,29),col="white",border="white")
text(-25,27.5,p[1]); text(-25,22.5,p[2])
lines(x + p[1], y + p[2], col="red"); p <- locator(1)  }
#
# Discontinuitą:
x1 <- -5; x2 <- 5; y1 <- -10; y2 <- 10
f <- function(x) ifelse(x >= 2, -6, 7)
g <- function(x) 1/x
par( mai = c(0.5,0.5,0.1,0.1) )
plot(c(x1,x2),c(y1,y2),type="n")
abline(v=seq(x1,x2,1),h=seq(y1,y2,1),lty=3,col="grey")
axis(1,pos=0,label=FALSE,col="brown"); axis(2,pos=0,label=FALSE,col="brown")
curve(f,add=TRUE,col="blue")
# Come ovviare al tracciamento di un grafico "continuo"? possibilita':
plot(c(x1,x2),c(y1,y2),type="n")
abline(v=seq(x1,x2,1),h=seq(y1,y2,1),lty=3,col="grey")
axis(1,pos=0,label=FALSE,col="brown"); axis(2,pos=0,label=FALSE,col="brown")
curve(f,x1,2-1e-8,add=TRUE,col="blue")
curve(f,2+1e-8,x2,add=TRUE,col="blue")
# Ma se non so quale punto saltare? Alternativa:
plot(c(x1,x2),c(y1,y2),type="n")
abline(v=seq(x1,x2,1),h=seq(y1,y2,1),lty=3,col="grey")
axis(1,pos=0,label=FALSE,col="brown"); axis(2,pos=0,label=FALSE,col="brown")
x <- seq(x1,x2,len=5000)
points(x,f(x),col="blue")
# per ridurre le dimensioni dei punti:
plot(c(x1,x2),c(y1,y2),type="n")
abline(v=seq(x1,x2,1),h=seq(y1,y2,1),lty=3,col="grey")
axis(1,pos=0,label=FALSE,col="brown"); axis(2,pos=0,label=FALSE,col="brown")
x <- seq(x1,x2,len=1e4)
points(x,f(x),col="blue",pch=".")
# oppure:
points(x,f(x),col="blue",pch=".",cex=2)
# potremmo usare anche curve o plot, specificando type="p":
curve(g,add=TRUE,col="red",n=1e4,type="p",pch=".",cex=2)
#
# Posso esaminare dei file di dati, vedere che cosa sono ed eventualmente
# usarli per delle elaborazioni. Esempio, leggiamo 4 righe di:
readLines("http://macosa.dima.unige.it/om/prg/stf/altomas.txt",n=4)
# Vedo che sono delle coppie di dati. Li metto in una tabella.
# Chiamo "dati" la tabella, salto con  skip  1 riga (quella dei commenti
# iniziali), preciso che non ci sono intestazioni con nomi delle variabili:
dati <- read.delim("http://macosa.dima.unige.it/om/prg/stf/altomas",header=FALSE,skip=1,sep =",")
# Scrivendo "dati" ho il contenuto della tabella, in questo caso breve:
dati
# Ma potrebbe essere una tabella molto lunga: conviene visualizzarne la
# "struttura" col comando seguente:
str(dati)
# tracciamo i punti
par( mai = c(0.5,0.5,0.1,0.1) )
plot(dati,col="blue")
# traccio una griglia
abline(h=seq(200,250,5),v=seq(1935,2005,5),lty=3,col="blue")
# Congiungo i punti e li traccio "pieni"
lines(dati); points(dati,pch=20)
#
# carica le seguenti righe: otterrai la penisola italiana
dove <- "http://macosa.dima.unige.it/om/prg/R/rmacosa/"
dati <- read.table(paste(dove,"penisola.txt",sep=""),header=FALSE,sep =",")
plot(dati,pch=".")
abline(h=seq(37,47,1),v=seq(7,18,1),lty=3,col="grey")
# Congiungo i punti ed evidenzio Genova e Roma
lines(dati); points(8.92,44.42,pch=19,col="red")
points(12.45,41.92,pch=19,col="blue")
# Se voglio l'Italia colorata:
polygon(dati,col="yellow")
abline(h=seq(37,47,1),v=seq(7,18,1),lty=3,col="grey")
points(8.92,44.42,pch=19,col="red")
points(12.45,41.92,pch=19,col="blue")
text(9,45,"GE"); text(12.5,42.5,"Roma")
#
# Prova a calcolare f per vari input naturali (non troppo grandi!):
f <- function(n) {u <- "0"; x <-0; for (i in (1:n)*2-1) {u <- paste(u,i,sep="+")
                  x <- x+i}; print (paste(u,x,sep="="), quote=FALSE)}
#
# Fine esempi.