mtcars Dataset Visualization

Introduction

In this assignment, we explore the mtcars dataset, which contains information about various car models.

mpg: Miles per gallon (Numeric)

cyl: Number of cylinders (Numeric)

disp: Displacement Numeric cubic (inches)

hp: Gross horsepower Numeric (hp)

drat: Rear axle ratio Numeric (ratio)

wt: Weight Numeric (1000 lbs)

qsec:1/4 mile time Numeric (seconds)

vs V/S engine (0 = V-shaped, 1 = straight) Numeric (binary)

am Transmission (0 = automatic, 1 = manual) Numeric (binary)

gear Number of forward gears Numeric (gears)

carb Number of carburetors Numeric (carburetors)

install.packages("tidyverse")
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/sys_3.4.3.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/bit_4.6.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/ps_1.9.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/farver_2.1.2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/labeling_0.4.3.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/RColorBrewer_1.1-3.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/viridisLite_0.4.3.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/rematch_2.0.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/askpass_1.2.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/bit64_4.6.0-1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/prettyunits_1.2.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/processx_3.8.6.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/backports_1.5.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/generics_0.1.4.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/blob_1.3.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/DBI_1.3.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/tidyselect_1.2.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/withr_3.0.2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/data.table_1.18.2.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/gtable_0.3.6.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/isoband_0.3.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/S7_0.2.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/scales_1.4.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/gargle_1.6.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/uuid_1.2-2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/cellranger_1.1.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/curl_7.0.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/ids_1.0.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/rematch2_2.1.2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/cpp11_0.5.3.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/pkgconfig_2.0.3.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/openssl_2.3.5.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/timechange_0.4.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/utf8_1.2.6.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/systemfonts_1.3.2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/textshaping_1.0.5.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/clipr_0.8.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/crayon_1.5.3.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/vroom_1.7.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/tzdb_0.5.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/progress_1.2.3.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/callr_3.7.6.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/selectr_0.5-1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/broom_1.0.12.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/conflicted_1.2.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/dbplyr_2.5.2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/dplyr_1.2.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/dtplyr_1.3.3.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/forcats_1.0.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/ggplot2_4.0.2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/googledrive_2.1.2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/googlesheets4_1.1.2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/haven_2.5.5.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/hms_1.1.4.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/httr_1.4.8.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/lubridate_1.9.5.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/modelr_0.1.11.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/pillar_1.11.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/purrr_1.2.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/ragg_1.5.2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/readr_2.2.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/readxl_1.4.5.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/reprex_2.1.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/rstudioapi_0.18.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/rvest_1.0.5.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/tibble_3.3.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/tidyr_1.3.2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/xml2_1.5.2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/tidyverse_2.0.0.tar.gz'

The downloaded source packages are in
    ‘/tmp/Rtmpcas1Hl/downloaded_packages’

Load the tidyverse package for data manipulation and visualization and ggplot2 for creating plots

Load the data

library(tidyverse)
library(ggplot2) 

# Load the mtcars dataset (built into R)
data_mtcars <- mtcars

# View the first few rows to understand the data
head(data_mtcars)

Convert ‘am’ (transmission type) and ‘cyl’ (number of cylinders) to factors for categorical plotting

data_mtcars$am <- as.factor(data_mtcars$am)
data_mtcars$cyl <- as.factor(data_mtcars$cyl)

Scatter Plot of car weight vs. miles per gallon, colored by cylinder count

ggplot(data_mtcars, aes(x = wt, y = mpg, color = cyl)) +
  geom_point() + # Add points to the plot
  labs(title = "Miles Per Gallon vs. Weight", x = "Weight (1000 lbs)", y = "Miles Per Gallon") # Add plot labels

Line Graph of ordered mpg by the row number

data_mtcars_line <- data_mtcars %>% mutate(index = row_number()) #add index column so we can plot it

ggplot(data_mtcars_line, aes(x = index, y = mpg)) +
  geom_line(color = "blue") + # Change the line color to blue
  labs(title = "Miles Per Gallon by Index", x = "Index", y = "Miles Per Gallon") # add plot labels

Horizontal bar chart of the average horsepower grouped by cylinder count

hp_by_cyl <- data_mtcars %>% group_by(cyl) %>% summarize(avg_hp = mean(hp)) # Calculate average horsepower for each cylinder group

ggplot(hp_by_cyl, aes(y = cyl, x = avg_hp)) +
  geom_bar(stat = 'identity') + # Create bars based on the calculated averages
  labs(title = "Average HP by Cylinder Count", y = "Cylinder Count", x = "Average Horsepower") # Add plot labels

Stacked bar chart of average mpg, disp, hp, and wt, grouped by cyl

bar_data_mtcars <- data_mtcars %>% group_by(cyl) %>% summarize(mpg = mean(mpg), disp = mean(disp), hp = mean(hp), wt = mean(wt)) %>% pivot_longer(cols = c("mpg", "disp", "hp", "wt"), names_to = "Measurement", values_to = "Average") #Calculate average values for each measurement, and pivot the data into a long format.

ggplot(bar_data_mtcars, aes(x = cyl, fill = Measurement, y = Average)) +
  geom_bar(stat = "identity") + #Create bars based on the calculated averages
  labs(title = "Average Measurements by Cylinder Count", x = "Cylinder Count", y = "Average Measurement") #add plot labels

Conclusion

This document demonstrates various data visualization techniques such as scatter plot, line graph, horizontal bar chart and stacked bar chart, using a public sales dataset. Since the dataset is pretty clean we did not do any EDA. The implementation of the above graphs and charts was pretty easy, similar to Python environment.

In the scatter plot it is visible that cylinder is very influential predictor because the colors representing a cylinder are nicely grouped.

The graph displays the Miles Per Gallon (mpg) for each car in the dataset as a continuous blue line plotted against their sequential index order, revealing the fluctuations in fuel efficiency across the different observations.

Horizontal bar chart calculates the average horsepower and groups by cylinder count.

The stacked bar chart presents compares the average values of fuel efficiency, engine displacement, horsepower, and weight across cars categorized by their number of cylinders.

LS0tCnRpdGxlOiAiQWN0aXZpdHkgMyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKKiptdGNhcnMgRGF0YXNldCBWaXN1YWxpemF0aW9uKioKCkludHJvZHVjdGlvbgoKSW4gdGhpcyBhc3NpZ25tZW50LCB3ZSBleHBsb3JlIHRoZSBtdGNhcnMgZGF0YXNldCwgd2hpY2ggY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdmFyaW91cyBjYXIgbW9kZWxzLgoKbXBnOiBNaWxlcyBwZXIgZ2FsbG9uIChOdW1lcmljKQoKY3lsOiBOdW1iZXIgb2YgY3lsaW5kZXJzIChOdW1lcmljKQoKZGlzcDogRGlzcGxhY2VtZW50IE51bWVyaWMgY3ViaWMgKGluY2hlcykKCmhwOiBHcm9zcyBob3JzZXBvd2VyIE51bWVyaWMgKGhwKQoKZHJhdDogUmVhciBheGxlIHJhdGlvIE51bWVyaWMgKHJhdGlvKQoKd3Q6IFdlaWdodCBOdW1lcmljICgxMDAwIGxicykKCnFzZWM6MS80IG1pbGUgdGltZSBOdW1lcmljIChzZWNvbmRzKQoKdnMgVi9TIGVuZ2luZSAoMCA9IFYtc2hhcGVkLCAxID0gc3RyYWlnaHQpIE51bWVyaWMgKGJpbmFyeSkKCmFtIFRyYW5zbWlzc2lvbiAoMCA9IGF1dG9tYXRpYywgMSA9IG1hbnVhbCkgTnVtZXJpYyAoYmluYXJ5KQoKZ2VhciBOdW1iZXIgb2YgZm9yd2FyZCBnZWFycyBOdW1lcmljIChnZWFycykKCmNhcmIgTnVtYmVyIG9mIGNhcmJ1cmV0b3JzIE51bWVyaWMgKGNhcmJ1cmV0b3JzKQpgYGB7cn0KIyBpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQpgYGAKCgoqKkxvYWQgdGhlIHRpZHl2ZXJzZSBwYWNrYWdlIGZvciBkYXRhIG1hbmlwdWxhdGlvbiBhbmQgdmlzdWFsaXphdGlvbiBhbmQgZ2dwbG90MiBmb3IgY3JlYXRpbmcgcGxvdHMqKgoKKipMb2FkIHRoZSBkYXRhKioKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGdncGxvdDIpIAoKIyBMb2FkIHRoZSBtdGNhcnMgZGF0YXNldCAoYnVpbHQgaW50byBSKQpkYXRhX210Y2FycyA8LSBtdGNhcnMKCiMgVmlldyB0aGUgZmlyc3QgZmV3IHJvd3MgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YQpoZWFkKGRhdGFfbXRjYXJzKQpgYGAKCgoqKkNvbnZlcnQgJ2FtJyAodHJhbnNtaXNzaW9uIHR5cGUpIGFuZCAnY3lsJyAobnVtYmVyIG9mIGN5bGluZGVycykgdG8gZmFjdG9ycyBmb3IgY2F0ZWdvcmljYWwgcGxvdHRpbmcqKgpgYGB7cn0KZGF0YV9tdGNhcnMkYW0gPC0gYXMuZmFjdG9yKGRhdGFfbXRjYXJzJGFtKQpkYXRhX210Y2FycyRjeWwgPC0gYXMuZmFjdG9yKGRhdGFfbXRjYXJzJGN5bCkKYGBgCgoqKlNjYXR0ZXIgUGxvdCBvZiBjYXIgd2VpZ2h0IHZzLiBtaWxlcyBwZXIgZ2FsbG9uLCBjb2xvcmVkIGJ5IGN5bGluZGVyIGNvdW50KioKYGBge3J9CmdncGxvdChkYXRhX210Y2FycywgYWVzKHggPSB3dCwgeSA9IG1wZywgY29sb3IgPSBjeWwpKSArCiAgZ2VvbV9wb2ludCgpICsgIyBBZGQgcG9pbnRzIHRvIHRoZSBwbG90CiAgbGFicyh0aXRsZSA9ICJNaWxlcyBQZXIgR2FsbG9uIHZzLiBXZWlnaHQiLCB4ID0gIldlaWdodCAoMTAwMCBsYnMpIiwgeSA9ICJNaWxlcyBQZXIgR2FsbG9uIikgIyBBZGQgcGxvdCBsYWJlbHMKYGBgCgoqKkxpbmUgR3JhcGggb2Ygb3JkZXJlZCBtcGcgYnkgdGhlIHJvdyBudW1iZXIqKgpgYGB7cn0KZGF0YV9tdGNhcnNfbGluZSA8LSBkYXRhX210Y2FycyAlPiUgbXV0YXRlKGluZGV4ID0gcm93X251bWJlcigpKSAjYWRkIGluZGV4IGNvbHVtbiBzbyB3ZSBjYW4gcGxvdCBpdAoKZ2dwbG90KGRhdGFfbXRjYXJzX2xpbmUsIGFlcyh4ID0gaW5kZXgsIHkgPSBtcGcpKSArCiAgZ2VvbV9saW5lKGNvbG9yID0gImJsdWUiKSArICMgQ2hhbmdlIHRoZSBsaW5lIGNvbG9yIHRvIGJsdWUKICBsYWJzKHRpdGxlID0gIk1pbGVzIFBlciBHYWxsb24gYnkgSW5kZXgiLCB4ID0gIkluZGV4IiwgeSA9ICJNaWxlcyBQZXIgR2FsbG9uIikgIyBhZGQgcGxvdCBsYWJlbHMKYGBgCgoKKipIb3Jpem9udGFsIGJhciBjaGFydCBvZiB0aGUgYXZlcmFnZSBob3JzZXBvd2VyIGdyb3VwZWQgYnkgY3lsaW5kZXIgY291bnQqKgpgYGB7cn0KaHBfYnlfY3lsIDwtIGRhdGFfbXRjYXJzICU+JSBncm91cF9ieShjeWwpICU+JSBzdW1tYXJpemUoYXZnX2hwID0gbWVhbihocCkpICMgQ2FsY3VsYXRlIGF2ZXJhZ2UgaG9yc2Vwb3dlciBmb3IgZWFjaCBjeWxpbmRlciBncm91cAoKZ2dwbG90KGhwX2J5X2N5bCwgYWVzKHkgPSBjeWwsIHggPSBhdmdfaHApKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICdpZGVudGl0eScpICsgIyBDcmVhdGUgYmFycyBiYXNlZCBvbiB0aGUgY2FsY3VsYXRlZCBhdmVyYWdlcwogIGxhYnModGl0bGUgPSAiQXZlcmFnZSBIUCBieSBDeWxpbmRlciBDb3VudCIsIHkgPSAiQ3lsaW5kZXIgQ291bnQiLCB4ID0gIkF2ZXJhZ2UgSG9yc2Vwb3dlciIpICMgQWRkIHBsb3QgbGFiZWxzCmBgYAoKCioqU3RhY2tlZCBiYXIgY2hhcnQgb2YgYXZlcmFnZSBtcGcsIGRpc3AsIGhwLCBhbmQgd3QsIGdyb3VwZWQgYnkgY3lsKioKYGBge3J9CmJhcl9kYXRhX210Y2FycyA8LSBkYXRhX210Y2FycyAlPiUgZ3JvdXBfYnkoY3lsKSAlPiUgc3VtbWFyaXplKG1wZyA9IG1lYW4obXBnKSwgZGlzcCA9IG1lYW4oZGlzcCksIGhwID0gbWVhbihocCksIHd0ID0gbWVhbih3dCkpICU+JSBwaXZvdF9sb25nZXIoY29scyA9IGMoIm1wZyIsICJkaXNwIiwgImhwIiwgInd0IiksIG5hbWVzX3RvID0gIk1lYXN1cmVtZW50IiwgdmFsdWVzX3RvID0gIkF2ZXJhZ2UiKSAjQ2FsY3VsYXRlIGF2ZXJhZ2UgdmFsdWVzIGZvciBlYWNoIG1lYXN1cmVtZW50LCBhbmQgcGl2b3QgdGhlIGRhdGEgaW50byBhIGxvbmcgZm9ybWF0LgoKZ2dwbG90KGJhcl9kYXRhX210Y2FycywgYWVzKHggPSBjeWwsIGZpbGwgPSBNZWFzdXJlbWVudCwgeSA9IEF2ZXJhZ2UpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsgI0NyZWF0ZSBiYXJzIGJhc2VkIG9uIHRoZSBjYWxjdWxhdGVkIGF2ZXJhZ2VzCiAgbGFicyh0aXRsZSA9ICJBdmVyYWdlIE1lYXN1cmVtZW50cyBieSBDeWxpbmRlciBDb3VudCIsIHggPSAiQ3lsaW5kZXIgQ291bnQiLCB5ID0gIkF2ZXJhZ2UgTWVhc3VyZW1lbnQiKSAjYWRkIHBsb3QgbGFiZWxzCmBgYAoqKkNvbmNsdXNpb24qKgoKVGhpcyBkb2N1bWVudCBkZW1vbnN0cmF0ZXMgdmFyaW91cyBkYXRhIHZpc3VhbGl6YXRpb24gdGVjaG5pcXVlcyBzdWNoIGFzIHNjYXR0ZXIgcGxvdCwgbGluZSBncmFwaCwgaG9yaXpvbnRhbCBiYXIgY2hhcnQgYW5kIHN0YWNrZWQgYmFyIGNoYXJ0LCB1c2luZyBhIHB1YmxpYyBzYWxlcyBkYXRhc2V0LiBTaW5jZSB0aGUgZGF0YXNldCBpcyBwcmV0dHkgY2xlYW4gd2UgZGlkIG5vdCBkbyBhbnkgRURBLiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGFib3ZlIGdyYXBocyBhbmQgY2hhcnRzIHdhcyBwcmV0dHkgZWFzeSwgc2ltaWxhciB0byBQeXRob24gZW52aXJvbm1lbnQuIAoKSW4gdGhlIHNjYXR0ZXIgcGxvdCBpdCBpcyB2aXNpYmxlIHRoYXQgY3lsaW5kZXIgaXMgdmVyeSBpbmZsdWVudGlhbCBwcmVkaWN0b3IgYmVjYXVzZSB0aGUgY29sb3JzIHJlcHJlc2VudGluZyBhIGN5bGluZGVyIGFyZSBuaWNlbHkgZ3JvdXBlZC4KClRoZSBncmFwaCBkaXNwbGF5cyB0aGUgTWlsZXMgUGVyIEdhbGxvbiAobXBnKSBmb3IgZWFjaCBjYXIgaW4gdGhlIGRhdGFzZXQgYXMgYSBjb250aW51b3VzIGJsdWUgbGluZSBwbG90dGVkIGFnYWluc3QgdGhlaXIgc2VxdWVudGlhbCBpbmRleCBvcmRlciwgcmV2ZWFsaW5nIHRoZSBmbHVjdHVhdGlvbnMgaW4gZnVlbCBlZmZpY2llbmN5IGFjcm9zcyB0aGUgZGlmZmVyZW50IG9ic2VydmF0aW9ucy4KCkhvcml6b250YWwgYmFyIGNoYXJ0IGNhbGN1bGF0ZXMgdGhlIGF2ZXJhZ2UgaG9yc2Vwb3dlciBhbmQgZ3JvdXBzIGJ5IGN5bGluZGVyIGNvdW50LgoKVGhlIHN0YWNrZWQgYmFyIGNoYXJ0IHByZXNlbnRzIGNvbXBhcmVzIHRoZSBhdmVyYWdlIHZhbHVlcyBvZiBmdWVsIGVmZmljaWVuY3ksIGVuZ2luZSBkaXNwbGFjZW1lbnQsIGhvcnNlcG93ZXIsIGFuZCB3ZWlnaHQgYWNyb3NzIGNhcnMgY2F0ZWdvcml6ZWQgYnkgdGhlaXIgbnVtYmVyIG9mIGN5bGluZGVycy4KCg==