Grafici Base in R
R dispone di un sistema grafico base estremamente potente, integrato direttamente nel linguaggio senza bisogno di pacchetti aggiuntivi. Le funzioni grafiche base di R permettono di creare rapidamente visualizzazioni per l’esplorazione dei dati e la comunicazione dei risultati. In questa guida esploreremo tutte le principali funzioni grafiche con esempi pratici e personalizzazioni.
plot() - Scatter Plot e Grafici di Base
La funzione plot() e’ la piu’ versatile del sistema grafico di R. Il suo comportamento cambia automaticamente in base al tipo di dati forniti.
# Scatter plot base con mtcars
plot(mtcars$wt, mtcars$mpg)
# Scatter plot con personalizzazione
plot(mtcars$wt, mtcars$mpg,
main = "Peso vs Consumo", # Titolo
xlab = "Peso (1000 lbs)", # Etichetta asse X
ylab = "Miglia per Gallone (mpg)", # Etichetta asse Y
col = "steelblue", # Colore dei punti
pch = 19, # Tipo di simbolo (cerchio pieno)
cex = 1.2) # Dimensione dei punti
# Aggiungere una linea di tendenza
abline(lm(mpg ~ wt, data = mtcars), col = "red", lwd = 2)
Tipi di Simboli (pch)
Il parametro pch controlla il tipo di simbolo usato nei grafici. I valori vanno da 0 a 25.
# Mostrare i principali simboli disponibili
plot(1:25, rep(1, 25), pch = 1:25, cex = 2,
main = "Simboli disponibili (pch 1-25)",
xlab = "Numero pch", ylab = "")
# pch comuni:
# 0 = quadrato 1 = cerchio 2 = triangolo
# 15 = quadrato pieno 16 = cerchio pieno 17 = triangolo pieno
# 19 = cerchio pieno grande
Tipi di Linea (lty)
Il parametro lty controlla il tipo di linea.
# Creare dati di esempio
x <- 1:10
# Grafico a linee con diversi stili
plot(x, x^2, type = "l", lty = 1, lwd = 2, col = "blue",
main = "Tipi di Linea", xlab = "X", ylab = "Y",
ylim = c(0, 150))
lines(x, x^2 + 20, lty = 2, lwd = 2, col = "red") # Tratteggiata
lines(x, x^2 + 40, lty = 3, lwd = 2, col = "green") # Punteggiata
lines(x, x^2 + 60, lty = 4, lwd = 2, col = "purple") # Punto-tratto
# lty: 1 = continua, 2 = tratteggiata, 3 = punteggiata
# 4 = punto-tratto, 5 = tratto lungo, 6 = doppio tratto
lines() e points() - Aggiungere Elementi
Le funzioni lines() e points() aggiungono rispettivamente linee e punti a un grafico esistente.
# Creare un grafico con piu' serie di dati
x <- seq(0, 2 * pi, length.out = 100)
plot(x, sin(x), type = "l", col = "blue", lwd = 2,
main = "Funzioni Trigonometriche",
xlab = "x (radianti)", ylab = "y",
ylim = c(-1.5, 1.5))
# Aggiungere la curva del coseno
lines(x, cos(x), col = "red", lwd = 2)
# Aggiungere punti specifici
punti_x <- c(0, pi/2, pi, 3*pi/2, 2*pi)
points(punti_x, sin(punti_x), pch = 19, col = "blue", cex = 1.5)
points(punti_x, cos(punti_x), pch = 17, col = "red", cex = 1.5)
# Aggiungere una linea orizzontale a y = 0
abline(h = 0, lty = 2, col = "gray")
hist() - Istogrammi
hist() crea istogrammi per visualizzare la distribuzione di una variabile numerica.
# Istogramma base
hist(mtcars$mpg)
# Istogramma personalizzato
hist(mtcars$mpg,
breaks = 10, # Numero di intervalli
col = "lightblue", # Colore delle barre
border = "darkblue", # Colore dei bordi
main = "Distribuzione del Consumo",
xlab = "Miglia per Gallone",
ylab = "Frequenza",
las = 1) # Etichette orizzontali sull'asse Y
# Aggiungere la curva di densita'
hist(mtcars$mpg, breaks = 10, col = "lightblue", border = "darkblue",
prob = TRUE, # Frequenze relative
main = "Distribuzione con Curva di Densita'",
xlab = "Miglia per Gallone", ylab = "Densita'")
lines(density(mtcars$mpg), col = "red", lwd = 2)
# Aggiungere la media come linea verticale
abline(v = mean(mtcars$mpg), col = "darkgreen", lwd = 2, lty = 2)
barplot() - Grafici a Barre
barplot() crea grafici a barre, utili per variabili categoriche.
# Conteggio auto per numero di cilindri
conteggio <- table(mtcars$cyl)
# conteggio:
# 4 6 8
# 11 7 14
# Grafico a barre verticale
barplot(conteggio,
col = c("steelblue", "darkorange", "darkred"),
main = "Auto per Numero di Cilindri",
xlab = "Cilindri",
ylab = "Numero di Auto",
las = 1)
# Grafico a barre orizzontale
barplot(conteggio,
col = c("steelblue", "darkorange", "darkred"),
main = "Auto per Numero di Cilindri",
xlab = "Numero di Auto",
horiz = TRUE,
las = 1)
# Grafico a barre raggruppate
conteggio_2 <- table(mtcars$am, mtcars$cyl)
barplot(conteggio_2,
beside = TRUE, # Barre affiancate
col = c("steelblue", "coral"),
main = "Cilindri per Tipo di Cambio",
xlab = "Cilindri",
ylab = "Conteggio",
legend.text = c("Automatico", "Manuale"),
args.legend = list(x = "topright"))
# Grafico a barre impilate (beside = FALSE, il default)
barplot(conteggio_2,
col = c("steelblue", "coral"),
main = "Cilindri per Tipo di Cambio (Impilato)",
xlab = "Cilindri",
ylab = "Conteggio",
legend.text = c("Automatico", "Manuale"))
boxplot() - Diagrammi a Scatola
boxplot() crea diagrammi a scatola e baffi, ideali per confrontare distribuzioni e identificare outlier.
# Boxplot singolo
boxplot(mtcars$mpg,
main = "Distribuzione Consumo",
ylab = "Miglia per Gallone",
col = "lightgreen",
border = "darkgreen")
# Boxplot per gruppi
boxplot(mpg ~ cyl, data = mtcars,
main = "Consumo per Numero di Cilindri",
xlab = "Cilindri",
ylab = "Miglia per Gallone",
col = c("lightblue", "lightyellow", "lightcoral"),
border = c("blue", "orange", "red"),
las = 1,
notch = TRUE) # Tacche per intervallo di confidenza
# Boxplot orizzontale
boxplot(mpg ~ cyl, data = mtcars,
horizontal = TRUE,
main = "Consumo per Cilindri (Orizzontale)",
xlab = "Miglia per Gallone",
ylab = "Cilindri",
col = c("lightblue", "lightyellow", "lightcoral"))
pie() - Grafico a Torta
pie() crea grafici a torta, utili per mostrare proporzioni.
# Conteggio cilindri
conteggio <- table(mtcars$cyl)
etichette <- paste(names(conteggio), "cilindri\n",
conteggio, "auto")
# Grafico a torta
pie(conteggio,
labels = etichette,
col = c("steelblue", "darkorange", "darkred"),
main = "Distribuzione Auto per Cilindri")
# Grafico a torta con percentuali
percentuali <- round(100 * conteggio / sum(conteggio), 1)
etichette_perc <- paste(names(conteggio), "cyl:", percentuali, "%")
pie(conteggio,
labels = etichette_perc,
col = rainbow(length(conteggio)),
main = "Distribuzione Percentuale per Cilindri")
legend() - Aggiungere una Legenda
La funzione legend() aggiunge una legenda al grafico corrente.
# Grafico con legenda
plot(mtcars$wt, mtcars$mpg, type = "n",
main = "Peso vs Consumo per Cilindri",
xlab = "Peso (1000 lbs)", ylab = "MPG")
# Aggiungere punti colorati per gruppo
colori <- c("steelblue", "darkorange", "darkred")
gruppi <- c(4, 6, 8)
for (i in seq_along(gruppi)) {
dati <- mtcars[mtcars$cyl == gruppi[i], ]
points(dati$wt, dati$mpg, col = colori[i], pch = 19, cex = 1.3)
}
# Aggiungere la legenda
legend("topright",
legend = paste(gruppi, "cilindri"),
col = colori,
pch = 19,
cex = 0.9,
title = "Cilindri",
bg = "white")
par() - Layout con Grafici Multipli
La funzione par() controlla i parametri grafici globali. Il parametro mfrow permette di disporre piu’ grafici in una griglia.
# Creare una griglia 2x2 di grafici
par(mfrow = c(2, 2))
# Grafico 1: Scatter plot
plot(mtcars$wt, mtcars$mpg,
main = "Peso vs Consumo",
xlab = "Peso", ylab = "MPG",
col = "steelblue", pch = 19)
# Grafico 2: Istogramma
hist(mtcars$mpg,
main = "Distribuzione Consumo",
xlab = "MPG", col = "lightblue",
border = "darkblue")
# Grafico 3: Boxplot
boxplot(mpg ~ cyl, data = mtcars,
main = "Consumo per Cilindri",
col = c("lightblue", "lightyellow", "lightcoral"))
# Grafico 4: Grafico a barre
barplot(table(mtcars$cyl),
main = "Auto per Cilindri",
col = c("steelblue", "darkorange", "darkred"))
# Ripristinare il layout a singolo grafico
par(mfrow = c(1, 1))
Personalizzare i Margini
# Impostare margini personalizzati: c(bottom, left, top, right)
par(mar = c(5, 4, 3, 2))
plot(mtcars$wt, mtcars$mpg,
main = "Grafico con Margini Personalizzati",
xlab = "Peso", ylab = "MPG",
col = "steelblue", pch = 19)
# Ripristinare i parametri predefiniti
par(mar = c(5.1, 4.1, 4.1, 2.1))
Esempio Completo: Dashboard di Analisi
Ecco un esempio che crea una dashboard completa con dati realistici.
# Dati di vendita simulati
set.seed(42)
mesi <- month.abb
vendite_2024 <- round(rnorm(12, mean = 50000, sd = 10000))
vendite_2025 <- round(vendite_2024 * runif(12, 1.05, 1.25))
# Creare la dashboard
par(mfrow = c(2, 2), mar = c(4, 4, 3, 1))
# 1. Andamento vendite
plot(1:12, vendite_2024, type = "o", col = "steelblue", pch = 19, lwd = 2,
main = "Andamento Vendite Mensili",
xlab = "Mese", ylab = "Vendite (EUR)",
xaxt = "n", ylim = range(c(vendite_2024, vendite_2025)))
lines(1:12, vendite_2025, type = "o", col = "coral", pch = 17, lwd = 2)
axis(1, at = 1:12, labels = mesi, cex.axis = 0.7)
legend("topleft", legend = c("2024", "2025"),
col = c("steelblue", "coral"), pch = c(19, 17), lwd = 2, cex = 0.8)
# 2. Distribuzione vendite 2025
hist(vendite_2025, breaks = 6, col = "lightcoral", border = "darkred",
main = "Distribuzione Vendite 2025",
xlab = "Vendite (EUR)", ylab = "Frequenza")
abline(v = mean(vendite_2025), col = "blue", lwd = 2, lty = 2)
# 3. Confronto trimestri
trimestri <- c(sum(vendite_2025[1:3]), sum(vendite_2025[4:6]),
sum(vendite_2025[7:9]), sum(vendite_2025[10:12]))
barplot(trimestri, names.arg = c("Q1", "Q2", "Q3", "Q4"),
col = c("lightblue", "lightgreen", "lightyellow", "lightcoral"),
main = "Vendite per Trimestre 2025",
ylab = "Vendite (EUR)")
# 4. Crescita mensile (%)
crescita <- round((vendite_2025 - vendite_2024) / vendite_2024 * 100, 1)
barplot(crescita, names.arg = mesi, col = ifelse(crescita > 15, "darkgreen", "steelblue"),
main = "Crescita % Mensile (2024-2025)",
ylab = "Crescita %", las = 2, cex.names = 0.7)
abline(h = mean(crescita), col = "red", lty = 2, lwd = 2)
# Ripristinare
par(mfrow = c(1, 1), mar = c(5.1, 4.1, 4.1, 2.1))
Salvare i Grafici
Per salvare un grafico in un file si usano le funzioni dispositivo come png(), pdf() o jpeg().
# Salvare come PNG
png("grafico.png", width = 800, height = 600, res = 150)
plot(mtcars$wt, mtcars$mpg, main = "Peso vs Consumo",
col = "steelblue", pch = 19)
dev.off()
# Salvare come PDF
pdf("grafico.pdf", width = 8, height = 6)
hist(mtcars$mpg, col = "lightblue", main = "Distribuzione Consumo")
dev.off()
Conclusione
Il sistema grafico base di R e’ uno strumento potente e immediato per la visualizzazione dei dati. Con funzioni come plot(), hist(), barplot(), boxplot() e pie(), combinate con le opzioni di personalizzazione tramite par(), legend(), e i parametri col, pch, lty e lwd, e’ possibile creare grafici informativi e visivamente efficaci senza installare alcun pacchetto aggiuntivo. Per esigenze di visualizzazione piu’ sofisticate, si puo’ passare a ggplot2, che esploreremo nella prossima guida.