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, 0.30, 0.23, 0.22, 0...
$ cut     <ord> Ideal, Premium, Good, Premium, Good, Very Good, Very Good, Very Good, Fair, Ver...
$ color   <ord> E, E, E, I, J, J, I, H, E, H, J, J, F, J, E, E, I, J, J, J, I, E, H, J, J, G, I...
$ clarity <ord> SI2, SI1, VS1, VS2, SI2, VVS2, VVS1, SI1, VS2, VS1, SI1, VS1, SI1, SI2, SI2, I1...
$ depth   <dbl> 61.5, 59.8, 56.9, 62.4, 63.3, 62.8, 62.3, 61.9, 65.1, 59.4, 64.0, 62.8, 60.4, 6...
$ table   <dbl> 55, 61, 65, 58, 58, 57, 57, 55, 61, 61, 55, 56, 61, 54, 62, 58, 54, 54, 56, 59,...
$ price   <int> 326, 326, 327, 334, 335, 336, 336, 337, 337, 338, 339, 340, 342, 344, 345, 345,...
$ x       <dbl> 3.95, 3.89, 4.05, 4.20, 4.34, 3.94, 3.95, 4.07, 3.87, 4.00, 4.25, 3.93, 3.88, 4...
$ y       <dbl> 3.98, 3.84, 4.07, 4.23, 4.35, 3.96, 3.98, 4.11, 3.78, 4.05, 4.28, 3.90, 3.84, 4...
$ z       <dbl> 2.43, 2.31, 2.31, 2.63, 2.75, 2.48, 2.47, 2.53, 2.49, 2.39, 2.73, 2.46, 2.33, 2...
summary(diamonds)
     carat               cut        color        clarity          depth           table      
 Min.   :0.2000   Fair     : 1610   D: 6775   SI1    :13065   Min.   :43.00   Min.   :43.00  
 1st Qu.:0.4000   Good     : 4906   E: 9797   VS2    :12258   1st Qu.:61.00   1st Qu.:56.00  
 Median :0.7000   Very Good:12082   F: 9542   SI2    : 9194   Median :61.80   Median :57.00  
 Mean   :0.7979   Premium  :13791   G:11292   VS1    : 8171   Mean   :61.75   Mean   :57.46  
 3rd Qu.:1.0400   Ideal    :21551   H: 8304   VVS2   : 5066   3rd Qu.:62.50   3rd Qu.:59.00  
 Max.   :5.0100                     I: 5422   VVS1   : 3655   Max.   :79.00   Max.   :95.00  
                                    J: 2808   (Other): 2531                                  
     price             x                y                z         
 Min.   :  326   Min.   : 0.000   Min.   : 0.000   Min.   : 0.000  
 1st Qu.:  950   1st Qu.: 4.710   1st Qu.: 4.720   1st Qu.: 2.910  
 Median : 2401   Median : 5.700   Median : 5.710   Median : 3.530  
 Mean   : 3933   Mean   : 5.731   Mean   : 5.735   Mean   : 3.539  
 3rd Qu.: 5324   3rd Qu.: 6.540   3rd Qu.: 6.540   3rd Qu.: 4.040  
 Max.   :18823   Max.   :10.740   Max.   :58.900   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")

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, 0.30, 0.23, 0.22, 0...
$ cut     <ord> Ideal, Premium, Good, Premium, Good, Very Good, Very Good, Very Good, Fair, Ver...
$ color   <ord> E, E, E, I, J, J, I, H, E, H, J, J, F, J, E, E, I, J, J, J, I, E, H, J, J, G, I...
$ clarity <ord> SI2, SI1, VS1, VS2, SI2, VVS2, VVS1, SI1, VS2, VS1, SI1, VS1, SI1, SI2, SI2, I1...
$ depth   <dbl> 61.5, 59.8, 56.9, 62.4, 63.3, 62.8, 62.3, 61.9, 65.1, 59.4, 64.0, 62.8, 60.4, 6...
$ table   <dbl> 55, 61, 65, 58, 58, 57, 57, 55, 61, 61, 55, 56, 61, 54, 62, 58, 54, 54, 56, 59,...
$ price   <int> 326, 326, 327, 334, 335, 336, 336, 337, 337, 338, 339, 340, 342, 344, 345, 345,...
$ x       <dbl> 3.95, 3.89, 4.05, 4.20, 4.34, 3.94, 3.95, 4.07, 3.87, 4.00, 4.25, 3.93, 3.88, 4...
$ y       <dbl> 3.98, 3.84, 4.07, 4.23, 4.35, 3.96, 3.98, 4.11, 3.78, 4.05, 4.28, 3.90, 3.84, 4...
$ z       <dbl> 2.43, 2.31, 2.31, 2.63, 2.75, 2.48, 2.47, 2.53, 2.49, 2.39, 2.73, 2.46, 2.33, 2...
summary(diamonds)
     carat               cut        color        clarity          depth           table      
 Min.   :0.2000   Fair     : 1610   D: 6775   SI1    :13065   Min.   :43.00   Min.   :43.00  
 1st Qu.:0.4000   Good     : 4906   E: 9797   VS2    :12258   1st Qu.:61.00   1st Qu.:56.00  
 Median :0.7000   Very Good:12082   F: 9542   SI2    : 9194   Median :61.80   Median :57.00  
 Mean   :0.7979   Premium  :13791   G:11292   VS1    : 8171   Mean   :61.75   Mean   :57.46  
 3rd Qu.:1.0400   Ideal    :21551   H: 8304   VVS2   : 5066   3rd Qu.:62.50   3rd Qu.:59.00  
 Max.   :5.0100                     I: 5422   VVS1   : 3655   Max.   :79.00   Max.   :95.00  
                                    J: 2808   (Other): 2531                                  
     price             x                y                z         
 Min.   :  326   Min.   : 0.000   Min.   : 0.000   Min.   : 0.000  
 1st Qu.:  950   1st Qu.: 4.710   1st Qu.: 4.720   1st Qu.: 2.910  
 Median : 2401   Median : 5.700   Median : 5.710   Median : 3.530  
 Mean   : 3933   Mean   : 5.731   Mean   : 5.735   Mean   : 3.539  
 3rd Qu.: 5324   3rd Qu.: 6.540   3rd Qu.: 6.540   3rd Qu.: 4.040  
 Max.   :18823   Max.   :10.740   Max.   :58.900   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 = ".") #position

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()

LS0tDQp0aXRsZTogIlRoaXMgdGltZSByZWFsbHkgYWJvdXQgZ2VvbXMiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KTGV0IHVzIGV4cGxvcmUgc29tZSBjb21tb24gZ2VvbXMuIExvb2sgYWxzbyBhdCBPcmdQYWQgYW5kIGF0IHRoZSBnZ3Bsb3QyIA0KY2hlYXRzaGVldCBieSBSU3R1ZGlvLg0KDQoNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpgYGANCg0KQSBsYXJnZSBkYXRhc2V0IGF0IGEgZ2xhbmNlOiANCg0KYGBge3J9DQpnbGltcHNlKGRpYW1vbmRzKQ0KYGBgDQoNCmBgYHtyfQ0Kc3VtbWFyeShkaWFtb25kcykNCmBgYA0KDQojIGBnZW9tX2hpc3RvZ3JhbWAgZm9yIG9uZSBjb250aW51b3VzIHZhcmlhYmxlIA0KYGBge3J9DQpkaWFtb25kcyAlPiUgDQogIGdncGxvdCgpICsgZ2VvbV9oaXN0b2dyYW0obWFwcGluZyA9IGFlcyh4ID0gcHJpY2UsIHkgPSAuLmNvdW50Li4pLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbndpZHRoID0gNTAwKSAjYmluIHJlcHJlc2VudHMgNTAwIFVTRA0KICANCmBgYA0KSGVscDogDQoNCmBgYA0KQ29tcHV0ZWQgdmFyaWFibGVzDQoNCmNvdW50DQoNCiAgICBudW1iZXIgb2YgcG9pbnRzIGluIGJpbg0KZGVuc2l0eQ0KDQogICAgZGVuc2l0eSBvZiBwb2ludHMgaW4gYmluLCBzY2FsZWQgdG8gaW50ZWdyYXRlIHRvIDENCm5jb3VudA0KDQogICAgY291bnQsIHNjYWxlZCB0byBtYXhpbXVtIG9mIDENCm5kZW5zaXR5DQoNCiAgICBkZW5zaXR5LCBzY2FsZWQgdG8gbWF4aW11bSBvZiAxDQpgYGANCg0KIyBgZ2VvbV9iYXJgIGZvciBvbmUgZGlzY3JldGUgdmFyaWFibGUNCmBgYHtyfQ0KZGlhbW9uZHMgJT4lIA0KICBnZ3Bsb3QoKSArIGdlb21fYmFyKG1hcHBpbmcgPSBhZXMoeCA9IGNsYXJpdHkpKQ0KYGBgDQoNCg0KIyBgZ2VvbV9iYXJgIGZvciB0d28gZGlzY3JldGUgdmFyaWFibGVzLiBQb3NpdGlvbg0KDQpgYGB7cn0NCmRpYW1vbmRzICU+JSANCiAgZ2dwbG90KCkgKyBnZW9tX2JhcihtYXBwaW5nID0gYWVzKHggPSBjbGFyaXR5LCBmaWxsID0gY3V0KSwgcG9zaXRpb24gPSAic3RhY2siKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCmRpYW1vbmRzICU+JSANCiAgZ2dwbG90KCkgKyBnZW9tX2JhcihtYXBwaW5nID0gYWVzKHggPSBjbGFyaXR5LCBmaWxsID0gY3V0KSwgcG9zaXRpb24gPSAiZmlsbCIpDQpgYGANCg0KYGBge3J9DQpkaWFtb25kcyAlPiUgDQogIGdncGxvdCgpICsgZ2VvbV9iYXIobWFwcGluZyA9IGFlcyh4ID0gY2xhcml0eSwgZmlsbCA9IGN1dCksIHBvc2l0aW9uID0gImRvZGdlIikNCmBgYA0KDQoNCmBgYHtyfQ0KDQpgYGANCg0KDQojIGBnZW9tX3BvaW50YCBhbmQgaXRzIGRlcml2ZWQgcGxvdHMNCkEgZ29vZCBkYXRhc2V0IHRvIGRlbW9uc3RyYXRlIGBnZW9tX3BvaW50KClgIGlzIGBkaWFtb25kc2AsIGJlY2F1c2UgdGhleSBoYXZlIA0KbWFueSBvYnNlcnZhdGlvbnMgYW5kIHdlIHdpbGwgaGF2ZSB0byBkZWFsIHdpdGggb3ZlcnBsb3R0aW5nICh0b28gbWFueSBwb2ludHMgaW4gDQp0aGUgZXhhY3Qgc2FtZSBwbGFjZSkuIA0KDQpgYGB7cn0NCmdsaW1wc2UoZGlhbW9uZHMpDQpgYGANCmBgYHtyfQ0Kc3VtbWFyeShkaWFtb25kcykNCmBgYA0KDQoNClJlbGF0aW9ucyBiZXR3ZWVuIHR3byBjb250aW51b3VzIHZhcmlhYmxlcyAtIGFuZCBvcHRpb25hbCBvdGhlciB2YXJpYWJsZXMsIGFzIHNlZW4gYmVsb3cuDQoNCmBgYHtyfQ0KZGlhbW9uZHMgJT4lIA0KICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gY2FyYXQsIHkgPSBwcmljZSkpICsgDQogIGdlb21fcG9pbnQoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImlkZW50aXR5IiwgbmEucm0gPSBGQUxTRSwgc2hvdy5sZWdlbmQgPSBOQSwgDQogICAgICAgICAgICAgaW5oZXJpdC5hZXMgPSBUUlVFKSAjZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIGFkZGVkLCBleHBsYWluDQpgYGANCkRlYWwgd2l0aCBvdmVycGxvdHRpbmcNCiMjIGFscGhhIA0KYGBge3J9DQpkaWFtb25kcyAlPiUgDQogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBjYXJhdCwgeSA9IHByaWNlKSkgKyANCiAgZ2VvbV9wb2ludChzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiaWRlbnRpdHkiLCBhbHBoYSA9IDAuMSkgI2FscGhhIGFkZGVkDQpgYGANCg0KIyMgdGlueSBzaGFwZQ0KDQpgYGB7cn0NCmRpYW1vbmRzICU+JSANCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGNhcmF0LCB5ID0gcHJpY2UpKSArIA0KICBnZW9tX3BvaW50KHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9ICJpZGVudGl0eSIsIHNoYXBlID0gIi4iKSAjcG9zaXRpb24NCmBgYA0KIyMgYGdlb21faGV4YA0KDQpgYGB7cn0NCmRpYW1vbmRzICU+JSANCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGNhcmF0LCB5ID0gcHJpY2UpKSArIA0KICBnZW9tX2hleChiaW5zID0gMjApKyANCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcShmcm9tID0gMCx0byA9IDUsIGJ5ID0gMC41KSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKGZyb20gPSAwLCB0byA9IG1heChkaWFtb25kcyRwcmljZSksIGJ5ID0gMTAwMCkpDQpgYGANCg0KDQpgYGB7cn0NCmRpYW1vbmRzICU+JSANCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGNhcmF0LCB5ID0gcHJpY2UpKSArIA0KICBnZW9tX2RlbnNpdHlfMmRfZmlsbGVkKGNvbnRvdXJfdmFyID0gImNvdW50IiwgYmlud2lkdGggPSAxMCkgKyANCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcShmcm9tID0gMCx0byA9IDUsIGJ5ID0gMC41KSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKGZyb20gPSAwLCB0byA9IG1heChkaWFtb25kcyRwcmljZSksIGJ5ID0gMTAwMCkpDQpgYGANCg0KDQpgYGB7cn0NCmRpYW1vbmRzICU+JSANCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGNhcmF0LCB5ID0gcHJpY2UpKSArIA0KICBnZW9tX3Ntb290aChtZXRob2QgPSAiZ2FtIikNCmBgYA0KIyMgYGppdHRlcmAgd2hlbiBkYXRhc2V0IHNtYWxsZXIgDQpUaGUgYHRhYmxlIHZhcmlhYmxlIGhhcyBmZXdlciB2YWx1ZXMgdGhhbiB0aGUgb3RoZXIgbnVtZXJpYyBvbmVzYA0KYGBge3J9DQpkaWFtb25kcyAlPiUgDQogIGdncGxvdCgpICsgZ2VvbV9oaXN0b2dyYW0obWFwcGluZyA9IGFlcyh4ID0gdGFibGUsIHkgPSAuLmNvdW50Li4pLCBiaW53aWR0aCA9IDEpDQpgYGANCg0KV2l0aCBjYXJhdCBpcyBnb2luZyB0byBiZSBvdmVycGxvdHRlZC4gVGhpcyBjYW4gaW1wb3NzaWJseSBiZSBvdmVyIDUzLDAwMCBpdGVtcy4gDQpUYWJsZSBpbmNyZW1lbnRzIGJ5IDEuIA0KYGBge3J9DQpkaWFtb25kcyAlPiUgDQogIGdncGxvdCgpICsgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSB0YWJsZSwgeSA9IGNhcmF0KSwgc2hhcGUgPSAiLiIpDQpgYGANCg0KDQpgYGB7cn0NCmRpYW1vbmRzICU+JSANCiAgZ2dwbG90KCkgKyBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IHRhYmxlLCB5ID0gY2FyYXQpLCANCiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyKHdpZHRoID0gMC42LCBoZWlnaHQgPSAwLjA1LCBzZWVkID0gMTIyMiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksIA0KICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUgPSAiLiIpDQpgYGANCg0KDQojIyBgZ2VvbV9jb3VudGAgZm9yIHR3byBkaXNjcmV0ZSB2YXJpYWJsZXMNCg0KYGBge3J9DQpkaWFtb25kcyAlPiUgDQogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBjdXQsIHkgPSBjbGFyaXR5KSkgKw0KICBnZW9tX2NvdW50KCkNCmBgYA0KDQoNCg0K