# Install and load necessary libraries
# install.packages("ggplot2")
# install.packages("plotly")
# install.packages("dplyr")
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
library(plotly)
## Warning: package 'plotly' was built under R version 4.4.3
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# Load the midwest dataset
data("midwest")
# 2. Create a static visualization using ggplot2
static_plot <- ggplot(midwest, aes(x = area, y = poptotal, color = state, size = popdensity)) +
geom_point(alpha = 0.6, shape = 21, stroke = 1) + # Using filled circles with border
geom_smooth(method = "lm", se = FALSE, color = "black", linetype = "dashed") + # Adding a linear regression line
scale_size(range = c(2, 15), name = "Population Density") +
scale_color_brewer(palette = "Set2", name = "State") +
labs(title = "Midwest Data: Area vs. Total Population",
subtitle = "Colored by State, Size by Population Density",
x = "Area",
y = "Total Population",
caption = "Source: ggplot2 midwest dataset") +
theme_bw() +
theme(legend.position = "right",
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5))
# Display the static plot
print(static_plot)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `geom_smooth()` using formula = 'y ~ x'
## Warning: The following aesthetics were dropped during statistical transformation: size.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
## the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
## variable into a factor?

# Description of the static visualization:
cat("\n--- Description of the Static Visualization (ggplot2) ---\n")
##
## --- Description of the Static Visualization (ggplot2) ---
cat("This scatter plot visualizes the relationship between the area of counties in the Midwest (x-axis) and their total population (y-axis).\n")
## This scatter plot visualizes the relationship between the area of counties in the Midwest (x-axis) and their total population (y-axis).
cat("Each point represents a county. The color of the point indicates the state the county belongs to, using a distinct color palette for each state.\n")
## Each point represents a county. The color of the point indicates the state the county belongs to, using a distinct color palette for each state.
cat("The size of each point is proportional to the population density of the county; larger points represent higher population density.\n")
## The size of each point is proportional to the population density of the county; larger points represent higher population density.
cat("The transparency (alpha = 0.6) helps to visualize overlapping points in denser areas.\n")
## The transparency (alpha = 0.6) helps to visualize overlapping points in denser areas.
cat("The points are displayed as filled circles (shape = 21) with a black border (stroke = 1) for better visual distinction.\n")
## The points are displayed as filled circles (shape = 21) with a black border (stroke = 1) for better visual distinction.
cat("A dashed black line representing the linear regression (geom_smooth with method 'lm') is overlaid on the scatter plot.\n")
## A dashed black line representing the linear regression (geom_smooth with method 'lm') is overlaid on the scatter plot.
cat("This line helps to understand the general trend between area and total population, suggesting a weak positive correlation.\n")
## This line helps to understand the general trend between area and total population, suggesting a weak positive correlation.
cat("The legend on the right clearly labels the colors representing each state and the size gradient for population density.\n")
## The legend on the right clearly labels the colors representing each state and the size gradient for population density.
cat("The plot includes a centered title and subtitle for clarity, along with axis labels and a caption indicating the data source.\n")
## The plot includes a centered title and subtitle for clarity, along with axis labels and a caption indicating the data source.
cat("The 'bw' theme provides a clean and readable background.\n")
## The 'bw' theme provides a clean and readable background.
# 3. Use the visualization from part 2 to create an interactive chart using plotly
interactive_plot <- ggplotly(static_plot,
tooltip = c("area", "poptotal", "popdensity", "state", "county")) %>%
layout(title = list(text = paste(ggplot_build(static_plot)$plot$labels$title, "<br>",
"<sup>", ggplot_build(static_plot)$plot$labels$subtitle, "</sup>"),
x = 0.5), # Center the title
caption = list(text = ggplot_build(static_plot)$plot$labels$caption,
x = 1, y = -0.1, xref = 'paper', yref = 'paper', showarrow = F, xanchor = 'right', yanchor = 'top')) # Position the caption
## `geom_smooth()` using formula = 'y ~ x'
## Warning: The following aesthetics were dropped during statistical transformation: size.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
## the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
## variable into a factor?
## `geom_smooth()` using formula = 'y ~ x'
## Warning: The following aesthetics were dropped during statistical transformation: size.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
## the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
## variable into a factor?
## `geom_smooth()` using formula = 'y ~ x'
## Warning: The following aesthetics were dropped during statistical transformation: size.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
## the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
## variable into a factor?
## `geom_smooth()` using formula = 'y ~ x'
## Warning: The following aesthetics were dropped during statistical transformation: size.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
## the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
## variable into a factor?
# Display the interactive plot
interactive_plot
## Warning: 'layout' objects don't have these attributes: 'caption'
## Valid attributes include:
## '_deprecated', 'activeshape', 'annotations', 'autosize', 'autotypenumbers', 'calendar', 'clickmode', 'coloraxis', 'colorscale', 'colorway', 'computed', 'datarevision', 'dragmode', 'editrevision', 'editType', 'font', 'geo', 'grid', 'height', 'hidesources', 'hoverdistance', 'hoverlabel', 'hovermode', 'images', 'legend', 'mapbox', 'margin', 'meta', 'metasrc', 'modebar', 'newshape', 'paper_bgcolor', 'plot_bgcolor', 'polar', 'scene', 'selectdirection', 'selectionrevision', 'separators', 'shapes', 'showlegend', 'sliders', 'smith', 'spikedistance', 'template', 'ternary', 'title', 'transition', 'uirevision', 'uniformtext', 'updatemenus', 'width', 'xaxis', 'yaxis', 'barmode', 'bargap', 'mapType'
# Install and load necessary libraries
# install.packages("ggplot2")
# install.packages("plotly")
# install.packages("dplyr")
library(ggplot2)
library(plotly)
library(dplyr)
# Load the txhousing dataset
data("txhousing")
# 2. Create a static visualization using ggplot2
static_plot <- ggplot(txhousing, aes(x = month, y = median, color = city, size = listings)) +
geom_point(alpha = 0.7, shape = 16) + # Using filled circles
geom_smooth(method = "lm", se = FALSE, color = "black", linetype = "dashed") + # Adding a linear regression line
scale_size(range = c(2, 15), name = "Number of Listings") +
scale_color_brewer(palette = "Set3", name = "City") +
labs(title = "Texas Housing Data: Month vs. Median Price",
subtitle = "Colored by City, Size by Number of Listings",
x = "Month",
y = "Median House Price",
caption = "Source: ggplot2 txhousing dataset") +
theme_bw() +
theme(legend.position = "right",
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5))
# Display the static plot
print(static_plot)
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 616 rows containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: The following aesthetics were dropped during statistical transformation: size.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
## the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
## variable into a factor?
## Warning in RColorBrewer::brewer.pal(n, pal): n too large, allowed maximum for palette Set3 is 12
## Returning the palette you asked for with that many colors
## Warning: Removed 6536 rows containing missing values or values outside the scale range
## (`geom_point()`).

# Description of the static visualization:
cat("\n--- Description of the Static Visualization (ggplot2) ---\n")
##
## --- Description of the Static Visualization (ggplot2) ---
cat("This scatter plot visualizes the relationship between the number of house sales (x-axis) and the median house price (y-axis) in various cities in Texas.\n")
## This scatter plot visualizes the relationship between the number of house sales (x-axis) and the median house price (y-axis) in various cities in Texas.
cat("Each point represents the data for a specific month and city. The color of the point indicates the city, using a distinct color palette for each city.\n")
## Each point represents the data for a specific month and city. The color of the point indicates the city, using a distinct color palette for each city.
cat("The size of each point is proportional to the number of listings in that month and city; larger points represent a higher number of listings.\n")
## The size of each point is proportional to the number of listings in that month and city; larger points represent a higher number of listings.
cat("The transparency (alpha = 0.7) helps to visualize overlapping points in denser areas.\n")
## The transparency (alpha = 0.7) helps to visualize overlapping points in denser areas.
cat("The points are displayed as filled circles (shape = 16).\n")
## The points are displayed as filled circles (shape = 16).
cat("A dashed black line representing the linear regression (geom_smooth with method 'lm') is overlaid on the scatter plot.\n")
## A dashed black line representing the linear regression (geom_smooth with method 'lm') is overlaid on the scatter plot.
cat("This line helps to understand the general trend between the number of sales and the median price across all cities and time points, suggesting a weak positive correlation.\n")
## This line helps to understand the general trend between the number of sales and the median price across all cities and time points, suggesting a weak positive correlation.
cat("The legend on the right clearly labels the colors representing each city and the size gradient for the number of listings.\n")
## The legend on the right clearly labels the colors representing each city and the size gradient for the number of listings.
cat("The plot includes a centered title and subtitle for clarity, along with axis labels and a caption indicating the data source.\n")
## The plot includes a centered title and subtitle for clarity, along with axis labels and a caption indicating the data source.
cat("The 'bw' theme provides a clean and readable background.\n")
## The 'bw' theme provides a clean and readable background.
# 3. Use the visualization from part 2 to create an interactive chart using plotly
interactive_plot <- ggplotly(static_plot,
tooltip = c("month", "median", "listings", "city", "date")) %>%
layout(title = list(text = paste(ggplot_build(static_plot)$plot$labels$title, "<br>",
"<sup>", ggplot_build(static_plot)$plot$labels$subtitle, "</sup>"),
x = 0.5), # Center the title
caption = list(text = ggplot_build(static_plot)$plot$labels$caption,
x = 1, y = -0.1, xref = 'paper', yref = 'paper', showarrow = F, xanchor = 'right', yanchor = 'top')) # Position the caption
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 616 rows containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: The following aesthetics were dropped during statistical transformation: size.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
## the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
## variable into a factor?
## Warning in RColorBrewer::brewer.pal(n, pal): n too large, allowed maximum for palette Set3 is 12
## Returning the palette you asked for with that many colors
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 616 rows containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: The following aesthetics were dropped during statistical transformation: size.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
## the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
## variable into a factor?
## Warning in RColorBrewer::brewer.pal(n, pal): n too large, allowed maximum for palette Set3 is 12
## Returning the palette you asked for with that many colors
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 616 rows containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: The following aesthetics were dropped during statistical transformation: size.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
## the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
## variable into a factor?
## Warning in RColorBrewer::brewer.pal(n, pal): n too large, allowed maximum for palette Set3 is 12
## Returning the palette you asked for with that many colors
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 616 rows containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: The following aesthetics were dropped during statistical transformation: size.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
## the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
## variable into a factor?
## Warning in RColorBrewer::brewer.pal(n, pal): n too large, allowed maximum for palette Set3 is 12
## Returning the palette you asked for with that many colors
# Display the interactive plot
interactive_plot
## Warning: 'layout' objects don't have these attributes: 'caption'
## Valid attributes include:
## '_deprecated', 'activeshape', 'annotations', 'autosize', 'autotypenumbers', 'calendar', 'clickmode', 'coloraxis', 'colorscale', 'colorway', 'computed', 'datarevision', 'dragmode', 'editrevision', 'editType', 'font', 'geo', 'grid', 'height', 'hidesources', 'hoverdistance', 'hoverlabel', 'hovermode', 'images', 'legend', 'mapbox', 'margin', 'meta', 'metasrc', 'modebar', 'newshape', 'paper_bgcolor', 'plot_bgcolor', 'polar', 'scene', 'selectdirection', 'selectionrevision', 'separators', 'shapes', 'showlegend', 'sliders', 'smith', 'spikedistance', 'template', 'ternary', 'title', 'transition', 'uirevision', 'uniformtext', 'updatemenus', 'width', 'xaxis', 'yaxis', 'barmode', 'bargap', 'mapType'
# aggregate over years
tx <- select(txhousing, city, year, sales:inventory) %>%
group_by(city, year) %>%
summarize_all(mean, na.rm = TRUE)
p <- tx %>%
ggplot(aes(median,
listings)) +
geom_point(alpha = 0.5)
p
## Warning: Removed 68 rows containing missing values or values outside the scale range
## (`geom_point()`).

library(gganimate)
## Warning: package 'gganimate' was built under R version 4.4.3
anim <- p +
transition_time(year) +
ease_aes()
anim # same as animate(anim)
## Warning: Removed 7 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 7 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 7 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 11 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 11 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 11 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 11 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 11 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 11 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 11 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 11 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 11 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 11 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 11 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 8 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 7 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 12 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 12 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 12 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 12 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 12 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 12 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 10 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 10 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 10 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 10 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 10 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 7 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 7 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 7 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 7 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 7 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 7 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 7 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 3 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 3 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 3 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 3 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 3 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 3 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 2 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 2 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 2 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 2 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 2 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 2 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 2 rows containing missing values or values outside the scale range
## (`geom_point()`).
anim2 <- anim +
labs(title = "Year: {frame_time}")
anim2
## Warning: Removed 7 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 7 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 7 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 11 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 11 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 11 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 11 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 11 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 11 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 11 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 11 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 11 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 11 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 11 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 8 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 7 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 12 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 12 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 12 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 12 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 12 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 12 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 9 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 10 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 10 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 10 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 10 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 10 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 7 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 7 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 7 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 7 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 7 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 7 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 7 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 3 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 3 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 3 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 3 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 3 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 3 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 2 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 2 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 2 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 2 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 2 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 2 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 2 rows containing missing values or values outside the scale range
## (`geom_point()`).
