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")
library(tidyverse) # Load the tidyverse package for data manipulation and visualization
library(ggplot2) # Load ggplot2 for creating plots
# 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
# Create a 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 = "Weight vs. Miles Per Gallon", x = "Weight (1000 lbs)", y = "Miles Per Gallon") # Add plot labels

Line Graph
#Create a 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() + # add a line to the plot
labs(title = "Miles Per Gallon by Index", x = "Index", y = "Miles Per Gallon") # add plot labels

# Create a 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

#Create a 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
using a public sales dataset.
LS0tCnRpdGxlOiAibXRjYXJzIERhdGFzZXQgVmlzdWFsaXphdGlvbiIKQXV0aG9yOiBQcm9mLiBOb3JnZSBQZW5hIFBlcmV6Cm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCioqSW50cm9kdWN0aW9uKioKCkluIHRoaXMgYXNzaWdubWVudCwgd2UgZXhwbG9yZSB0aGUgbXRjYXJzIGRhdGFzZXQsIHdoaWNoIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHZhcmlvdXMgY2FyIG1vZGVscy4KCgptcGc6IE1pbGVzIHBlciBnYWxsb24JKE51bWVyaWMpCgpjeWw6IE51bWJlciBvZiBjeWxpbmRlcnMJKE51bWVyaWMpCgpkaXNwOiBEaXNwbGFjZW1lbnQJTnVtZXJpYwljdWJpYyAoaW5jaGVzKQoKaHA6IEdyb3NzIGhvcnNlcG93ZXIJTnVtZXJpYwkoaHApCgpkcmF0OiBSZWFyIGF4bGUgcmF0aW8JTnVtZXJpYwkocmF0aW8pCgp3dDogV2VpZ2h0CU51bWVyaWMJKDEwMDAgbGJzKQoKcXNlYzoxLzQgbWlsZSB0aW1lCU51bWVyaWMJKHNlY29uZHMpCgp2cwlWL1MgZW5naW5lICgwID0gVi1zaGFwZWQsIDEgPSBzdHJhaWdodCkJTnVtZXJpYwkoYmluYXJ5KQoKYW0JVHJhbnNtaXNzaW9uICgwID0gYXV0b21hdGljLCAxID0gbWFudWFsKQlOdW1lcmljCShiaW5hcnkpCgpnZWFyCU51bWJlciBvZiBmb3J3YXJkIGdlYXJzCU51bWVyaWMJKGdlYXJzKQoKY2FyYglOdW1iZXIgb2YgY2FyYnVyZXRvcnMJTnVtZXJpYwkoY2FyYnVyZXRvcnMpCgoKYGBge3J9CiNpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQpgYGAKCgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpICMgTG9hZCB0aGUgdGlkeXZlcnNlIHBhY2thZ2UgZm9yIGRhdGEgbWFuaXB1bGF0aW9uIGFuZCB2aXN1YWxpemF0aW9uCmxpYnJhcnkoZ2dwbG90MikgIyBMb2FkIGdncGxvdDIgZm9yIGNyZWF0aW5nIHBsb3RzCgojIExvYWQgdGhlIG10Y2FycyBkYXRhc2V0IChidWlsdCBpbnRvIFIpCmRhdGFfbXRjYXJzIDwtIG10Y2FycwoKIyBWaWV3IHRoZSBmaXJzdCBmZXcgcm93cyB0byB1bmRlcnN0YW5kIHRoZSBkYXRhCmhlYWQoZGF0YV9tdGNhcnMpCgojIENvbnZlcnQgJ2FtJyAodHJhbnNtaXNzaW9uIHR5cGUpIGFuZCAnY3lsJyAobnVtYmVyIG9mIGN5bGluZGVycykgdG8gZmFjdG9ycyBmb3IgY2F0ZWdvcmljYWwgcGxvdHRpbmcKZGF0YV9tdGNhcnMkYW0gPC0gYXMuZmFjdG9yKGRhdGFfbXRjYXJzJGFtKQpkYXRhX210Y2FycyRjeWwgPC0gYXMuZmFjdG9yKGRhdGFfbXRjYXJzJGN5bCkKYGBgCgoqKlNjYXR0ZXIgUGxvdCoqCgpgYGB7cn0KIyBDcmVhdGUgYSBzY2F0dGVyIHBsb3Qgb2YgY2FyIHdlaWdodCB2cy4gbWlsZXMgcGVyIGdhbGxvbiwgY29sb3JlZCBieSBjeWxpbmRlciBjb3VudApnZ3Bsb3QoZGF0YV9tdGNhcnMsIGFlcyh4ID0gd3QsIHkgPSBtcGcsIGNvbG9yID0gY3lsKSkgKwogIGdlb21fcG9pbnQoKSArICMgQWRkIHBvaW50cyB0byB0aGUgcGxvdAogIGxhYnModGl0bGUgPSAiV2VpZ2h0IHZzLiBNaWxlcyBQZXIgR2FsbG9uIiwgeCA9ICJXZWlnaHQgKDEwMDAgbGJzKSIsIHkgPSAiTWlsZXMgUGVyIEdhbGxvbiIpICMgQWRkIHBsb3QgbGFiZWxzCmBgYAoKKipMaW5lIEdyYXBoKioKCmBgYHtyfQojQ3JlYXRlIGEgbGluZSBncmFwaCBvZiBvcmRlcmVkIG1wZyBieSB0aGUgcm93IG51bWJlci4KZGF0YV9tdGNhcnNfbGluZSA8LSBkYXRhX210Y2FycyAlPiUgbXV0YXRlKGluZGV4ID0gcm93X251bWJlcigpKSAjYWRkIGluZGV4IGNvbHVtbiBzbyB3ZSBjYW4gcGxvdCBpdAoKZ2dwbG90KGRhdGFfbXRjYXJzX2xpbmUsIGFlcyh4ID0gaW5kZXgsIHkgPSBtcGcpKSArCiAgZ2VvbV9saW5lKCkgKyAjIGFkZCBhIGxpbmUgdG8gdGhlIHBsb3QKICBsYWJzKHRpdGxlID0gIk1pbGVzIFBlciBHYWxsb24gYnkgSW5kZXgiLCB4ID0gIkluZGV4IiwgeSA9ICJNaWxlcyBQZXIgR2FsbG9uIikgIyBhZGQgcGxvdCBsYWJlbHMKYGBgCgoKYGBge3J9CiMgQ3JlYXRlIGEgaG9yaXpvbnRhbCBiYXIgY2hhcnQgb2YgdGhlIGF2ZXJhZ2UgaG9yc2Vwb3dlciBncm91cGVkIGJ5IGN5bGluZGVyIGNvdW50CmhwX2J5X2N5bCA8LSBkYXRhX210Y2FycyAlPiUgZ3JvdXBfYnkoY3lsKSAlPiUgc3VtbWFyaXplKGF2Z19ocCA9IG1lYW4oaHApKSAjIENhbGN1bGF0ZSBhdmVyYWdlIGhvcnNlcG93ZXIgZm9yIGVhY2ggY3lsaW5kZXIgZ3JvdXAKCmdncGxvdChocF9ieV9jeWwsIGFlcyh5ID0gY3lsLCB4ID0gYXZnX2hwKSkgKwogIGdlb21fYmFyKHN0YXQgPSAnaWRlbnRpdHknKSArICMgQ3JlYXRlIGJhcnMgYmFzZWQgb24gdGhlIGNhbGN1bGF0ZWQgYXZlcmFnZXMKICBsYWJzKHRpdGxlID0gIkF2ZXJhZ2UgSFAgYnkgQ3lsaW5kZXIgQ291bnQiLCB5ID0gIkN5bGluZGVyIENvdW50IiwgeCA9ICJBdmVyYWdlIEhvcnNlcG93ZXIiKSAjIEFkZCBwbG90IGxhYmVscwpgYGAKCgpgYGB7cn0KI0NyZWF0ZSBhIHN0YWNrZWQgYmFyIGNoYXJ0IG9mIGF2ZXJhZ2UgbXBnLCBkaXNwLCBocCwgYW5kIHd0LCBncm91cGVkIGJ5IGN5bC4KYmFyX2RhdGFfbXRjYXJzIDwtIGRhdGFfbXRjYXJzICU+JSBncm91cF9ieShjeWwpICU+JSBzdW1tYXJpemUobXBnID0gbWVhbihtcGcpLCBkaXNwID0gbWVhbihkaXNwKSwgaHAgPSBtZWFuKGhwKSwgd3QgPSBtZWFuKHd0KSkgJT4lIHBpdm90X2xvbmdlcihjb2xzID0gYygibXBnIiwgImRpc3AiLCAiaHAiLCAid3QiKSwgbmFtZXNfdG8gPSAiTWVhc3VyZW1lbnQiLCB2YWx1ZXNfdG8gPSAiQXZlcmFnZSIpICNDYWxjdWxhdGUgYXZlcmFnZSB2YWx1ZXMgZm9yIGVhY2ggbWVhc3VyZW1lbnQsIGFuZCBwaXZvdCB0aGUgZGF0YSBpbnRvIGEgbG9uZyBmb3JtYXQuCgpnZ3Bsb3QoYmFyX2RhdGFfbXRjYXJzLCBhZXMoeCA9IGN5bCwgZmlsbCA9IE1lYXN1cmVtZW50LCB5ID0gQXZlcmFnZSkpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKyAjQ3JlYXRlIGJhcnMgYmFzZWQgb24gdGhlIGNhbGN1bGF0ZWQgYXZlcmFnZXMKICBsYWJzKHRpdGxlID0gIkF2ZXJhZ2UgTWVhc3VyZW1lbnRzIGJ5IEN5bGluZGVyIENvdW50IiwgeCA9ICJDeWxpbmRlciBDb3VudCIsIHkgPSAiQXZlcmFnZSBNZWFzdXJlbWVudCIpICNhZGQgcGxvdCBsYWJlbHMKYGBgCgoqKkNvbmNsdXNpb24qKgoKVGhpcyBkb2N1bWVudCBkZW1vbnN0cmF0ZXMgdmFyaW91cyBkYXRhIHZpc3VhbGl6YXRpb24gdGVjaG5pcXVlcyB1c2luZyBhIHB1YmxpYyBzYWxlcyBkYXRhc2V0LgoKCgoKCg==