• Steven Ponce
  • About
  • Data Visualizations
  • Projects
  • Email

On this page

  • Original
  • Makeover
  • Steps to Create this Graphic
    • 1. Load Packages & Setup
    • 2. Read in the Data
    • 3. Examine the Data
    • 4. Tidy Data
    • 5. Visualization Parameters
    • 6. Plot
    • 7. Save
    • 8. Session Info
    • 9. GitHub Repository
    • 10. References

The Spectrum of Frequencies in Nature and Technology

  • Show All Code
  • Hide All Code

  • View Source

From heartbeats to radiation, visualizing the vast range of frequencies

MakeoverMonday
Data Visualization
R Programming
2025
An interactive visualization exploring the vast spectrum of frequencies in nature and technology, from the slow rhythm of a human heartbeat to the high-energy waves of cosmic radiation. This visualization demonstrates how different phenomena operate across an enormous range of frequencies, helping us understand the interconnected scales of biological processes, sound waves, technological signals, and electromagnetic radiation.
Author

Steven Ponce

Published

February 18, 2025

Original

The original visualization **Per second - vibrations / cycles / waves / rate / frequency*“** from information is beautiful

Original visualization

Makeover

Figure 1: A line graph showing frequency ranges across different categories. The y-axis uses a logarithmic scale from 0 Hz to 1000000000 PHz. Five categories are shown: Biological (blue) showing lowest frequencies, Sound (black) and Technology (orange) in the middle ranges, and Radiation (purple) reaching the highest frequencies. Other (green) spans across multiple ranges.

Steps to Create this Graphic

1. Load Packages & Setup

Show code
## 1. LOAD PACKAGES & SETUP ----
suppressPackageStartupMessages({
pacman::p_load(
    tidyverse,      # Easily Install and Load the 'Tidyverse'
    ggtext,         # Improved Text Rendering Support for 'ggplot2'
    showtext,       # Using Fonts More Easily in R Graphs
    janitor,        # Simple Tools for Examining and Cleaning Dirty Data
    skimr,          # Compact and Flexible Summaries of Data
    scales,         # Scale Functions for Visualization
    glue,           # Interpreted String Literals
    here,           # A Simpler Way to Find Your Files
    lubridate,      # Make Dealing with Dates a Little Easier
    camcorder,      # Record Your Plot History 
    highcharter,    # A Wrapper for the 'Highcharts' Library
    htmlwidgets,    # HTML Widgets for R
    webshot2        # Take Screenshots of Web Pages
    )
})

### |- figure size ----
gg_record(
    dir    = here::here("temp_plots"),
    device = "png",
    width  =  10,
    height =  8,
    units  = "in",
    dpi    = 320
)

2. Read in the Data

Show code
per_second_raw <- read_csv(
  here::here('data/per_second.csv')) |> 
  clean_names()

3. Examine the Data

Show code
glimpse(per_second_raw)
skim(per_second_raw)

4. Tidy Data

Show code
### |-  tidy data ----
per_second_clean <- per_second_raw  |>
  select(unit:source) |> 
  filter(description != '"Frame rate" of conscious perception in human brain') |> 
  mutate(
    category = case_when(
      str_detect(tolower(description), "brain|heart|purr") ~ "Biological",
      str_detect(tolower(description), "sound|audio|speaker|speech") ~ "Sound",
      str_detect(tolower(description), "radio|wifi|bluetooth|power") ~ "Technology",
      str_detect(tolower(description), "light|ray|radiation") ~ "Radiation",
      TRUE ~ "Other"
    ),
    # Add formatted frequency for tooltip
    freq_formatted = case_when(
      vibrations_cycles_waves_rate_per_second_not_formatted >= 1e15 ~ paste0(round(vibrations_cycles_waves_rate_per_second_not_formatted/1e15, 1), " PHz"),
      vibrations_cycles_waves_rate_per_second_not_formatted >= 1e12 ~ paste0(round(vibrations_cycles_waves_rate_per_second_not_formatted/1e12, 1), " THz"),
      vibrations_cycles_waves_rate_per_second_not_formatted >= 1e9 ~ paste0(round(vibrations_cycles_waves_rate_per_second_not_formatted/1e9, 1), " GHz"),
      vibrations_cycles_waves_rate_per_second_not_formatted >= 1e6 ~ paste0(round(vibrations_cycles_waves_rate_per_second_not_formatted/1e6, 1), " MHz"),
      vibrations_cycles_waves_rate_per_second_not_formatted >= 1e3 ~ paste0(round(vibrations_cycles_waves_rate_per_second_not_formatted/1e3, 1), " kHz"),
      TRUE ~ paste0(round(vibrations_cycles_waves_rate_per_second_not_formatted, 1), " Hz")
    )
  )

5. Visualization Parameters

Show code
### |-  plot aesthetics ----
colors_list <- list(
  "Biological" = "#36A9E1",  
   "Sound"      = "#333333",      
   "Technology" = "#FF7F00",  
   "Radiation"  = "#7B68EE",   
   "Other"      = "#2ECC71")

### |-  titles and caption ----
title_text <- str_glue("The Spectrum of Frequencies in Nature and Technology")
subtitle_text <- str_glue("From heartbeats to radiation, visualizing the vast range of frequencies")
caption_text <-  str_glue("#MakeoverMonday 2025 Week 8 &#8226; Source: Information is Beautiful")

### |-  plot theme ----

# Create custom theme
custom_theme <- hc_theme(
  chart = list(
    backgroundColor = "#f5f5f2",
    style = list(
      fontFamily = "Arial, Helvetica, sans-serif"
    )
  ),
  title = list(
    style = list(
      fontSize = "20px",
      fontWeight = "bold",
      fontFamily = "Arial, Helvetica, sans-serif"
    )
  ),
  subtitle = list(
    style = list(
      fontSize = "14px",
      fontFamily = "Arial, Helvetica, sans-serif",
      color = "#666666"
    )
  ),
  caption = list(
    style = list(
      fontSize = "10px",
      fontFamily = "Arial, Helvetica, sans-serif",
      color = "#666666"
    )
  ),
  legend = list(
    itemStyle = list(
      fontFamily = "Arial, Helvetica, sans-serif",
      fontSize = "12px"
    )
  ),
  tooltip = list(
    style = list(
      fontFamily = "Arial, Helvetica, sans-serif",
      fontSize = "12px"
    )
  ),
  xAxis = list(
    labels = list(
      style = list(
        fontFamily = "Arial, Helvetica, sans-serif"
      )
    )
  ),
  yAxis = list(
    labels = list(
      style = list(
        fontFamily = "Arial, Helvetica, sans-serif"
      )
    )
  )   
)

6. Plot

Show code
### |-  Plot  ----
# Create the highchart visualization
hc_viz <- highchart() |>
  hc_add_theme(custom_theme) |>
  hc_chart(type = "line") |>
  hc_title(
    text = title_text,
    align = "left"
  ) |>
  hc_subtitle(
    text = subtitle_text,
    align = "left"
  ) |>
  hc_caption(
    text = caption_text,  
    align = "right"
  ) |> 
  hc_xAxis(
    title = list(text = "Phenomena Index"),
    gridLineWidth = 1,
    gridLineColor = "#E8E8E8",
    tickInterval = 5
  ) |>
  hc_yAxis(
    type = "logarithmic",
    title = list(text = "Frequency (Hz)"),
    gridLineWidth = 1,
    gridLineColor = "#E8E8E8",
    minorGridLineWidth = 0,
    labels = list(
      formatter = JS("function() {
        var value = this.value;
        if (value >= 1e15) return (value/1e15).toFixed(1) + ' PHz';
        if (value >= 1e12) return (value/1e12).toFixed(1) + ' THz';
        if (value >= 1e9) return (value/1e9).toFixed(1) + ' GHz';
        if (value >= 1e6) return (value/1e6).toFixed(1) + ' MHz';
        if (value >= 1e3) return (value/1e3).toFixed(1) + ' kHz';
        return value.toFixed(1) + ' Hz';
      }")
    )
  ) |>
  hc_legend(
    align = "center",
    verticalAlign = "bottom",
    layout = "horizontal",
    backgroundColor = "transparent",
    borderWidth = 0
  ) |>
  hc_tooltip(
    shared = FALSE,
    headerFormat = "",
    pointFormat = paste0(
      "<b>Category: {point.category}</b><br/>",
      "<b>{point.name}</b><br/>",
      "Frequency: {point.freq}<br/>",
      "Phenomena Index: {point.x}"
    ),
    backgroundColor = "white",
    borderWidth = 1,
    shadow = TRUE
  )

# Add line charts (series) by category
for(cat in unique(per_second_clean$category)) {
  data_subset <- per_second_clean |>
    filter(category == cat)
  
  hc_viz <- hc_viz |>
    hc_add_series(
      name = cat,
      color = colors_list[[cat]],
      data = list_parse(
        data_subset |>
          mutate(
            x = seq_along(description),
            y = vibrations_cycles_waves_rate_per_second_not_formatted,
            name = description,
            freq = freq_formatted,
            category = category
          ) |>
          select(x, y, name, freq, category)
      ),
      marker = list(
        enabled = TRUE,
        symbol = "circle",
        radius = 4
      ),
      lineWidth = 1.5,
      states = list(
        hover = list(
          lineWidth = 2,
          lineWidthPlus = 0
        )
      )
    )
}

# Add additional chart options
hc_viz <- hc_viz |>
  hc_plotOptions(
    series = list(
      animation = list(duration = 1000),
      marker = list(
        states = list(
          hover = list(
            enabled = TRUE,
            radius = 6
          )
        )
      )
    )
  ) |>
  hc_credits(
    enabled = TRUE,
    text = "&#x1F465; stevenponce &#8226; &#x1F4BB; poncest",  
    style = list(
      fontSize = "10px",
      color = "#666666"
    )
  )

7. Save

8. Session Info

Expand for Session Info
R version 4.4.1 (2024-06-14 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows 11 x64 (build 22631)

Matrix products: default


locale:
[1] LC_COLLATE=English_United States.utf8 
[2] LC_CTYPE=English_United States.utf8   
[3] LC_MONETARY=English_United States.utf8
[4] LC_NUMERIC=C                          
[5] LC_TIME=English_United States.utf8    

time zone: America/New_York
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices datasets  utils     methods   base     

other attached packages:
 [1] webshot2_0.1.1    htmlwidgets_1.6.4 highcharter_0.9.4 camcorder_0.1.0  
 [5] here_1.0.1        glue_1.8.0        scales_1.3.0      skimr_2.1.5      
 [9] janitor_2.2.0     showtext_0.9-7    showtextdb_3.0    sysfonts_0.8.9   
[13] ggtext_0.1.2      lubridate_1.9.3   forcats_1.0.0     stringr_1.5.1    
[17] dplyr_1.1.4       purrr_1.0.2       readr_2.1.5       tidyr_1.3.1      
[21] tibble_3.2.1      ggplot2_3.5.1     tidyverse_2.0.0  

loaded via a namespace (and not attached):
 [1] tidyselect_1.2.1  fastmap_1.2.0     pacman_0.5.1      promises_1.3.0   
 [5] digest_0.6.37     timechange_0.3.0  lifecycle_1.0.4   rsvg_2.6.1       
 [9] processx_3.8.4    magrittr_2.0.3    compiler_4.4.0    rlang_1.1.4      
[13] tools_4.4.0       igraph_2.1.1      utf8_1.2.4        yaml_2.3.10      
[17] data.table_1.16.2 knitr_1.49        bit_4.5.0         curl_6.0.0       
[21] xml2_1.3.6        TTR_0.24.4        repr_1.1.7        websocket_1.4.2  
[25] withr_3.0.2       grid_4.4.0        fansi_1.0.6       xts_0.14.1       
[29] colorspace_2.1-1  cli_3.6.3         crayon_1.5.3      rmarkdown_2.29   
[33] generics_0.1.3    rlist_0.4.6.2     rstudioapi_0.17.1 tzdb_0.4.0       
[37] chromote_0.4.0    parallel_4.4.0    assertthat_0.2.1  base64enc_0.1-3  
[41] vctrs_0.6.5       jsonlite_1.8.9    hms_1.1.3         bit64_4.5.2      
[45] systemfonts_1.1.0 magick_2.8.5      quantmod_0.4.26   gifski_1.32.0-1  
[49] codetools_0.2-20  ps_1.8.1          stringi_1.8.4     gtable_0.3.6     
[53] later_1.3.2       munsell_0.5.1     pillar_1.9.0      htmltools_0.5.8.1
[57] R6_2.5.1          rprojroot_2.0.4   vroom_1.6.5       evaluate_1.0.1   
[61] lattice_0.22-6    backports_1.5.0   gridtext_0.1.5    broom_1.0.7      
[65] snakecase_0.11.1  renv_1.0.3        Rcpp_1.0.13-1     svglite_2.1.3    
[69] xfun_0.49         zoo_1.8-12        pkgconfig_2.0.3  

9. GitHub Repository

Expand for GitHub Repo

The complete code for this analysis is available in mm_2025_08.qmd.

For the full repository, click here.

10. References

Expand for References
  1. Article:
    • Per Second – Vibrations / Cycles / Waves / Rate / Frequency: Per Second – Vibrations / Cycles / Waves / Rate / Frequency
  2. Data:
  • Makeover Monday 2025 Week 08: Per Second – Vibrations / Cycles / Waves / Rate / Frequency
Back to top
Source Code
---
title: "The Spectrum of Frequencies in Nature and Technology"
subtitle: "From heartbeats to radiation, visualizing the vast range of frequencies"
description: "An interactive visualization exploring the vast spectrum of frequencies in nature and technology, from the slow rhythm of a human heartbeat to the high-energy waves of cosmic radiation. This visualization demonstrates how different phenomena operate across an enormous range of frequencies, helping us understand the interconnected scales of biological processes, sound waves, technological signals, and electromagnetic radiation."
author: "Steven Ponce"
date: "2025-02-18" 
categories: ["MakeoverMonday", "Data Visualization", "R Programming", "2025"]   
tags: [
"frequencies",
"physics",
"nature",
"technology",
"radiation",
"scientific-visualization",
"interactive-visualization",
"highcharter",
"logarithmic-scale",
"data-storytelling",
"electromagnetic-spectrum",
"biological-rhythms",
"sound-waves",
"frequency-analysis",
"science-communication"
]
image: "thumbnails/mm_2025_08.png"
format:
  html:
    toc: true
    toc-depth: 5
    code-link: true
    code-fold: true
    code-tools: true
    code-summary: "Show code"
    self-contained: true
    theme: 
      light: [flatly, assets/styling/custom_styles.scss]
      dark: [darkly, assets/styling/custom_styles_dark.scss]
editor_options: 
  chunk_output_type: inline
execute: 
  freeze: true                                                  
  cache: true                                                   
  error: false
  message: false
  warning: false
  eval: true
# filters:
#   - social-share
# share:                     
#   permalink: "https://stevenponce.netlify.app/data_visualizations/MakeoverMonday/2025/mm_2025_08.html"
#   description: "Explore the fascinating spectrum of frequencies in nature and technology through an interactive visualization, revealing how phenomena from heartbeats to cosmic radiation operate across vastly different scales. #DataViz #Science #Technology"
#   twitter: true
#   linkedin: true
#   email: true
#   facebook: false
#   reddit: false
#   stumble: false
#   tumblr: false
#   mastodon: true
#   bsky: true
---

### Original

The original visualization **Per second - vibrations / cycles / waves / rate / frequency*"** from [information is beautiful](https://informationisbeautiful.net/2024/per-second-vibrations-cycles-waves-rate-frequency/)

![Original visualization](https://raw.githubusercontent.com/poncest/MakeoverMonday/master/2025/Week_08/original_chart.png)

### Makeover

![A line graph showing frequency ranges across different categories. The y-axis uses a logarithmic scale from 0 Hz to 1000000000 PHz. Five categories are shown: Biological (blue) showing lowest frequencies, Sound (black) and Technology (orange) in the middle ranges, and Radiation (purple) reaching the highest frequencies. Other (green) spans across multiple ranges.](mm_2025_08.gif){#fig-1}

### <mark> **Steps to Create this Graphic** </mark>

#### 1. Load Packages & Setup

```{r}
#| label: load
#| warning: false
#| message: false      
#| results: "hide"     

## 1. LOAD PACKAGES & SETUP ----
suppressPackageStartupMessages({
pacman::p_load(
    tidyverse,      # Easily Install and Load the 'Tidyverse'
    ggtext,         # Improved Text Rendering Support for 'ggplot2'
    showtext,       # Using Fonts More Easily in R Graphs
    janitor,        # Simple Tools for Examining and Cleaning Dirty Data
    skimr,          # Compact and Flexible Summaries of Data
    scales,         # Scale Functions for Visualization
    glue,           # Interpreted String Literals
    here,           # A Simpler Way to Find Your Files
    lubridate,      # Make Dealing with Dates a Little Easier
    camcorder,      # Record Your Plot History 
    highcharter,    # A Wrapper for the 'Highcharts' Library
    htmlwidgets,    # HTML Widgets for R
    webshot2        # Take Screenshots of Web Pages
    )
})

### |- figure size ----
gg_record(
    dir    = here::here("temp_plots"),
    device = "png",
    width  =  10,
    height =  8,
    units  = "in",
    dpi    = 320
)

```

#### 2. Read in the Data

```{r}
#| label: read
#| include: true
#| eval: true
#| warning: false

per_second_raw <- read_csv(
  here::here('data/per_second.csv')) |> 
  clean_names()
```

#### 3. Examine the Data

```{r}
#| label: examine
#| include: true
#| eval: true
#| results: 'hide'
#| warning: false

glimpse(per_second_raw)
skim(per_second_raw)
```

#### 4. Tidy Data

```{r}
#| label: tidy
#| warning: false

### |-  tidy data ----
per_second_clean <- per_second_raw  |>
  select(unit:source) |> 
  filter(description != '"Frame rate" of conscious perception in human brain') |> 
  mutate(
    category = case_when(
      str_detect(tolower(description), "brain|heart|purr") ~ "Biological",
      str_detect(tolower(description), "sound|audio|speaker|speech") ~ "Sound",
      str_detect(tolower(description), "radio|wifi|bluetooth|power") ~ "Technology",
      str_detect(tolower(description), "light|ray|radiation") ~ "Radiation",
      TRUE ~ "Other"
    ),
    # Add formatted frequency for tooltip
    freq_formatted = case_when(
      vibrations_cycles_waves_rate_per_second_not_formatted >= 1e15 ~ paste0(round(vibrations_cycles_waves_rate_per_second_not_formatted/1e15, 1), " PHz"),
      vibrations_cycles_waves_rate_per_second_not_formatted >= 1e12 ~ paste0(round(vibrations_cycles_waves_rate_per_second_not_formatted/1e12, 1), " THz"),
      vibrations_cycles_waves_rate_per_second_not_formatted >= 1e9 ~ paste0(round(vibrations_cycles_waves_rate_per_second_not_formatted/1e9, 1), " GHz"),
      vibrations_cycles_waves_rate_per_second_not_formatted >= 1e6 ~ paste0(round(vibrations_cycles_waves_rate_per_second_not_formatted/1e6, 1), " MHz"),
      vibrations_cycles_waves_rate_per_second_not_formatted >= 1e3 ~ paste0(round(vibrations_cycles_waves_rate_per_second_not_formatted/1e3, 1), " kHz"),
      TRUE ~ paste0(round(vibrations_cycles_waves_rate_per_second_not_formatted, 1), " Hz")
    )
  )
```

#### 5. Visualization Parameters

```{r}
#| label: params
#| include: true
#| warning: false

### |-  plot aesthetics ----
colors_list <- list(
  "Biological" = "#36A9E1",  
   "Sound"      = "#333333",      
   "Technology" = "#FF7F00",  
   "Radiation"  = "#7B68EE",   
   "Other"      = "#2ECC71")

### |-  titles and caption ----
title_text <- str_glue("The Spectrum of Frequencies in Nature and Technology")
subtitle_text <- str_glue("From heartbeats to radiation, visualizing the vast range of frequencies")
caption_text <-  str_glue("#MakeoverMonday 2025 Week 8 &#8226; Source: Information is Beautiful")

### |-  plot theme ----

# Create custom theme
custom_theme <- hc_theme(
  chart = list(
    backgroundColor = "#f5f5f2",
    style = list(
      fontFamily = "Arial, Helvetica, sans-serif"
    )
  ),
  title = list(
    style = list(
      fontSize = "20px",
      fontWeight = "bold",
      fontFamily = "Arial, Helvetica, sans-serif"
    )
  ),
  subtitle = list(
    style = list(
      fontSize = "14px",
      fontFamily = "Arial, Helvetica, sans-serif",
      color = "#666666"
    )
  ),
  caption = list(
    style = list(
      fontSize = "10px",
      fontFamily = "Arial, Helvetica, sans-serif",
      color = "#666666"
    )
  ),
  legend = list(
    itemStyle = list(
      fontFamily = "Arial, Helvetica, sans-serif",
      fontSize = "12px"
    )
  ),
  tooltip = list(
    style = list(
      fontFamily = "Arial, Helvetica, sans-serif",
      fontSize = "12px"
    )
  ),
  xAxis = list(
    labels = list(
      style = list(
        fontFamily = "Arial, Helvetica, sans-serif"
      )
    )
  ),
  yAxis = list(
    labels = list(
      style = list(
        fontFamily = "Arial, Helvetica, sans-serif"
      )
    )
  )   
)
```

#### 6. Plot

```{r}
#| label: plot
#| warning: false

### |-  Plot  ----
# Create the highchart visualization
hc_viz <- highchart() |>
  hc_add_theme(custom_theme) |>
  hc_chart(type = "line") |>
  hc_title(
    text = title_text,
    align = "left"
  ) |>
  hc_subtitle(
    text = subtitle_text,
    align = "left"
  ) |>
  hc_caption(
    text = caption_text,  
    align = "right"
  ) |> 
  hc_xAxis(
    title = list(text = "Phenomena Index"),
    gridLineWidth = 1,
    gridLineColor = "#E8E8E8",
    tickInterval = 5
  ) |>
  hc_yAxis(
    type = "logarithmic",
    title = list(text = "Frequency (Hz)"),
    gridLineWidth = 1,
    gridLineColor = "#E8E8E8",
    minorGridLineWidth = 0,
    labels = list(
      formatter = JS("function() {
        var value = this.value;
        if (value >= 1e15) return (value/1e15).toFixed(1) + ' PHz';
        if (value >= 1e12) return (value/1e12).toFixed(1) + ' THz';
        if (value >= 1e9) return (value/1e9).toFixed(1) + ' GHz';
        if (value >= 1e6) return (value/1e6).toFixed(1) + ' MHz';
        if (value >= 1e3) return (value/1e3).toFixed(1) + ' kHz';
        return value.toFixed(1) + ' Hz';
      }")
    )
  ) |>
  hc_legend(
    align = "center",
    verticalAlign = "bottom",
    layout = "horizontal",
    backgroundColor = "transparent",
    borderWidth = 0
  ) |>
  hc_tooltip(
    shared = FALSE,
    headerFormat = "",
    pointFormat = paste0(
      "<b>Category: {point.category}</b><br/>",
      "<b>{point.name}</b><br/>",
      "Frequency: {point.freq}<br/>",
      "Phenomena Index: {point.x}"
    ),
    backgroundColor = "white",
    borderWidth = 1,
    shadow = TRUE
  )

# Add line charts (series) by category
for(cat in unique(per_second_clean$category)) {
  data_subset <- per_second_clean |>
    filter(category == cat)
  
  hc_viz <- hc_viz |>
    hc_add_series(
      name = cat,
      color = colors_list[[cat]],
      data = list_parse(
        data_subset |>
          mutate(
            x = seq_along(description),
            y = vibrations_cycles_waves_rate_per_second_not_formatted,
            name = description,
            freq = freq_formatted,
            category = category
          ) |>
          select(x, y, name, freq, category)
      ),
      marker = list(
        enabled = TRUE,
        symbol = "circle",
        radius = 4
      ),
      lineWidth = 1.5,
      states = list(
        hover = list(
          lineWidth = 2,
          lineWidthPlus = 0
        )
      )
    )
}

# Add additional chart options
hc_viz <- hc_viz |>
  hc_plotOptions(
    series = list(
      animation = list(duration = 1000),
      marker = list(
        states = list(
          hover = list(
            enabled = TRUE,
            radius = 6
          )
        )
      )
    )
  ) |>
  hc_credits(
    enabled = TRUE,
    text = "&#x1F465; stevenponce &#8226; &#x1F4BB; poncest",  
    style = list(
      fontSize = "10px",
      color = "#666666"
    )
  )
```

#### 7. Save

```{r}
#| label: save
#| warning: false
#| message: false      
#| results: "hide"
#| echo: true
#| eval: true
#| include: false      # hide the output

### |-  plot image ----  
width_px <- 10 * 96  # 960 pixels
height_px <- 8 * 96  # 768 pixels

# Define the paths
output_dir <- here::here("data_visualizations/MakeoverMonday/2025")
html_file <- file.path(output_dir, "mm_2025_08.html")
png_file <- file.path(output_dir, "mm_2025_08.png")

# Create directory if it doesn't exist
dir.create(output_dir, recursive = TRUE, showWarnings = FALSE)

# Save as HTML first
saveWidget(hc_viz, html_file)

# Convert to PNG with specific dimensions
webshot(
  url = html_file,
  file = png_file,
  delay = 2,
  vwidth = width_px,
  vheight = height_px
)
```

#### 8. Session Info

::: {.callout-tip collapse="true"}
##### Expand for Session Info

```{r, echo = FALSE}
#| eval: true
#| warning: false

sessionInfo()
```
:::

#### 9. GitHub Repository

::: {.callout-tip collapse="true"}
##### Expand for GitHub Repo

The complete code for this analysis is available in [`mm_2025_08.qmd`](https://github.com/poncest/personal-website/blob/master/data_visualizations/MakeoverMonday/2025/mm_2025_08.qmd).

For the full repository, [click here](https://github.com/poncest/personal-website/).
:::


#### 10. References
::: {.callout-tip collapse="true"}
##### Expand for References

1. Article:
   - Per Second – Vibrations / Cycles / Waves / Rate / Frequency: [Per Second – Vibrations / Cycles / Waves / Rate / Frequency](https://informationisbeautiful.net/2024/per-second-vibrations-cycles-waves-rate-frequency/)


2. Data:
- Makeover Monday 2025 Week 08: [Per Second – Vibrations / Cycles / Waves / Rate / Frequency](https://data.world/makeovermonday/per-second-vibrations-cycles-waves-rate-frequency)
 
:::

© 2024 Steven Ponce

Source Issues