diff --git a/_quarto.yml b/_quarto.yml index 4737875..8175cde 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -11,6 +11,11 @@ website: - section: "Site Analysis" contents: - index.qmd + tools: + - icon: github + menu: + - text: Source Code + href: https://github.com/StewartWILDlab/site-selection-rof format: html: diff --git a/docs/index.html b/docs/index.html index e630874..0ea82f5 100644 --- a/docs/index.html +++ b/docs/index.html @@ -130,6 +130,18 @@
@@ -747,7 +759,7 @@

Extracting Land
res <- rbind(res_points, res_ecodistrict) |> 
   tidyr::complete(scale, label) |> 
   tidyr::replace_na(list(prop = 0)) |> 
-  dplyr::mutate(label =  forcats::fct_reorder(label, prop))
+ dplyr::mutate(label = forcats::fct_reorder(label, prop))

@@ -792,7 +804,7 @@

Results

position = "dodge") + theme_bw() + theme(axis.text.x = element_text(angle = 20, vjust = 1, hjust = 1)) + - labs(x = "Land Use Class", y = "Sum of Proportions", + labs(x = "Land Use Class", y = "Proportion", fill = "Scale", colour = "Scale") + scale_fill_manual(values = my_pal) + scale_color_manual(values = my_pal) diff --git a/docs/index_files/figure-html/unnamed-chunk-15-1.png b/docs/index_files/figure-html/unnamed-chunk-15-1.png index 9e97453..66d63ee 100644 Binary files a/docs/index_files/figure-html/unnamed-chunk-15-1.png and b/docs/index_files/figure-html/unnamed-chunk-15-1.png differ diff --git a/docs/index_files/figure-html/unnamed-chunk-5-1.png b/docs/index_files/figure-html/unnamed-chunk-5-1.png deleted file mode 100644 index beaf67e..0000000 Binary files a/docs/index_files/figure-html/unnamed-chunk-5-1.png and /dev/null differ diff --git a/docs/search.json b/docs/search.json index df6043b..017a96f 100644 --- a/docs/search.json +++ b/docs/search.json @@ -26,7 +26,7 @@ "href": "index.html#extracting-land-cover-data", "title": "Land Cover Analysis", "section": "Extracting Land Cover data", - "text": "Extracting Land Cover data\nThe following functions will take care of land cover extraction for sites.\n\nextract_from_points <- function(scale_m, sites, lu) {\n \n sites_buffer <- sites |>\n sf::st_transform(sf::st_crs(lu)) |> \n sf::st_buffer(dist = scale_m) |> \n dplyr::select(siteID)\n \n extr <- exactextractr::exact_extract(lu, sites_buffer,\n progress = FALSE)\n \n extr <- mapply(extr, 1:length(extr), \n FUN = \\(x, y) dplyr::mutate(x, id = y),\n SIMPLIFY = F)\n \n extr_df <- do.call(rbind, extr) |>\n dplyr::filter(!is.na(value)) |>\n dplyr::relocate(id)\n \n return(extr_df)\n \n}\n\ncompute_land_cover <- function(scale_m, sites, \n lu_16, lu_17, lu_dat) {\n \n extr_16_df <- extract_from_points(scale_m, sites, lu_16)\n extr_17_df <- extract_from_points(scale_m, sites, lu_17)\n \n stopifnot(all(!(extr_16_df$siteID %in% extr_17_df$siteID)))\n \n extr <- rbind(extr_16_df, extr_17_df) |>\n dplyr::arrange(id, value)\n \n extr_table <- extr |>\n dplyr::group_by(value) |>\n dplyr::summarise(coverage_fraction_sum = sum(coverage_fraction)) |>\n dplyr::mutate(prop = \n coverage_fraction_sum/sum(coverage_fraction_sum)) |>\n dplyr::ungroup() |>\n dplyr::mutate(value = as.factor(value)) |>\n dplyr::left_join(lu_dat, by = c(\"value\" = \"cats\")) |>\n dplyr::select(category_code, prop, label)\n \n extr_table[is.na(extr_table)] <- 0\n \n return(extr_table)\n \n}\n\nWe extract at different scales (buffer radius around points): 1 m, 50 m, 100 m and 1 km.\n\nres_points <- mapply(FUN = compute_land_cover, \n c(`1 m` = 1, `50 m` = 50,\n `100 m` = 100, `1 km` = 1000),\n MoreArgs = list(\n sites = sites_possible,\n lu_16 = lu_16, lu_17 = lu_17, lu_dat = lu_dat),\n SIMPLIFY = F) |>\n dplyr::bind_rows(.id = 'scale') |>\n dplyr::mutate(scale = forcats::fct_relevel(scale, \"1 m\", \"50 m\",\n \"100 m\", \"1 km\"),\n label = forcats::fct_reorder(label, prop)) |> \n dplyr::arrange(scale, dplyr::desc(prop))\n\nknitr::kable(res_points)\n\n\n\n\nscale\ncategory_code\nprop\nlabel\n\n\n\n\n1 m\nTrBOG\n0.26\nTreed Bog\n\n\n1 m\nTrFEN\n0.23\nTreed Fen\n\n\n1 m\nOBOG\n0.20\nOpen Bog\n\n\n1 m\nConSWA\n0.11\nConiferous Swamp\n\n\n1 m\nConTRE\n0.10\nConiferous Treed\n\n\n1 m\nOFEN\n0.06\nOpen Fen\n\n\n1 m\nSpTRE\n0.02\nSparse Treed\n\n\n1 m\nMixTRE\n0.02\nMixed Treed\n\n\n50 m\nTrBOG\n0.23\nTreed Bog\n\n\n50 m\nTrFEN\n0.22\nTreed Fen\n\n\n50 m\nOBOG\n0.21\nOpen Bog\n\n\n50 m\nConSWA\n0.12\nConiferous Swamp\n\n\n50 m\nConTRE\n0.09\nConiferous Treed\n\n\n50 m\nOFEN\n0.07\nOpen Fen\n\n\n50 m\nSpTRE\n0.03\nSparse Treed\n\n\n50 m\nMixTRE\n0.02\nMixed Treed\n\n\n50 m\nWAT\n0.01\nClear Open Water\n\n\n50 m\nXWAT\n0.00\nTurbid Water\n\n\n100 m\nTrBOG\n0.23\nTreed Bog\n\n\n100 m\nTrFEN\n0.22\nTreed Fen\n\n\n100 m\nOBOG\n0.20\nOpen Bog\n\n\n100 m\nConSWA\n0.12\nConiferous Swamp\n\n\n100 m\nConTRE\n0.10\nConiferous Treed\n\n\n100 m\nOFEN\n0.08\nOpen Fen\n\n\n100 m\nWAT\n0.03\nClear Open Water\n\n\n100 m\nSpTRE\n0.02\nSparse Treed\n\n\n100 m\nMixTRE\n0.01\nMixed Treed\n\n\n100 m\nXWAT\n0.01\nTurbid Water\n\n\n1 km\nTrFEN\n0.21\nTreed Fen\n\n\n1 km\nTrBOG\n0.21\nTreed Bog\n\n\n1 km\nOBOG\n0.19\nOpen Bog\n\n\n1 km\nConSWA\n0.17\nConiferous Swamp\n\n\n1 km\nOFEN\n0.07\nOpen Fen\n\n\n1 km\nConTRE\n0.06\nConiferous Treed\n\n\n1 km\nWAT\n0.04\nClear Open Water\n\n\n1 km\nMixTRE\n0.01\nMixed Treed\n\n\n1 km\nXWAT\n0.01\nTurbid Water\n\n\n1 km\nThSWA\n0.01\nThicket Swamp\n\n\n1 km\nSpTRE\n0.00\nSparse Treed\n\n\n1 km\nNSWood\n0.00\nDisturbance - Non and Sparse Woody\n\n\n1 km\nDecTRE\n0.00\nDeciduous Treed\n\n\n1 km\nTrOrSHr\n0.00\nDisturbance - Treed and/or Shrub\n\n\n1 km\nBED\n0.00\nBedrock\n\n\n\n\n\nWe also want to do the same operation for the ecodistrict to allow for comparison. We don’t need to use exact extraction, insteadt the crop and mask each raster. This operation is costly so we write out the rasters and load them again (see unrendered code).\n\necodistrict_16 <- sf::st_transform(ecodistrict, sf::st_crs(lu_16))\necodistrict_17 <- sf::st_transform(ecodistrict, sf::st_crs(lu_17))\n\nlu_16_crop <- raster::crop(lu_16, ecodistrict_16)\nlu_16_crop_mask <- raster::mask(lu_16_crop, ecodistrict_16)\n\nlu_17_crop <- raster::crop(lu_17, ecodistrict_17)\nlu_17_crop_mask <- raster::mask(lu_17_crop, ecodistrict_17)\n\nWe can then get the frequencies of values. This operation is also costly so we write out the objects and load them again (see unrendered code).\n\nlu_16_freq <- raster::freq(lu_16_crop_mask)\nlu_17_freq <- raster::freq(lu_17_crop_mask)\n\nWe combine the results of both UTMs.\n\nres_ecodistrict <- rbind(lu_16_freq, lu_17_freq) |>\n as.data.frame() |> \n dplyr::group_by(value) |> \n dplyr::summarise(count = sum(count)) |> \n dplyr::ungroup() |> \n dplyr::filter(!is.na(value)) |> \n dplyr::mutate(prop = count/sum(count)) |> \n dplyr::mutate(value = as.factor(value)) |>\n dplyr::left_join(lu_dat, by = c(\"value\" = \"cats\")) |>\n dplyr::filter(!is.na(label)) |> \n dplyr::select(category_code, prop, label) |> \n dplyr::mutate(scale = \"Ecodistrict\") |> \n dplyr::relocate(scale) |>\n dplyr::arrange(scale, dplyr::desc(prop))\n\nknitr::kable(res_ecodistrict)\n\n\n\n\nscale\ncategory_code\nprop\nlabel\n\n\n\n\nEcodistrict\nTrFEN\n0.25\nTreed Fen\n\n\nEcodistrict\nOBOG\n0.20\nOpen Bog\n\n\nEcodistrict\nTrBOG\n0.19\nTreed Bog\n\n\nEcodistrict\nConSWA\n0.12\nConiferous Swamp\n\n\nEcodistrict\nOFEN\n0.09\nOpen Fen\n\n\nEcodistrict\nWAT\n0.07\nClear Open Water\n\n\nEcodistrict\nConTRE\n0.04\nConiferous Treed\n\n\nEcodistrict\nNSWood\n0.01\nDisturbance - Non and Sparse Woody\n\n\nEcodistrict\nTrOrSHr\n0.01\nDisturbance - Treed and/or Shrub\n\n\nEcodistrict\nMixTRE\n0.01\nMixed Treed\n\n\nEcodistrict\nThSWA\n0.01\nThicket Swamp\n\n\nEcodistrict\nSpTRE\n0.00\nSparse Treed\n\n\nEcodistrict\nXWAT\n0.00\nTurbid Water\n\n\nEcodistrict\nDecTRE\n0.00\nDeciduous Treed\n\n\nEcodistrict\nMIN\n0.00\nSand/Gravel/Mine Tailings\n\n\nEcodistrict\nFrMAR\n0.00\nFreshwater Marsh\n\n\nEcodistrict\nBED\n0.00\nBedrock\n\n\nEcodistrict\nURB\n0.00\nCommunity/Infrastructure\n\n\nEcodistrict\nDecSWA\n0.00\nDeciduous Swamp\n\n\nEcodistrict\nInMAR\n0.00\nIntertidal Marsh\n\n\n\n\n\nAnd then combine the results between scales and utm.\n\nres <- rbind(res_points, res_ecodistrict) |> \n tidyr::complete(scale, label) |> \n tidyr::replace_na(list(prop = 0)) |> \n dplyr::mutate(label = forcats::fct_reorder(label, prop))", + "text": "Extracting Land Cover data\nThe following functions will take care of land cover extraction for sites.\n\nextract_from_points <- function(scale_m, sites, lu) {\n \n sites_buffer <- sites |>\n sf::st_transform(sf::st_crs(lu)) |> \n sf::st_buffer(dist = scale_m) |> \n dplyr::select(siteID)\n \n extr <- exactextractr::exact_extract(lu, sites_buffer,\n progress = FALSE)\n \n extr <- mapply(extr, 1:length(extr), \n FUN = \\(x, y) dplyr::mutate(x, id = y),\n SIMPLIFY = F)\n \n extr_df <- do.call(rbind, extr) |>\n dplyr::filter(!is.na(value)) |>\n dplyr::relocate(id)\n \n return(extr_df)\n \n}\n\ncompute_land_cover <- function(scale_m, sites, \n lu_16, lu_17, lu_dat) {\n \n extr_16_df <- extract_from_points(scale_m, sites, lu_16)\n extr_17_df <- extract_from_points(scale_m, sites, lu_17)\n \n stopifnot(all(!(extr_16_df$siteID %in% extr_17_df$siteID)))\n \n extr <- rbind(extr_16_df, extr_17_df) |>\n dplyr::arrange(id, value)\n \n extr_table <- extr |>\n dplyr::group_by(value) |>\n dplyr::summarise(coverage_fraction_sum = sum(coverage_fraction)) |>\n dplyr::mutate(prop = \n coverage_fraction_sum/sum(coverage_fraction_sum)) |>\n dplyr::ungroup() |>\n dplyr::mutate(value = as.factor(value)) |>\n dplyr::left_join(lu_dat, by = c(\"value\" = \"cats\")) |>\n dplyr::select(category_code, prop, label)\n \n extr_table[is.na(extr_table)] <- 0\n \n return(extr_table)\n \n}\n\nWe extract at different scales (buffer radius around points): 1 m, 50 m, 100 m and 1 km.\n\nres_points <- mapply(FUN = compute_land_cover, \n c(`1 m` = 1, `50 m` = 50,\n `100 m` = 100, `1 km` = 1000),\n MoreArgs = list(\n sites = sites_possible,\n lu_16 = lu_16, lu_17 = lu_17, lu_dat = lu_dat),\n SIMPLIFY = F) |>\n dplyr::bind_rows(.id = 'scale') |>\n dplyr::mutate(scale = forcats::fct_relevel(scale, \"1 m\", \"50 m\",\n \"100 m\", \"1 km\"),\n label = forcats::fct_reorder(label, prop)) |> \n dplyr::arrange(scale, dplyr::desc(prop))\n\nknitr::kable(res_points)\n\n\n\n\nscale\ncategory_code\nprop\nlabel\n\n\n\n\n1 m\nTrBOG\n0.26\nTreed Bog\n\n\n1 m\nTrFEN\n0.23\nTreed Fen\n\n\n1 m\nOBOG\n0.20\nOpen Bog\n\n\n1 m\nConSWA\n0.11\nConiferous Swamp\n\n\n1 m\nConTRE\n0.10\nConiferous Treed\n\n\n1 m\nOFEN\n0.06\nOpen Fen\n\n\n1 m\nSpTRE\n0.02\nSparse Treed\n\n\n1 m\nMixTRE\n0.02\nMixed Treed\n\n\n50 m\nTrBOG\n0.23\nTreed Bog\n\n\n50 m\nTrFEN\n0.22\nTreed Fen\n\n\n50 m\nOBOG\n0.21\nOpen Bog\n\n\n50 m\nConSWA\n0.12\nConiferous Swamp\n\n\n50 m\nConTRE\n0.09\nConiferous Treed\n\n\n50 m\nOFEN\n0.07\nOpen Fen\n\n\n50 m\nSpTRE\n0.03\nSparse Treed\n\n\n50 m\nMixTRE\n0.02\nMixed Treed\n\n\n50 m\nWAT\n0.01\nClear Open Water\n\n\n50 m\nXWAT\n0.00\nTurbid Water\n\n\n100 m\nTrBOG\n0.23\nTreed Bog\n\n\n100 m\nTrFEN\n0.22\nTreed Fen\n\n\n100 m\nOBOG\n0.20\nOpen Bog\n\n\n100 m\nConSWA\n0.12\nConiferous Swamp\n\n\n100 m\nConTRE\n0.10\nConiferous Treed\n\n\n100 m\nOFEN\n0.08\nOpen Fen\n\n\n100 m\nWAT\n0.03\nClear Open Water\n\n\n100 m\nSpTRE\n0.02\nSparse Treed\n\n\n100 m\nMixTRE\n0.01\nMixed Treed\n\n\n100 m\nXWAT\n0.01\nTurbid Water\n\n\n1 km\nTrFEN\n0.21\nTreed Fen\n\n\n1 km\nTrBOG\n0.21\nTreed Bog\n\n\n1 km\nOBOG\n0.19\nOpen Bog\n\n\n1 km\nConSWA\n0.17\nConiferous Swamp\n\n\n1 km\nOFEN\n0.07\nOpen Fen\n\n\n1 km\nConTRE\n0.06\nConiferous Treed\n\n\n1 km\nWAT\n0.04\nClear Open Water\n\n\n1 km\nMixTRE\n0.01\nMixed Treed\n\n\n1 km\nXWAT\n0.01\nTurbid Water\n\n\n1 km\nThSWA\n0.01\nThicket Swamp\n\n\n1 km\nSpTRE\n0.00\nSparse Treed\n\n\n1 km\nNSWood\n0.00\nDisturbance - Non and Sparse Woody\n\n\n1 km\nDecTRE\n0.00\nDeciduous Treed\n\n\n1 km\nTrOrSHr\n0.00\nDisturbance - Treed and/or Shrub\n\n\n1 km\nBED\n0.00\nBedrock\n\n\n\n\n\nWe also want to do the same operation for the ecodistrict to allow for comparison. We don’t need to use exact extraction, insteadt the crop and mask each raster. This operation is costly so we write out the rasters and load them again (see unrendered code).\n\necodistrict_16 <- sf::st_transform(ecodistrict, sf::st_crs(lu_16))\necodistrict_17 <- sf::st_transform(ecodistrict, sf::st_crs(lu_17))\n\nlu_16_crop <- raster::crop(lu_16, ecodistrict_16)\nlu_16_crop_mask <- raster::mask(lu_16_crop, ecodistrict_16)\n\nlu_17_crop <- raster::crop(lu_17, ecodistrict_17)\nlu_17_crop_mask <- raster::mask(lu_17_crop, ecodistrict_17)\n\nWe can then get the frequencies of values. This operation is also costly so we write out the objects and load them again (see unrendered code).\n\nlu_16_freq <- raster::freq(lu_16_crop_mask)\nlu_17_freq <- raster::freq(lu_17_crop_mask)\n\nWe combine the results of both UTMs.\n\nres_ecodistrict <- rbind(lu_16_freq, lu_17_freq) |>\n as.data.frame() |> \n dplyr::group_by(value) |> \n dplyr::summarise(count = sum(count)) |> \n dplyr::ungroup() |> \n dplyr::filter(!is.na(value)) |> \n dplyr::mutate(prop = count/sum(count)) |> \n dplyr::mutate(value = as.factor(value)) |>\n dplyr::left_join(lu_dat, by = c(\"value\" = \"cats\")) |>\n dplyr::filter(!is.na(label)) |> \n dplyr::select(category_code, prop, label) |> \n dplyr::mutate(scale = \"Ecodistrict\") |> \n dplyr::relocate(scale) |>\n dplyr::arrange(scale, dplyr::desc(prop))\n\nknitr::kable(res_ecodistrict)\n\n\n\n\nscale\ncategory_code\nprop\nlabel\n\n\n\n\nEcodistrict\nTrFEN\n0.25\nTreed Fen\n\n\nEcodistrict\nOBOG\n0.20\nOpen Bog\n\n\nEcodistrict\nTrBOG\n0.19\nTreed Bog\n\n\nEcodistrict\nConSWA\n0.12\nConiferous Swamp\n\n\nEcodistrict\nOFEN\n0.09\nOpen Fen\n\n\nEcodistrict\nWAT\n0.07\nClear Open Water\n\n\nEcodistrict\nConTRE\n0.04\nConiferous Treed\n\n\nEcodistrict\nNSWood\n0.01\nDisturbance - Non and Sparse Woody\n\n\nEcodistrict\nTrOrSHr\n0.01\nDisturbance - Treed and/or Shrub\n\n\nEcodistrict\nMixTRE\n0.01\nMixed Treed\n\n\nEcodistrict\nThSWA\n0.01\nThicket Swamp\n\n\nEcodistrict\nSpTRE\n0.00\nSparse Treed\n\n\nEcodistrict\nXWAT\n0.00\nTurbid Water\n\n\nEcodistrict\nDecTRE\n0.00\nDeciduous Treed\n\n\nEcodistrict\nMIN\n0.00\nSand/Gravel/Mine Tailings\n\n\nEcodistrict\nFrMAR\n0.00\nFreshwater Marsh\n\n\nEcodistrict\nBED\n0.00\nBedrock\n\n\nEcodistrict\nURB\n0.00\nCommunity/Infrastructure\n\n\nEcodistrict\nDecSWA\n0.00\nDeciduous Swamp\n\n\nEcodistrict\nInMAR\n0.00\nIntertidal Marsh\n\n\n\n\n\nAnd then combine the results between scales and utm.\n\nres <- rbind(res_points, res_ecodistrict) |> \n tidyr::complete(scale, label) |> \n tidyr::replace_na(list(prop = 0)) |> \n dplyr::mutate(label = forcats::fct_reorder(label, prop))", "crumbs": [ "Site Analysis", "Land Cover Analysis" @@ -55,7 +55,7 @@ "href": "index.html#results", "title": "Land Cover Analysis", "section": "Results", - "text": "Results\nWe can plot the results with “dodged” ggplot2 barplots.\n\nmy_pal <- c('#c7e9b4','#7fcdbb','#41b6c4','#1d91c0','#225ea8','#0c2c84')\n\nggplot(res) +\n geom_bar(aes(x = label, y = prop, fill = scale, colour = scale), \n alpha = 0.8,\n stat = \"identity\",\n position = \"dodge\") +\n theme_bw() +\n theme(axis.text.x = element_text(angle = 20, vjust = 1, hjust = 1)) +\n labs(x = \"Land Use Class\", y = \"Sum of Proportions\",\n fill = \"Scale\", colour = \"Scale\") +\n scale_fill_manual(values = my_pal) +\n scale_color_manual(values = my_pal)\n\n\n\n\n\n\n\n\nRemoving the land use classes than are not present around sites, we get a slightly easier graph to read.\n\nonly_at_sites <- res |> \n dplyr::filter(prop > 0) |> \n dplyr::filter(scale != \"Ecodistrict\") |> \n dplyr::pull(label)\n\nres_filt <- res |> \n dplyr::filter(label %in% only_at_sites)\n\nggplot(res_filt) +\n geom_bar(aes(x = label, y = prop, fill = scale, colour = scale), \n alpha = 0.8,\n stat = \"identity\",\n position = \"dodge\") +\n theme_bw() +\n theme(axis.text.x = element_text(angle = 20, vjust = 1, hjust = 1)) +\n labs(x = \"Land Use Class\", y = \"Sum of Proportions\",\n fill = \"Scale\", colour = \"Scale\") +\n scale_fill_manual(values = my_pal) +\n scale_color_manual(values = my_pal)", + "text": "Results\nWe can plot the results with “dodged” ggplot2 barplots.\n\nmy_pal <- c('#c7e9b4','#7fcdbb','#41b6c4','#1d91c0','#225ea8','#0c2c84')\n\nggplot(res) +\n geom_bar(aes(x = label, y = prop, fill = scale, colour = scale), \n alpha = 0.8,\n stat = \"identity\",\n position = \"dodge\") +\n theme_bw() +\n theme(axis.text.x = element_text(angle = 20, vjust = 1, hjust = 1)) +\n labs(x = \"Land Use Class\", y = \"Sum of Proportions\",\n fill = \"Scale\", colour = \"Scale\") +\n scale_fill_manual(values = my_pal) +\n scale_color_manual(values = my_pal)\n\n\n\n\n\n\n\n\nRemoving the land use classes than are not present around sites, we get a slightly easier graph to read.\n\nonly_at_sites <- res |> \n dplyr::filter(prop > 0) |> \n dplyr::filter(scale != \"Ecodistrict\") |> \n dplyr::pull(label)\n\nres_filt <- res |> \n dplyr::filter(label %in% only_at_sites)\n\nggplot(res_filt) +\n geom_bar(aes(x = label, y = prop, fill = scale, colour = scale), \n alpha = 0.8,\n stat = \"identity\",\n position = \"dodge\") +\n theme_bw() +\n theme(axis.text.x = element_text(angle = 20, vjust = 1, hjust = 1)) +\n labs(x = \"Land Use Class\", y = \"Proportion\",\n fill = \"Scale\", colour = \"Scale\") +\n scale_fill_manual(values = my_pal) +\n scale_color_manual(values = my_pal)", "crumbs": [ "Site Analysis", "Land Cover Analysis" diff --git a/index.qmd b/index.qmd index 586331e..abcbc96 100644 --- a/index.qmd +++ b/index.qmd @@ -185,7 +185,7 @@ And then combine the results between scales and utm. res <- rbind(res_points, res_ecodistrict) |> tidyr::complete(scale, label) |> tidyr::replace_na(list(prop = 0)) |> - dplyr::mutate(label = forcats::fct_reorder(label, prop)) + dplyr::mutate(label = forcats::fct_reorder(label, prop)) ``` ## Results @@ -227,7 +227,7 @@ ggplot(res_filt) + position = "dodge") + theme_bw() + theme(axis.text.x = element_text(angle = 20, vjust = 1, hjust = 1)) + - labs(x = "Land Use Class", y = "Sum of Proportions", + labs(x = "Land Use Class", y = "Proportion", fill = "Scale", colour = "Scale") + scale_fill_manual(values = my_pal) + scale_color_manual(values = my_pal)