The dataset I chose for this project is of potential vegetation types provided by the Center for Sustainability and the Global Envrionment (SAGE), University of Wisconsin. The data estimates historical changes in global land cover between 1700 to 1992. I used the dataset with 5 min resolution (vs. 0.5 degree) for higher spatial detail and precision when looking at regional areas.

Dataset Procedure

The 94 classes from The Olson Global Ecosystem Classification (GEC) were reclassified into 15 biome types seen below.

The domiant potential vegetation cateogry was identified within ach 5 minute grid cell. Then extended iteratively by 1 km pixels until the dominant vegetation type was identified. During this process land use, water, and wetland classes were temporarily ignored.

If regions had >50% crop cover or <20% dominant potential vegetation in upland pixels, they got flagged. The flagged regions were then identified using Haxeltine & Prentice. If a forest was detected, the specific type was identified with DISCover data.

Tundra and Polar Desert were classified using Growing Degree Days.

The distinction between troipical, temperate, and boreal forests were applied using climate rules. Tropical was based on Olson legend Labels, and the others were based on climate zones.

For regional specificity, North America was manually corrected to make tropical decidious forest pixels into tmeperate deciduous.

15 possible vegetation types:

  1. Tropical Evergreen Forest/Woodland
  2. Tropical Deciduous Forest/Woodland
  3. Temperate Broadleaf Evergreen Forest/Woodland
  4. Temperate Needleleaf Evergreen Forest/Woodland
  5. Temperate Deciduous Forest/Woodland
  6. Boreal Evergreen Forest/Woodland
  7. Boreal Deciduous Forest/Woodland
  8. Evergreen/Deciduous Mixed Forest/Woodland
  9. Savanna
  10. Grassland/Steppe
  11. Dense Shrubland
  12. Open Shrubland
  13. Tundra
  14. Desert
  15. Polar Desert/Rock/Ice

potveg_nc

Setup

library(sp)
library(sf)
## Linking to GEOS 3.11.0, GDAL 3.5.3, PROJ 9.1.0; sf_use_s2() is TRUE
library(raster)
library(ncdf4)
library(ggplot2)

Read NetCDF file

nc_data <- nc_open("/Users/avalomax/Downloads/potveg_nc/vegtype_5min.nc")
nc_fname <- "/Users/avalomax/Downloads/potveg_nc/vegtype_5min.nc"

Values of vegtype frequencies

vegtype <- raster::raster(nc_fname, varname = "vegtype")
vegvalue <- values(vegtype)

Establish the extents of North America, the world, western US

extent_na <- extent(-140, -60, 20, 70)
extent_world <- extent(-180, 180, -90, 90)
extent_western <- extent(-125, -100, 30, 50)
extent_oregon <- extent(-124.56, -116.46, 41.99, 46.29)
extent_adaptedoregon <-extent(-123, -109, 34, 52)

Legend for histograms

# Going to implement this back in later. Too many words doesn't fit by x-axis even when made small, replaced with numerical association for now. 

legendxaxis <- c(
  "Tropical Evergreen Forest/Woodland",
  "Tropical Deciduous Forest/Woodland",
  "Temperate Broadleaf Evergreen Forest/Woodland",
  "Temperate Needleleaf Evergreen Forest/Woodland",
  "Temperate Deciduous Forest/Woodland",
  "Boreal Evergreen Forest/Woodland",
  "Boreal Deciduous Forest/Woodland",
  "Evergreen/Deciduous Mixed Forest/Woodland",
  "Savanna",
  "Grassland/Steppe",
  "Dense Shrubland",
  "Open Shrubland",
  "Tundra",
  "Desert",
  "Polar Desert/Rock/Ice"
)

Histogram of Entire Dataset

histogram_data <- hist(vegvalue, breaks = seq(0.5, 15.5, by = 1), plot = FALSE)

# Plot the histogram with adjusted y-axis range
barplot(histogram_data$counts, names.arg = legendxaxis, 
        col = "mediumseagreen", main = "Frequency of Vegetation Types", 
        xlab = "", ylab = "Frequency", 
        las = 2, cex.names = 0.45,
        ylim = c(0, max(histogram_data$counts) + 500))  # Adjusted y-axis range

The most predicted/frequent pixel in the entire data set was Evergreen/Deciduous Mixed Forest/Woodland.

Values of vegtype frequency

vegtype_na <- crop(vegtype, extent_na)

vegvalue_na <- values(vegtype_na)
legendxaxis <- seq_along(legendxaxis)

Histogram of the North American pixels

histogram_data_na <- hist(vegvalue_na, breaks = seq(0, 15, by = 1), plot = FALSE)

barplot(histogram_data_na$counts, names.arg = legendxaxis, 
        col = "mediumseagreen", main = "Frequency of Vegetation Types in North America", 
        xlab = "Vegetation Type", ylab = "Frequency", 
        las = 0, cex.names = 1,
        ylim = c(0, max(histogram_data_na$counts) + 500))  # Adjusted y-axis range

Once again the most frequent is Evergreen/Deciduous Mixed Forest/Woodland. The “extreme” values decrease but Tundra remains high.

Histogram of the top 3 frequencies

freq_table <- table(vegvalue_na)
top_3_veg <- names(sort(freq_table, decreasing = TRUE)[1:3])
top_3_freq <- freq_table[top_3_veg]
barplot(top_3_freq, names.arg = top_3_veg, 
        col = "mediumseagreen", 
        main = "Top 3 Vegetation Types in North America", 
        xlab = "Vegetation Types", ylab = "Frequency", 
        las = 0, cex.names = 1)

  • 8 is Evergreen/Decidious Mixed Forest/Woodland
  • 6 is Boreal Evergreen Forest/Woodland
  • 13 is Tundra
# vegetation type variable
vegtype_var <- "vegtype"

# index for the 8th vegetation type Evergreen/Deciduous Mixed Forest/Woodland.
vegtype_index <- 8  # 8th vegetation type

# Get the values of Evergreen/Deciduous Mixed Forest/Woodland.
vegtype_values <- ncvar_get(nc_data, vegtype_var, verbose = FALSE)

# Count the number of values that match the specified vegetation type
count_vegtype <- sum(vegtype_values == vegtype_index)

# Print the count
print(paste("Most Frequent: Evergreen/Deciduous Mixed Forest/Woodland (Vegetation Type 8):", count_vegtype))
## [1] "Most Frequent: Evergreen/Deciduous Mixed Forest/Woodland (Vegetation Type 8): NA"

Distribution

Color selection for visual

I organized the first 8 vegetation types to be green because they are related to forests and woodlands, the next 4 to be beige/yellow to correlate with drier conditions (ex. steppe, savanna), and the last 3 to correlate with a color that corresponds to the extreme conditions they represent.

Plot

organizedcolors <- c("#556B2F", "#CAFF70", "#A2CD5A", "#458B00", "#54FF94",
                   "#008B45", "#2E8B57", "#00EE00", "#DAA520", "#CDBE70",
                   "#8B4500", "#CDB38B", "#CAE1FF", "#FFA500", "#FFF5EE")

vegtype_world <- crop(vegtype, extent_world)
plot(vegtype_world, col = organizedcolors, main = "Vegetation Cover Types - World", axes = FALSE)

Significant covers

  • South America- Tropical Evergreen Forest/Woodland
  • North of Africa- Tundra
  • Middle East- Tundra
  • India- Tropical Decidious Forest/Woodland
  • Indonesia- Tropical Evergreen Forest/Woodland

Same process for North America // The US & Canada

organizedcolors <- c("#556B2F", "#CAFF70", "#A2CD5A", "#458B00", "#54FF94",
                   "#008B45", "#2E8B57", "#00EE00", "#DAA520", "#CDBE70",
                   "#8B4500", "#CDB38B", "#CAE1FF", "#FFA500", "#FFF5EE")

vegtype_na <- crop(vegtype, extent_na)
plot(vegtype_na, col = organizedcolors, main = "Vegetation Cover Types - North America", axes = FALSE)

The United States

  • Midwest: Grassland/Steppe
  • PNW: Temperate Needleleaf Evergreen Forest/Woodland
  • South: Temperate Needleleaf Evergreen Forest/Woodland
  • North: Savanna
  • Northeast: Temperate Decidious Forest/Woodward
  • West Coast-ish/Mountainous: Open Shrubland

Western

organizedcolors <- c("#556B2F", "#CAFF70", "#A2CD5A", "#458B00", "#54FF94",
                   "#008B45", "#2E8B57", "#00EE00", "#DAA520", "#CDBE70",
                   "#8B4500", "#CDB38B", "#CAE1FF", "#FFA500", "#FFF5EE")

vegtype_western <- crop(vegtype, extent_western)
plot(vegtype_western, col = organizedcolors, main = "Vegetation Cover Types - Western", axes = FALSE)

Oregon Need to fix Currently insinuates that majority of OR is a Tundra

# with accurate/most precise oregon lat&long 


organizedcolors <- c("#556B2F", "#CAFF70", "#A2CD5A", "#458B00", "#54FF94",
                   "#008B45", "#2E8B57", "#00EE00", "#DAA520", "#CDBE70",
                   "#8B4500", "#CDB38B", "#CAE1FF", "#FFA500", "#FFF5EE")

vegtype_oregon <- crop(vegtype, extent_oregon)
plot(vegtype_oregon, col = organizedcolors, main = "Vegetation Cover Types - Oregon", axes = FALSE)

Oregon adapted until above error is fixed

#with accurate/most precise oregon lat&long 

organizedcolors <- c("#556B2F", "#CAFF70", "#A2CD5A", "#458B00", "#54FF94",
                   "#008B45", "#2E8B57", "#00EE00", "#DAA520", "#CDBE70",
                   "#8B4500", "#CDB38B", "#CAE1FF", "#FFA500", "#FFF5EE")

vegtype_adaptedoregon <- crop(vegtype, extent_adaptedoregon)
plot(vegtype_adaptedoregon, col = organizedcolors, main = "Vegetation Cover Types - Oregon", axes = FALSE)

Majority is open shrublands. Still predominantly forest & woodland.

Discussion

The most common predicted vegetation type was Evergreen/Deciduous Mixed Forest/Woodland, whch is what is predominantly seen in areas that experience moderate climates with distinctive warm summers and cold winters. The least frequent vegetation type was Temperate Broadleaf Evergreen Forest/Woodland. However despite being the lowest it still falls under the same umbrella cateogry of forest/woodlands. The equatorial region (tropics), all the countries fall under the Tropical Evergreen Forest/Woodland category. Since this dataset was produced in November of 1999, there is a disadvantage analyzing it now with knoweldge of current and ongoing natural events as well as human interventions that have occured since.