Διαγράμματα με την R

Αθανάσιος Σταυρακούδης

Εργαστήριο Εφαρμογών Πληροφορικής και Υπολογιστικών Οικονομικών

22/11/2023

Απλό διάγραμμα διασποράς σημείων

Ας υποθέσουμε πως θέλουμε να παρουσιάσουμε σε διάγραμμα τιμές μιας μεταβλητής. Εδώ έχουμε ένα παράδειγμα με 5 τιμές τις οποίες τοποθετούμε σε διάνυσμα με όνομα y.

Η εντολή plot μπορεί να χρησιμοποιηθεί για τη γραφική αναπαράσταση:

y <- c(12, 34, 21, 15, 20)
plot(y)

Οριζόντιος άξονας

Στο οριζόντιο άξονα υπάρχει απλά ένας σειριακός δείκτης, 1,2,3,4,5 που αντιστοιχεί στο 1:length(y). Αν επιθυμούμε μπορούμε να το τοποθετήσουμε απευθείας στην εντολή:

y <- c(12, 34, 21, 15, 20)
x <- 1:length(y)
plot(x, y)

Τύπος σημείων γραμμών

Αν δεν ορίσουμε τον τύπο γραφήματος, τότε θα τοποθετηθούν σημεία.

Αυτό υπονοεί την επιλογή type = “p”.

Μπορούμε να τα αλλάξουμε σε γραμμές που ενώνουν τα σημεία.

y <- c(12, 34, 21, 15, 20)
x <- 1:length(y)
plot(x, y, type = "l")

y <- c(12, 34, 21, 15, 20)
x <- 1:length(y)
plot(x, y, type = "b")

Άλλες επιλογές

  • type, θα αλλάξει τον τύπο της αναπαράστασης
  • main, θα τοποθετήσει ένα τίτλο στο γράφημα
  • xlab, θα αλλάξει τη λεζάντα του οριζόντιου άξονα
  • ylab, θα αλλάξει τη λεζάντα του κάθετου άξονα
  • pch, θα αλλάξει το σύμβολο σημείου
  • cex, θα αλλάξει το μέγεθος του συμβόλου σημείων
  • cex.axis, θα αλλάξει το μέγεθος γραμματοσειράς στον αριθμητκό άξονα
  • cex.names, θα αλλάξει το μέγεθος γραμματοσειράς στον οριζόντιο άξονα κατηγοριών
  • cex.lab, θα αλλάξει το μέγεθος γραμματοσειράς των τίτλων αξόνων
  • family, θα αλλάξει τη γραμματοσειρά
  • lwd, θα αλλάξει το πάχος της γραμμής
  • lty θα αλλάξει το στυλ της γραμμής
  • col, θα αλλάξει το χρώμα της γραμμής
  • col.lab, θα αλλάξει το χρώμα των τίτλων των αξόνων
  • fg, θα αλλάξει το χρώμα της γραμμής των αξόνων

Παράδειγμα

y <- c(12, 34, 21, 15, 20)
x <- seq(1:length(y))
plot(x, y, type = "b", main = "Γράφημα 1", xlab = "Θέση", 
     ylab = "Ποσότητα", pch = 18, cex = 2, lwd = 3, lty = 3,
     cex.axis = 1.2, cex.lab = 1.3, cex.main = 2,
     family = "Tahoma", col = "red", col.lab = "darkgreen", fg = "blue")

26 διαφορετικά σύμβολα σημείου

Code
k <- 0:25
plot(k, k, pch = k, cex = 2, axes = FALSE, xlab = "", ylab = "", ylim = c(-1, 25))
text(k, k, labels = k, pos = 1, cex = 1.5)

6 τύποι γραμμών

Code
plot(0:1, c(1, 1),  type = "l", lwd = 2, lty = 1, ylim = c(1, 6.5), axes = FALSE, xlab = "", ylab = "")
for (i in 2:6) {
  lines(0:1, c(i, i), lwd = 2, lty = i)
}
text(0, 1:6, labels = 1:6, pos = 2, cex = 2)

Γράφημα με δύο σειρές δεδομένων

Code
y1 <- c(12, 34, 21, 15, 20)
y2 <- c(10, 30, 18, 19, 22)
d <- c("ΔΕΥ", "ΤΡΙ", "ΤΕΤ", "ΠΕΜ", "ΠΑΡ")
plot(y1, col = "green", ylab = "Ποσότητα", type = "b", 
     ylim = c(0, 40), xaxt = "n", xlab = "Ημέρα")
lines(y2, col = "red", type = "b", pch = 2)
axis(1, labels = d, at = 1:length(d))
legend("topright", c("Amstel", "Heineken"), col = c("red", "green"), pch = c(1, 2), lty  = 1)

Τροποποίηση

Code
y1 <- c(12, 34, 21, 15, 20)
y2 <- c(10, 30, 18, 19, 22)
d <- c("ΔΕΥ", "ΤΡΙ", "ΤΕΤ", "ΠΕΜ", "ΠΑΡ")
plot(y1, type = "n", xaxt = "n", ylim = c(0,40), 
      xlab = "Ημέρα", ylab = "Ποσότητα")
lines(y1, col = "red",   type = "b", pch = 1, lwd = 1.5, lty = 2)
lines(y2, col = "green", type = "b", pch = 2, lwd = 1.5, lty = 1)
axis(1, labels = d, at = 1:length(d))
legend(3.5, 40, c("Amstel", "Heineken"), col = c("red","green"), 
      pch = c(1, 2), lwd = 2, lty = c(2, 1))

Απλό ραβδόγραμμα

pheight <- c(192, 207, 201, 196, 184)
pnames  <- c("Χριστόφορος", "Φίλιππος", "Παύλος", 
             "Δημήτρης", "Βασίλης")
barplot(pheight, names.arg = pnames,
        ylab = 'Ύψος', xlab = "Παίκτης", col = "gray")

Τροποποίηση, διαφορά από τη μέση τιμή

pheight <- c(192, 207, 201, 196, 184)
dheight <- mean(pheight) - pheight
pnames  <- c('Χριστόφορος', 'Φίλιππος', 'Παύλος', 
               'Δημήτρης', '&elΒασίλης')
barplot(dheight, names.arg=pnames, 
          ylab='Ύψος', xlab='Παίκτης', col = 'gray')

Ραβδόγραμμα με δύο σειρές δεδομένων

Code
Amstel <- c(12, 34, 21, 15, 20)
Heineken <- c(10, 30, 18, 19, 22)
days <- c("ΔΕΥ", "ΤΡΙ", "ΤΕΤ", "ΠΕΜ", "ΠΑΡ")
beer <- cbind(Amstel, Heineken)
barplot(beer, ylab = "Ποσότητα",  xlab = "Μπύρα", 
         ylim = c(0, 40), beside = TRUE)
legend('topright', days, fill = gray.colors(5))

Θηκόγραμμα

mtcars

Λίστα με χαρακτηριστικά αυτοκινήτων (του 1974)

                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2

mpg : miles per gallon (κατανάλωση καυσίμου)

Πως οπτικοποιούμε τη μεταβλητότητα μιας ποσοτικής μεταβλητής;

Υπολογισμοί και οπτικοποίηση σε θηκόγραμμα

summary(mtcars$mpg)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  10.40   15.43   19.20   20.09   22.80   33.90 
IQR(mtcars$mpg)
[1] 7.375
median(mtcars$mpg) - 1.5*IQR(mtcars$mpg)
[1] 8.1375
median(mtcars$mpg) + 1.5*IQR(mtcars$mpg)
[1] 30.2625
boxplot(mtcars$mpg)

Ιστόγραμμα

Ένα απλό ιστόγραμμα

Το ιστόγραμμα γίνεται με την εντολή hist.

Για παράδειγμα, το ιστόγραμμα μιας μεταβλητής που έχει 1000 τυχαίους αριθμούς της τυπικής κανονικής κατανομής είναι:

y <- rnorm(1000)
hist(y)

Παράμετροι ιστογράμματος

Όπως και σε άλλες περιπτώσεις, υπάρχουν διάφορες επιλογές που μπορεί ο χρήστης να “επέμβει”. Πχ, να αλλάξει το πλήθος των των τάξεων (nclass), να αλλάξει τα όρια των αξόνων (xlim, ylim) ή να αλλάξει την απεικόνιση από συχνότητα σε πυκνότητα (freq = FALSE).

y <- rnorm(1000)
hist(y, nclass = 15, xlim = c(-4, 4), ylim = c(0, 0.5), freq = FALSE)

Πολύγωνο συχνοτήτων

br <- seq(-4, 4, by = 0.5)
a  <- hist(y, breaks = br, plot = FALSE)
hist(y, main = "", breaks = br, col = "lightgreen", 
     border = FALSE, xlab = "", ylab = "Συχνότητα")
lines(a$mids, a$counts, type = "o", lwd = 3, 
      col = "firebrick", pch = 18)