knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.width = 7, fig.height = 4 )
In spatial modeling, abstract color gradients (like viridis) are essential for perceptual clarity but often fail to provide domain-specific meaning. The palettephines package provides topologically grounded scales anchored to international biological standards (BBCH-scale and Reef Health Index). This is to ensure that data visualization would resonate with the lived experience of Filipino fishermen, farmers, and other local audience.
Note: This package is designed as a domain-specific translation layer for the final stage of a spatial data analytics workflow. It is not a replacement as reference for Exploratory Data Analysis and spatial association via Local Indicators of Spatial Association (LISA)/ Moran's I.
The package currently covers five critical transition colors of the Philippine bio-economy:
# 1. Set up required libraries library(palettephines) library(ggplot2) # 2. Capture current settings and setup the layout # We use no.readonly = TRUE to ensure we only try to reset writeable parameters oldpar <- par(no.readonly = TRUE) par(mfrow = c(3, 2), mar = c(4, 4, 3, 1)) # 3. Call the preview functions # Using names(phines_metadata) is smart—it makes the code future-proof invisible(lapply(names(phines_metadata), function(pal_name) { show_phines(pal_name) })) # 4. Reset to original user settings par(oldpar)
A critical principle of spatial statistics is that domain-specific palettes should not replace exploratory data analysis (EDA). Instead, they serve as the final interpretive layer in a robust analytical pipeline.
The following workflow demonstrates how palettephines complements standard mathematical scales such as viridis and statistical techniques like Local Indicators of Spatial Association (LISA).
During the initial phase of analysis, we use perceptually uniform scales to detect features without thematic bias. Here, we simulate a Sea Surface Temperature (SST) gradient for a coral reef monitoring site.
#1. Load libraries library(sf) library(dplyr) library(sfdep) # 2. Simulate synthetic dataset set.seed(42) bbox <- st_bbox(c(xmin = 0, xmax = 10, ymin = 0, ymax = 10), crs = 3857) # 3. Create the raw spatial data reef_sf <- st_make_grid(bbox, cellsize = c(1, 1), n = c(10, 10)) %>% st_sf() %>% mutate(id = row_number(), sst_stress = runif(n(), 0, 0.3)) # 4. Inject Hotspot hotspot_ids <- c(44, 45, 46, 54, 55, 56, 64, 65, 66) reef_sf$sst_stress[hotspot_ids] <- runif(length(hotspot_ids), 0.7, 0.9) # 5. Plot: Exploratory Data Analysis ggplot(reef_sf) + geom_sf(aes(fill = sst_stress)) + scale_fill_viridis_c() + theme_void() + labs(title = "Step 1: Exploratory Data Analysis using Viridis", subtitle = "Perceptually uniform mapping of raw thermal stress values")
At this stage, the analyst would typically apply a LISA (Local Indicators of Spatial Association) or a Getis-Ord $G^*$ test to identify statistically significant hotspots of thermal stress. While palettephines does not calculate significance, it is used to color the clusters once they are identified.
# 6. Run calculations reef_lisa <- reef_sf %>% mutate(nb = st_contiguity(geometry), wt = st_weights(nb), lisa = local_moran(sst_stress, nb, wt)) %>% tidyr::unnest(lisa) # 7. Filter for the subsequent interpretive phase hotspots <- reef_lisa %>% filter(p_folded_sim < 0.05, mean == "High-High") # 8. Plot: Pure LISA Classification ggplot(reef_lisa) + geom_sf(aes(fill = mean), color = "white", size = 0.1) + scale_fill_manual( values = c("High-High" = "#E31A1C", "Low-Low" = "#1F78B4", "Low-High" = "#A6CEE3", "High-Low" = "#FB9A99"), na.value = "grey95", name = "LISA Cluster" ) + theme_minimal() + labs(title = "Step 2: Pure LISA Analysis", subtitle = "Mathematical identification of spatial clumping (p < 0.05)")
Once the hotspots are confirmed, we switch to palettephines to translate those temperatures into actionable alert levels defined by the Reef Health Index (RHI).
# 9. Plot: Wrap Local Philippine context ggplot() + geom_sf(data = reef_lisa, fill = "grey95", color = "white", size = 0.1) + geom_sf(data = hotspots, aes(fill = sst_stress), color = "black", size = 0.5) + scale_fill_phines( palette = "coral_bleach", discrete = FALSE, name = "RHI Alert Level", breaks = c(0.7, 0.8, 0.9), labels = c("Stress", "Bleaching", "Mortality") ) + theme_minimal() + labs(title = "Step 3: Local Interpretation", subtitle = "Significant clusters translated to Reef Health Index (RHI) states")
Finally, we use the cite_phines() dictionary to extract precise biological states for reporting to environmental agencies (e.g., DENR-BMB).
# 10. Translate to written insight if (nrow(hotspots) > 0) { representative_value <- median(hotspots$sst_stress, na.rm = TRUE) report_status <- cite_phines(palette = "coral_bleach", value = representative_value) } else { report_status <- "No significant thermal hotspots detected." } cat("#> Official Analytical Report:", report_status)
The palettephines package serves as a final, critical bridge in the spatial data science workflow. As demonstrated, the transition from exploratory analysis (using viridis) to statistical confirmation (using LISA) only becomes truly actionable when it is grounded in biological reality.
By anchoring color scales to the BBCH-scale for agriculture and the Reef Health Index for marine ecosystems, analysts can move beyond abstract "High-High" clusters toward a narrative that resonates with policy-makers and local communities. Whether identifying the "Fully Ripe" stage of a palay harvest or the "Critical Mortality" threshold of a coral reef, the goal remains the same: ensuring that the mathematical precision of spatial modeling translates into the lived reality of the Philippine landscape.
This workflow ensures that:
Scientific Interoperability is maintained through globally recognized biological standards.
Stakeholder Communication is improved by using colors that match the physical transitions seen in the field or sea.
Analytical Integrity is preserved by treating domain-specific palettes as an interpretive layer rather than a replacement for statistical rigor.
Through this grounded approach, spatial analysts can provide insights that are not only statistically significant but also culturally and biologically relevant.
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.