The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

BCGcalc Map Results

Erik.Leppo@tetratech.com

2026-07-31

Purpose

Demonstrate how to create a map of model output.

Map

Use ggplot to create a map from the example data included in BCGcalc.

The example data only includes data from Washington.

# Packages
library(BCGcalc)
library(ggplot2)
library(readxl)
library(BioMonTools)

# Calculate BCG model
## Calculate Metrics
df_samps <- read_excel(
  system.file("./extdata/Data_BCG_PugLowWilVal.xlsx",
              package="BCGcalc"),
  guess_max = 10^6)
## Run Function
myDF <- df_samps
col_add_char <- c("INFRAORDER", 
                  "HABITAT", 
                  "ELEVATION_ATTR", 
                  "GRADIENT_ATTR",
                  "WSAREA_ATTR", 
                  "HABSTRUCT")
col_add_num <- c("UFC",
                 "SAMP_AREA_M2"#,
                 # "DENSITY_M2"
                 )
myDF[, col_add_char] <- NA_character_
myDF[, col_add_num] <- NA_integer_
myCols <- c("Area_mi2", 
            "SurfaceArea", 
            # "Density_m2", 
            "Density_ft2")
df_metval <- metric.values(myDF, 
                           "bugs",
                           fun.cols2keep = myCols) 
#> Joining with `by = join_by(SAMPLEID, INDEX_NAME, INDEX_CLASS)`
## Import Rules
df_rules <- read_excel(
  system.file("./extdata/Rules.xlsx",
              package="BCGcalc"),
  sheet="Rules") 
## Calculate Metric Memberships
df_metmemb <- BCG.Metric.Membership(df_metval, 
                                    df_rules)
## Calculate Level Memberships
df_levmemb <- BCG.Level.Membership(df_metmemb, 
                                   df_rules)
## Run Function
df_levels <- BCG.Level.Assignment(df_levmemb)


# Add Lat-Long
## Get unique stations
df_stations <- as.data.frame(unique(df_samps[, c("SampleID",
                                                 "Latitude",
                                                 "Longitude"
                                                 )]))

## Merge
df_map <- merge(df_levels,
                df_stations,
                by.x = "SampleID",
                by.y = "SampleID",
                all.x = TRUE)
## Level1 Name to Character
df_map$Primary_BCG_Level <- as.character(df_map$Primary_BCG_Level)

# Palette, Color Blind
## http://www.cookbook-r.com/Graphs/Colors_(ggplot2)/
pal_cb <- c("#E69F00", 
            "#56B4E9", 
            "#009E73",
            "#F0E442", 
            "#0072B2",
            "#D55E00", 
            "#CC79A7", 
            "#999999")
pal_bcg_old <- c("green", 
                 "cyan", 
                 "blue",
                 "orange", 
                 "red")
pal_bcg <- c("blue", 
             "green",
             "gray", 
             "yellow", 
             "dark orange", 
             "red")

# Shapes
shp_solid <- c(17, 16) # solid triangle and circle

# Map
## Map of OR and WA
m1 <- ggplot(data = subset(map_data("state"),
                           region %in% c("washington"))) + 
  geom_polygon(aes(x = long, y = lat, group = group)
               , fill = "gray90"
               , color = "black") +
  coord_fixed(1.3) + 
  theme_void() +
  # Add Points
  geom_point(data = df_map,
             aes(Longitude,
                 Latitude,
                 shape = INDEX_NAME,
                 color = Primary_BCG_Level),
             na.rm = TRUE) +
  # Change shape
  scale_shape_manual(name = "Site Type", 
                     values = shp_solid) +
  # Change colors
  scale_colour_manual(name = "Level 1 Assignment", 
                      values = pal_bcg) + 
  # Map Title
  labs(title="Pacific Northwest BCG",
       subtitle="Example Samples, WA only") +
  theme(plot.title = element_text(hjust = 0.5),
        plot.subtitle = element_text(hjust=0.5))

## Display Map
m1

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.