Let us explore some common geoms. Look also at OrgPad and at the ggplot2 cheatsheet by RStudio.

library(tidyverse)

A large dataset at a glance:

glimpse(diamonds)
Rows: 53,940
Columns: 10
$ carat   <dbl> 0.23, 0.21, 0.23, 0.29, 0.31, 0.24, 0.24, 0.26, 0.22, 0.23, …
$ cut     <ord> Ideal, Premium, Good, Premium, Good, Very Good, Very Good, V…
$ color   <ord> E, E, E, I, J, J, I, H, E, H, J, J, F, J, E, E, I, J, J, J, …
$ clarity <ord> SI2, SI1, VS1, VS2, SI2, VVS2, VVS1, SI1, VS2, VS1, SI1, VS1…
$ depth   <dbl> 61.5, 59.8, 56.9, 62.4, 63.3, 62.8, 62.3, 61.9, 65.1, 59.4, …
$ table   <dbl> 55, 61, 65, 58, 58, 57, 57, 55, 61, 61, 55, 56, 61, 54, 62, …
$ price   <int> 326, 326, 327, 334, 335, 336, 336, 337, 337, 338, 339, 340, …
$ x       <dbl> 3.95, 3.89, 4.05, 4.20, 4.34, 3.94, 3.95, 4.07, 3.87, 4.00, …
$ y       <dbl> 3.98, 3.84, 4.07, 4.23, 4.35, 3.96, 3.98, 4.11, 3.78, 4.05, …
$ z       <dbl> 2.43, 2.31, 2.31, 2.63, 2.75, 2.48, 2.47, 2.53, 2.49, 2.39, …
summary(diamonds)
     carat               cut        color        clarity          depth      
 Min.   :0.2000   Fair     : 1610   D: 6775   SI1    :13065   Min.   :43.00  
 1st Qu.:0.4000   Good     : 4906   E: 9797   VS2    :12258   1st Qu.:61.00  
 Median :0.7000   Very Good:12082   F: 9542   SI2    : 9194   Median :61.80  
 Mean   :0.7979   Premium  :13791   G:11292   VS1    : 8171   Mean   :61.75  
 3rd Qu.:1.0400   Ideal    :21551   H: 8304   VVS2   : 5066   3rd Qu.:62.50  
 Max.   :5.0100                     I: 5422   VVS1   : 3655   Max.   :79.00  
                                    J: 2808   (Other): 2531                  
     table           price             x                y         
 Min.   :43.00   Min.   :  326   Min.   : 0.000   Min.   : 0.000  
 1st Qu.:56.00   1st Qu.:  950   1st Qu.: 4.710   1st Qu.: 4.720  
 Median :57.00   Median : 2401   Median : 5.700   Median : 5.710  
 Mean   :57.46   Mean   : 3933   Mean   : 5.731   Mean   : 5.735  
 3rd Qu.:59.00   3rd Qu.: 5324   3rd Qu.: 6.540   3rd Qu.: 6.540  
 Max.   :95.00   Max.   :18823   Max.   :10.740   Max.   :58.900  
                                                                  
       z         
 Min.   : 0.000  
 1st Qu.: 2.910  
 Median : 3.530  
 Mean   : 3.539  
 3rd Qu.: 4.040  
 Max.   :31.800  
                 

geom_histogram for one continuous variable

diamonds %>% 
  ggplot() + geom_histogram(mapping = aes(x = price, y = ..count..),
                            binwidth = 500) #bin represents 500 USD

NA

Help:

Computed variables

count

    number of points in bin
density

    density of points in bin, scaled to integrate to 1
ncount

    count, scaled to maximum of 1
ndensity

    density, scaled to maximum of 1

geom_bar for one discrete variable

diamonds %>% 
  ggplot() + geom_bar(mapping = aes(x = clarity))

geom_bar for two discrete variables. Position

diamonds %>% 
  ggplot() + geom_bar(mapping = aes(x = clarity, fill = cut), position = "stack")

diamonds %>% 
  ggplot() + geom_bar(mapping = aes(x = clarity, fill = cut), position = "fill")

diamonds %>% 
  ggplot() + geom_bar(mapping = aes(x = clarity, fill = cut), position = "dodge")

diamonds %>% 
  ggplot(mapping = aes(x = clarity, y = carat, color = cut)) + 
  geom_point(position = position_jitterdodge(jitter.width = 0.4, jitter.height = 0.2, dodge.width = 0.5)  ) 

geom_point and its derived plots

A good dataset to demonstrate geom_point() is diamonds, because they have many observations and we will have to deal with overplotting (too many points in the exact same place).

glimpse(diamonds)
Rows: 53,940
Columns: 10
$ carat   <dbl> 0.23, 0.21, 0.23, 0.29, 0.31, 0.24, 0.24, 0.26, 0.22, 0.23, …
$ cut     <ord> Ideal, Premium, Good, Premium, Good, Very Good, Very Good, V…
$ color   <ord> E, E, E, I, J, J, I, H, E, H, J, J, F, J, E, E, I, J, J, J, …
$ clarity <ord> SI2, SI1, VS1, VS2, SI2, VVS2, VVS1, SI1, VS2, VS1, SI1, VS1…
$ depth   <dbl> 61.5, 59.8, 56.9, 62.4, 63.3, 62.8, 62.3, 61.9, 65.1, 59.4, …
$ table   <dbl> 55, 61, 65, 58, 58, 57, 57, 55, 61, 61, 55, 56, 61, 54, 62, …
$ price   <int> 326, 326, 327, 334, 335, 336, 336, 337, 337, 338, 339, 340, …
$ x       <dbl> 3.95, 3.89, 4.05, 4.20, 4.34, 3.94, 3.95, 4.07, 3.87, 4.00, …
$ y       <dbl> 3.98, 3.84, 4.07, 4.23, 4.35, 3.96, 3.98, 4.11, 3.78, 4.05, …
$ z       <dbl> 2.43, 2.31, 2.31, 2.63, 2.75, 2.48, 2.47, 2.53, 2.49, 2.39, …
summary(diamonds)
     carat               cut        color        clarity          depth      
 Min.   :0.2000   Fair     : 1610   D: 6775   SI1    :13065   Min.   :43.00  
 1st Qu.:0.4000   Good     : 4906   E: 9797   VS2    :12258   1st Qu.:61.00  
 Median :0.7000   Very Good:12082   F: 9542   SI2    : 9194   Median :61.80  
 Mean   :0.7979   Premium  :13791   G:11292   VS1    : 8171   Mean   :61.75  
 3rd Qu.:1.0400   Ideal    :21551   H: 8304   VVS2   : 5066   3rd Qu.:62.50  
 Max.   :5.0100                     I: 5422   VVS1   : 3655   Max.   :79.00  
                                    J: 2808   (Other): 2531                  
     table           price             x                y         
 Min.   :43.00   Min.   :  326   Min.   : 0.000   Min.   : 0.000  
 1st Qu.:56.00   1st Qu.:  950   1st Qu.: 4.710   1st Qu.: 4.720  
 Median :57.00   Median : 2401   Median : 5.700   Median : 5.710  
 Mean   :57.46   Mean   : 3933   Mean   : 5.731   Mean   : 5.735  
 3rd Qu.:59.00   3rd Qu.: 5324   3rd Qu.: 6.540   3rd Qu.: 6.540  
 Max.   :95.00   Max.   :18823   Max.   :10.740   Max.   :58.900  
                                                                  
       z         
 Min.   : 0.000  
 1st Qu.: 2.910  
 Median : 3.530  
 Mean   : 3.539  
 3rd Qu.: 4.040  
 Max.   :31.800  
                 

Relations between two continuous variables - and optional other variables, as seen below.

diamonds %>% 
  ggplot(mapping = aes(x = carat, y = price)) + 
  geom_point(stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, 
             inherit.aes = TRUE) #default parameter values added, explain

Deal with overplotting ## alpha

diamonds %>% 
  ggplot(mapping = aes(x = carat, y = price)) + 
  geom_point(stat = "identity", position = "identity", alpha = 0.1) #alpha added

tiny shape

diamonds %>% 
  ggplot(mapping = aes(x = carat, y = price)) + 
  #geom_point(stat = "identity", position = "identity", shape = ".") +
  stat_identity()

#position
diamonds %>% ggplot(mapping = aes(x = cut, y = ..count..)) + geom_histogram(stat = "count")
Ignoring unknown parameters: binwidth, bins, pad

geom_hex

diamonds %>% 
  ggplot(mapping = aes(x = carat, y = price)) + 
  geom_hex(bins = 20)+ 
  scale_x_continuous(breaks = seq(from = 0,to = 5, by = 0.5)) +
  scale_y_continuous(breaks = seq(from = 0, to = max(diamonds$price), by = 1000))

diamonds %>% 
  ggplot(mapping = aes(x = carat, y = price)) + 
  geom_density_2d_filled(contour_var = "count", binwidth = 10) + 
  scale_x_continuous(breaks = seq(from = 0,to = 5, by = 0.5)) +
  scale_y_continuous(breaks = seq(from = 0, to = max(diamonds$price), by = 1000))

diamonds %>% 
  ggplot(mapping = aes(x = carat, y = price)) + 
  geom_smooth(method = "gam")

jitter when dataset smaller

The table variable has fewer values than the other numeric ones

diamonds %>% 
  ggplot() + geom_histogram(mapping = aes(x = table, y = ..count..), binwidth = 1)

With carat is going to be overplotted. This can impossibly be over 53,000 items. Table increments by 1.

diamonds %>% 
  ggplot() + geom_point(mapping = aes(x = table, y = carat), shape = ".")

diamonds %>% 
  ggplot() + geom_point(mapping = aes(x = table, y = carat), 
                        position = position_jitter(width = 0.6, height = 0.05, seed = 1222 
                                                   ), 
                        shape = ".")

geom_count for two discrete variables

diamonds %>% 
  ggplot(mapping = aes(x = cut, y = clarity)) +
  geom_count()

LS0tCnRpdGxlOiAiVGhpcyB0aW1lIHJlYWxseSBhYm91dCBnZW9tcyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQpMZXQgdXMgZXhwbG9yZSBzb21lIGNvbW1vbiBnZW9tcy4gTG9vayBhbHNvIGF0IE9yZ1BhZCBhbmQgYXQgdGhlIGdncGxvdDIgCmNoZWF0c2hlZXQgYnkgUlN0dWRpby4KCgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmBgYAoKQSBsYXJnZSBkYXRhc2V0IGF0IGEgZ2xhbmNlOiAKCmBgYHtyfQpnbGltcHNlKGRpYW1vbmRzKQpgYGAKCmBgYHtyfQpzdW1tYXJ5KGRpYW1vbmRzKQpgYGAKCiMgYGdlb21faGlzdG9ncmFtYCBmb3Igb25lIGNvbnRpbnVvdXMgdmFyaWFibGUgCmBgYHtyfQpkaWFtb25kcyAlPiUgCiAgZ2dwbG90KCkgKyBnZW9tX2hpc3RvZ3JhbShtYXBwaW5nID0gYWVzKHggPSBwcmljZSwgeSA9IC4uY291bnQuLiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW53aWR0aCA9IDUwMCkgI2JpbiByZXByZXNlbnRzIDUwMCBVU0QKICAKYGBgCkhlbHA6IAoKYGBgCkNvbXB1dGVkIHZhcmlhYmxlcwoKY291bnQKCiAgICBudW1iZXIgb2YgcG9pbnRzIGluIGJpbgpkZW5zaXR5CgogICAgZGVuc2l0eSBvZiBwb2ludHMgaW4gYmluLCBzY2FsZWQgdG8gaW50ZWdyYXRlIHRvIDEKbmNvdW50CgogICAgY291bnQsIHNjYWxlZCB0byBtYXhpbXVtIG9mIDEKbmRlbnNpdHkKCiAgICBkZW5zaXR5LCBzY2FsZWQgdG8gbWF4aW11bSBvZiAxCmBgYAoKIyBgZ2VvbV9iYXJgIGZvciBvbmUgZGlzY3JldGUgdmFyaWFibGUKYGBge3J9CmRpYW1vbmRzICU+JSAKICBnZ3Bsb3QoKSArIGdlb21fYmFyKG1hcHBpbmcgPSBhZXMoeCA9IGNsYXJpdHkpKQpgYGAKCgojIGBnZW9tX2JhcmAgZm9yIHR3byBkaXNjcmV0ZSB2YXJpYWJsZXMuIFBvc2l0aW9uCgpgYGB7cn0KZGlhbW9uZHMgJT4lIAogIGdncGxvdCgpICsgZ2VvbV9iYXIobWFwcGluZyA9IGFlcyh4ID0gY2xhcml0eSwgZmlsbCA9IGN1dCksIHBvc2l0aW9uID0gInN0YWNrIikKYGBgCgoKCmBgYHtyfQpkaWFtb25kcyAlPiUgCiAgZ2dwbG90KCkgKyBnZW9tX2JhcihtYXBwaW5nID0gYWVzKHggPSBjbGFyaXR5LCBmaWxsID0gY3V0KSwgcG9zaXRpb24gPSAiZmlsbCIpCmBgYAoKYGBge3J9CmRpYW1vbmRzICU+JSAKICBnZ3Bsb3QoKSArIGdlb21fYmFyKG1hcHBpbmcgPSBhZXMoeCA9IGNsYXJpdHksIGZpbGwgPSBjdXQpLCBwb3NpdGlvbiA9ICJkb2RnZSIpCmBgYAoKCmBgYHtyfQpkaWFtb25kcyAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGNsYXJpdHksIHkgPSBjYXJhdCwgY29sb3IgPSBjdXQpKSArIAogIGdlb21fcG9pbnQocG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXJkb2RnZShqaXR0ZXIud2lkdGggPSAwLjQsIGppdHRlci5oZWlnaHQgPSAwLjIsIGRvZGdlLndpZHRoID0gMC41KSAgKSAKYGBgCgoKIyBgZ2VvbV9wb2ludGAgYW5kIGl0cyBkZXJpdmVkIHBsb3RzCkEgZ29vZCBkYXRhc2V0IHRvIGRlbW9uc3RyYXRlIGBnZW9tX3BvaW50KClgIGlzIGBkaWFtb25kc2AsIGJlY2F1c2UgdGhleSBoYXZlIAptYW55IG9ic2VydmF0aW9ucyBhbmQgd2Ugd2lsbCBoYXZlIHRvIGRlYWwgd2l0aCBvdmVycGxvdHRpbmcgKHRvbyBtYW55IHBvaW50cyBpbiAKdGhlIGV4YWN0IHNhbWUgcGxhY2UpLiAKCmBgYHtyfQpnbGltcHNlKGRpYW1vbmRzKQpgYGAKYGBge3J9CnN1bW1hcnkoZGlhbW9uZHMpCmBgYAoKClJlbGF0aW9ucyBiZXR3ZWVuIHR3byBjb250aW51b3VzIHZhcmlhYmxlcyAtIGFuZCBvcHRpb25hbCBvdGhlciB2YXJpYWJsZXMsIGFzIHNlZW4gYmVsb3cuCgpgYGB7cn0KZGlhbW9uZHMgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBjYXJhdCwgeSA9IHByaWNlKSkgKyAKICBnZW9tX3BvaW50KHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9ICJpZGVudGl0eSIsIG5hLnJtID0gRkFMU0UsIHNob3cubGVnZW5kID0gTkEsIAogICAgICAgICAgICAgaW5oZXJpdC5hZXMgPSBUUlVFKSAjZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIGFkZGVkLCBleHBsYWluCmBgYApEZWFsIHdpdGggb3ZlcnBsb3R0aW5nCiMjIGFscGhhIApgYGB7cn0KZGlhbW9uZHMgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBjYXJhdCwgeSA9IHByaWNlKSkgKyAKICBnZW9tX3BvaW50KHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9ICJpZGVudGl0eSIsIGFscGhhID0gMC4xKSAjYWxwaGEgYWRkZWQKYGBgCgojIyB0aW55IHNoYXBlCgpgYGB7cn0KZGlhbW9uZHMgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBjYXJhdCwgeSA9IHByaWNlKSkgKyAKICAjZ2VvbV9wb2ludChzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiaWRlbnRpdHkiLCBzaGFwZSA9ICIuIikgKwogIHN0YXRfaWRlbnRpdHkoKQojcG9zaXRpb24KYGBgCgpgYGB7cn0KZGlhbW9uZHMgJT4lIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBjdXQsIHkgPSAuLmNvdW50Li4pKSArIGdlb21faGlzdG9ncmFtKHN0YXQgPSAiY291bnQiKQpgYGAKYGBge3J9CmRpYW1vbmRzICU+JSBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gY3V0LCB5ID0gLi5jb3VudC4uKSkgKyBnZW9tX2JhcihzdGF0ID0gImNvdW50IikKYGBgCgoKCiMjIGBnZW9tX2hleGAKCmBgYHtyfQpkaWFtb25kcyAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGNhcmF0LCB5ID0gcHJpY2UpKSArIAogIGdlb21faGV4KGJpbnMgPSAyMCkrIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoZnJvbSA9IDAsdG8gPSA1LCBieSA9IDAuNSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKGZyb20gPSAwLCB0byA9IG1heChkaWFtb25kcyRwcmljZSksIGJ5ID0gMTAwMCkpCmBgYAoKCmBgYHtyfQpkaWFtb25kcyAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGNhcmF0LCB5ID0gcHJpY2UpKSArIAogIGdlb21fZGVuc2l0eV8yZF9maWxsZWQoY29udG91cl92YXIgPSAiY291bnQiLCBiaW53aWR0aCA9IDEwKSArIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoZnJvbSA9IDAsdG8gPSA1LCBieSA9IDAuNSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKGZyb20gPSAwLCB0byA9IG1heChkaWFtb25kcyRwcmljZSksIGJ5ID0gMTAwMCkpCmBgYAoKCmBgYHtyfQpkaWFtb25kcyAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGNhcmF0LCB5ID0gcHJpY2UpKSArIAogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJnYW0iKQpgYGAKIyMgYGppdHRlcmAgd2hlbiBkYXRhc2V0IHNtYWxsZXIgClRoZSBgdGFibGUgdmFyaWFibGUgaGFzIGZld2VyIHZhbHVlcyB0aGFuIHRoZSBvdGhlciBudW1lcmljIG9uZXNgCmBgYHtyfQpkaWFtb25kcyAlPiUgCiAgZ2dwbG90KCkgKyBnZW9tX2hpc3RvZ3JhbShtYXBwaW5nID0gYWVzKHggPSB0YWJsZSwgeSA9IC4uY291bnQuLiksIGJpbndpZHRoID0gMSkKYGBgCgpXaXRoIGNhcmF0IGlzIGdvaW5nIHRvIGJlIG92ZXJwbG90dGVkLiBUaGlzIGNhbiBpbXBvc3NpYmx5IGJlIG92ZXIgNTMsMDAwIGl0ZW1zLiAKVGFibGUgaW5jcmVtZW50cyBieSAxLiAKYGBge3J9CmRpYW1vbmRzICU+JSAKICBnZ3Bsb3QoKSArIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gdGFibGUsIHkgPSBjYXJhdCksIHNoYXBlID0gIi4iKQpgYGAKCgpgYGB7cn0KZGlhbW9uZHMgJT4lIAogIGdncGxvdCgpICsgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSB0YWJsZSwgeSA9IGNhcmF0KSwgCiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyKHdpZHRoID0gMC42LCBoZWlnaHQgPSAwLjA1LCBzZWVkID0gMTIyMiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwgCiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlID0gIi4iKQpgYGAKCgojIyBgZ2VvbV9jb3VudGAgZm9yIHR3byBkaXNjcmV0ZSB2YXJpYWJsZXMKCmBgYHtyfQpkaWFtb25kcyAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGN1dCwgeSA9IGNsYXJpdHkpKSArCiAgZ2VvbV9jb3VudCgpCmBgYAoKCgo=