00
:
00
:
00
:
00
•Corso SEO AI - Usa SEOEMAIL al checkout per il 30% di sconto

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.