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

Goal for project: Determine what the most frequent vegetation type is, how it is distributed in general, in the US, and in Oregon.

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_pnw <- extent(-125, -116, 41, 49)
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)

barplot(histogram_data$counts, names.arg = 1:15, 
        col = "mediumseagreen", main = "Frequency of Vegetation Types", 
        xlab = "", ylab = "", 
        las = 1, cex.names = 1,
        ylim = c(0, 370000)) 

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

# vegetation type variable
vegtype_var <- "vegtype"

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

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


count_vegtype <- sum(vegtype_values == vegtype_index, na.rm = TRUE)


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): 325436"

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

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.

Distribution

Color selection for visual

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

Distribution of the top 3 from earlier (8, 6, 13)

Distribution of the 8th value

organizedcolors <- c("#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0",
                   "#FFFFF0", "#FFFFF0", "#00EE00", "#FFFFF0", "#FFFFF0",
                   "#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0")

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

Distribution of the 6th value

organizedcolors <- c("#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0",
                   "#008B45", "#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0",
                   "#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0")

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

Distribution of the 13th value

organizedcolors <- c("#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0",
                   "#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0",
                   "#FFFFF0", "#FFFFF0", "#CAE1FF", "#FFFFF0", "#FFFFF0")

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

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

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)

Most frequent is Open Shrubland (12)

Still predominantly forest & woodland by the coastline.

organizedcolors <- c("#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0",
                   "#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0",
                   "#8B4500", "#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0")

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

organizedcolors <- c("#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0",
                   "#00EE00", "#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0",
                   "#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0", "#FFFFF0")

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

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. This suggests that the procedure used to categorize pixels found a lot of dominating forestry envrironments. A pattern I found was 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. Though there may not be a significant amount of pixels that may have become dominated by a differnt vegetation type, it would be intresting to track. For example, looking at how the quantity of Polar Desert/Rock/Ice pixels over time could be done in conjunction with another dataset.