Menu
library(dataRetrieval) library(scales) library(lubridate) library(tidyverse) # log scale tick marks and/or grid #' @param n Approximate number of ticks to produce #' @param NumBase Logarithm base logTicks <- function(n = 5, base = 10){ ##n indicated number of logarithm base ticks marks. e.g., base 10: 1, 2, 5, 10. divisors <- which((base / seq_len(base)) %% 1 == 0) mkTcks <- function(min, max, NumBase, divisor){ f <- seq(divisor, base, by = divisor) return(unique(c(base^min, as.vector(outer(f, base^(min:max), `*`))))) } function(x) { rng <- range(x, na.rm = TRUE) lrng <- log(rng, base = base) min <- floor(lrng[1]) max <- ceiling(lrng[2]) tck <- function(divisor){ t <- mkTcks(min, max, NumBase, divisor) t[t >= rng[1] & t <= rng[2]] } # produce a set of ticks and count how many ticks tcks <- lapply(divisors, function(d) tck(d)) l <- vapply(tcks, length, numeric(1)) # Take the set of ticks which is nearest to the desired number of ticks i <- which.min(abs(n - l)) if(l[i] < 2){ ticks <- pretty(x, n = n, min.n = 2) }else{ ticks <- tcks[[i]] } return(ticks) } } themebox <- function(base_family = "sans", ...){ theme_bw(base_family = base_family, ...) + theme( plot.title = element_text(size = 18, face = "bold", hjust=0.5), #plot.background = element_rect(fill = '#D6D5C9') #area not in the plot #panel.border = element_line(), panel.background = element_rect(fill="gray95", colour = "black"), panel.grid.major = element_line(size=0.95, linetype = 'solid',colour = "white"), panel.grid.minor = element_line(size=0.6, linetype = 'solid',colour = "white"), axis.ticks.length = unit(.15, "cm"), #spacing of axis text to plot panel; negative value closer to panel axis.ticks = element_line(colour = 'black',size=.60), axis.title = element_text(face="bold", size=18), axis.text.x=element_text(margin=unit(c(0.3,0.3,0.3,0.3), "cm"),colour="black", size = 12), axis.text.y=element_text(margin=unit(c(0.3,0.3,0.3,0.3), "cm"),colour="black", size = 18), axis.line = element_line(size=0.5, colour = "black"), #axis.ticks.x = element_blank(), legend.position="bottom", legend.box = "horizontal", #legend.background = element_blank(), #legend.margin=margin(0,0,0,0), #legend.title=element_blank() legend.box.margin=margin(-15,-10,-1,-10), legend.title=element_text(size=9), plot.margin = margin(0.25, 1, 0.01, 0.1, "cm") #(top,right,bottom,left), #aspect.ratio = .2, ) } Today<-as.POSIXlt(Sys.Date()) Today<-as.POSIXlt(Today) unlist(unclass(Today)) Today$mday <- Today$mday Today<-as.Date(Today) Year<-format(Sys.Date(), "%Y") site_no<-c('01463500', '01438500','01474500','01481000') site_name<-c('TRENTON, NJ', 'MONTAGUE, NJ', 'PHILADELPHIA, PA', 'CHADDS FORD, PA') river_name<-c('DELAWARE RIVER', 'DELAWARE RIVER', 'SCHUYLKILL RIVER', 'BRANDYWINE CREEK') file_name<-c('Trenton','Montague','Schuylkill','ChaddsFord') Dashboard<-data.frame(site_no, site_name, river_name, file_name) for (i in 1:nrow(Dashboard)){ png(file=paste0(Dashboard$file_name[i],".png"), width = 4000, height = 2000, res=300) Stats <- readNWISstat(siteNumbers = Dashboard$site_no[i],parameterCd = "00060", statReportType="daily", statType=c("p10","p25","p50","p75")) Stats <- readNWISstat(siteNumbers = Dashboard$site_no[i],parameterCd = "00060", statReportType="daily", statType=c("p10","p25","p50","p75")) Stats$MonthDay <- with(Stats, paste(month_nu, day_nu, sep="-")) FirstDate= Today-21 LastDate= Today DateFill<-c(FirstDate, LastDate) NewTimeSeries<-as.data.frame(DateFill) NewTimeSeries<- NewTimeSeries %>% mutate(DateFill = as.Date(DateFill)) %>% complete(DateFill = seq.Date(min(DateFill), max(DateFill), by="day")) NewTimeSeries$Year<-year(NewTimeSeries$DateFill) NewTimeSeries$Month<-month(NewTimeSeries$DateFill) NewTimeSeries$Day<-mday(NewTimeSeries$DateFill) NewTimeSeries $MonthDay <- with(NewTimeSeries, paste(Month, Day, sep="-")) Update<-right_join(Stats, NewTimeSeries, by = c("MonthDay", "MonthDay")) Update$Ymd <- as.Date(with(Update, paste(Year, Month, Day, sep="-")), "%Y-%m-%d") Update$dateTime<-as.POSIXct(Update$Ymd,tz="UTC") NOW<-readNWISuv(siteNumbers= Dashboard$site_no[i], parameterCd=c("00060"), startDate = Today-21, endDate = Today) OUTPUT<-right_join(Update, NOW, by = c("dateTime", "dateTime")) OUTPUT<-OUTPUT%>% select(21,23,24,10:14) colnames(OUTPUT)<-c("dateTime","site_no","X_00060_00000","count_nu","p10_va","p25_va","p50_va","p75_va") data_long <- gather(OUTPUT, PercentileName, PercentileValue, p10_va:p75_va, factor_key=TRUE) as.numeric(data_long$count_nu) All<-ggplot(data_long, mapping=aes(x=dateTime, y=X_00060_00000)) + geom_point(mapping=aes(x=dateTime, y=PercentileValue, color=factor(PercentileName)),size = 5, shape=17)+ stat_smooth(mapping=aes(x = dateTime, y = X_00060_00000, fill='Discharge'), method = "lm", formula = y ~ poly(x, 21), se = FALSE, size=2, color="black") + scale_y_log10(name = 'Discharge (cubic feet per second)', breaks = logTicks(n = 4), #1,2,4,10,100, etc. outline how many major base pair ticks marks minor_breaks = logTicks(n=10))+ scale_x_datetime(breaks = date_breaks("2 day"),labels = date_format("%b\n%d\n%Y"), name=NULL, minor_breaks = NULL, expand = c(0, 0))+ ggtitle(paste0("USGS ",Dashboard$site_no[i], " ",Dashboard$river_name[i], " AT ", Dashboard$site_name[i]))+ themebox()+ labs(color=paste0("(",mean(data_long$count_nu,na.rm=TRUE)," years)"))+ scale_fill_manual("",values=c("#171A21"))+ scale_linetype_manual(values=c("solid"))+ scale_shape_manual(values = c(17, 17, 17, 17))+ scale_color_manual(labels=c("P10","P25","P50","P75"), values=c("#FA2121","#FCD600","#01A558","#00AFEA"))+ ##FBB02D orange guides(fill = guide_legend(order = 1), colour = guide_legend(title.position = "right")) print(All) dev.off() } graphics.off() All
1 Comment
A nice and simple flow duration curve figure that anyone can use for analyzing probability. These figures display discharge vs. percent of time that a particular discharge. This information can become particularly useful to show how frequent particular discharges may occur or exceed some percentage of time (e.g., 25% and 75%) The area under the curve dictates the average daily flow, while the median daily flow is at 50% in the case above over a 74 year period utilizing average daily flows. library(tidyverse) library(dataRetrieval) source('logtickmarks.r') #function for specifying logarithmic y-axis breaks options(scipen=999) #removing scientific notation TRENTONFlow <- readNWISdv(siteNumber='01463500',parameterCd=c("00060")) #Importing USGS average daily flow values for Trenton, NJ #Attached below is a specific function for outputting a logarithmic tick mark/grid. #Developing ggplot2 theme format themebox <- function(base_family = "sans", ...){ theme_bw(base_family = base_family, ...) + theme( plot.title = element_text(size = 18, face = "bold"), axis.ticks.length = unit(-0.05, "in"), axis.title = element_text(face="bold", size=18), axis.text.x=element_text(margin=unit(c(0.3,0.3,0.3,0.3), "cm"),colour="black", size = 18), axis.text.y=element_text(margin=unit(c(0.3,0.3,0.3,0.3), "cm"),colour="black", size = 18), axis.line = element_line(size=0.5, colour = "black"), #axis.ticks.x = element_blank(), aspect.ratio = .8, legend.background = element_rect(color = "black", fill = "white") ) } TRENTONFlow %>% mutate(my_rank = 1 - percent_rank(X_00060_00003)) %>% #transforming flow values into a ranked percentage mutate(my_rank = if_else(my_rank == 0.01, 1, my_rank)) %>% ggplot(aes(my_rank,X_00060_00003)) + geom_line(size=2) + ggtitle("Trenton New Jersey - Flow Duration Curve") + scale_y_log10(name = 'Predicted daily flows (cfs)', breaks = logTicks(n = 10), #1,2,4,10,100, etc. outline how many major base pair ticks marks minor_breaks = logTicks(n=100))+ #outline how many minor base pair ticks marks; keep in mind logarithmic scale_x_continuous(name = 'Percentage of time flow exceeded')+ themebox()
Deriving all present, active, and historic USGS gage data across multiple state boundaries can be achieved by utilizing a sub-region approach filtering through HUC8 conditions.
R Source Code: All Active USGS Gages in the Delaware River Basin
#The following code should be run in its own Rstudio Project Folder library(dataRetrieval) library(tidyverse) library(openxlsx) Huc<-read.xlsx("USGSSiteNoDRB_Baseflow.xlsx", sheet = 2) . #data found at https://water.usgs.gov/GIS/huc_name.html #Filtering out all USGS gages by Huc8 level throughout the Delaware River Basin for (j in 1:nrow(Huc)){ sqw_mindailyT <- readNWISdata(huc=Huc$Cataloging.Units[j]) form=sprintf('SQW/sqw_mindailyT.%s.csv', Huc$Cataloging.Units[j]) write.csv(sqw_mindailyT, file = form, row.names = FALSE ) } ##Scrubbing through each Huc8 output and inputting them into one master list FilePath<-c('SQW/') files <- list.files(path = FilePath, pattern = "*.csv", full.names = T) tbl <- sapply(files, read_csv, simplify=FALSE) %>% bind_rows(.id = "id") idsplit<-strsplit(tbl$id, ".", fixed=TRUE) mat <- matrix(unlist(idsplit), ncol=3, byrow=TRUE) df <- as.data.frame(mat) df <- cbind(df, tbl) colnames(df) <- c("Directory","HUC","FileExt",paste0(colnames(tbl))) df write.csv(df,"SQW/Output/df.csv", row.names = FALSE) ##Reading site_no input for all USGS gages pulled from the HUC8 level and obtaining #dec_lat_va #dec_long_va #site_tp_cd #begin_date/end_date datalist = list() #creating blank data list for (j in 1:nrow(df)){ dailyDataAvailable <- readNWISsite(siteNumbers=df$site_no[j]) print(dailyDataAvailable) datalist[[j]]<- dailyDataAvailable } big_data = do.call('rbind', datalist) big_data<-distinct(big_data,site_no, .keep_all = TRUE) #Removing duplicate records write.csv(big_data,"SQW/Output/USGSBigDataDRB.csv", row.names = FALSE)
#https://github.com/EvanAquatic/Isopleths/blob/master/Isopleths%20Code%20R #Data used from Lake Washington, WA (Lake Washington. (2016, Februrary 26) Retrived October 23, 2018, from https://www.kingcounty.gov/services/environment/water-and-land/lakes/lakes-of-king-county/lake-washington.aspx) #You can use either a concatenate for %m.%d or use POSIXct for relying time series library(tidyverse) library(reshape2) library(colorRamps) library(scales) library(MBA) #Utilizing either Temperature.C or DO.Concentration.mg.L or #Utilizing either Temperature.C, DO.Concentration.mg.L or Relative.Resistence.to.Mixing.mg/m^3 mba<-mba.surf(Sample[,c('MonthDay', 'Depth..m.', 'Dissolved.Oxygen..mg.L.')], 100, 100) dimnames(mba$xyz.est$z) <- list(mba$xyz.est$x, mba$xyz.est$y) SampleMelt<-melt(mba$xyz.est$z, varnames = c('MonthDay', 'Depth..m.'), value.name = 'Dissolved.Oxygen..mg.L.) Fig <- ggplot(data=SampleMelt, aes(MonthDay, Depth..m.))+ geom_raster(aes(fill = Dissolved.Oxygen..mg.L.), interpolate = F, hjust = 0.5, vjust = 0.5) + geom_contour(aes(z = Dissolved.Oxygen..mg.L.)) + # geom_point(data = df3, aes(date, Sample.depth..m.), colour = 'white') + #scale_x_datetime( limits = c(as.POSIXct("2000-01-01"),as.POSIXct("2000-12-31")))+ scale_x_continuous(expand =c(0,0), limits = c(1,12), breaks=c(1,2,3,4,5,6,7,8,9,10,11,12))+ scale_y_reverse(expand = c(0, 0), breaks=c(0,1,5,10,15,20,25,30,35,40,45,50,55)) + scale_fill_gradientn(colours=rev(matlab.like2(7)),limits=c(0,15), breaks=c(0,2.5,5,7.5,10,12.5,15), name="DO (mg/L)")+ #scale_fill_gradientn(colours=matlab.like2(7),limits=c(0,30),breaks=c(0,5,10,15,20,25,30), name="Temperature (C)")+ #scale_fill_gradientn(colours=matlab.like2(7),limits=c(0,14),breaks=c(0,2,4,6,8,10,12,14), name="RTRM (mg/m^3")+ ## Since the palette is a vector use colours = rev(matlab.like2(7)) change to red2green2blue labs(title='Lake Washington (##Water Temperature, Dissolved Oxygen or RTRM) Isopleths for April - October 2018') + #subtitle="", tags="A", caption="()" xlab("Month")+ ylab("Water Depth (m)")+ theme(plot.title = element_text(color="#000000",family = "sans", size=14)) + theme(axis.title.x = element_text(colour = "#000000", family="sans",size=12))+ #windowsFonts() serif=TNR, sans=Arial, mono=Courier theme(axis.title.y = element_text(colour = "#000000", family="sans", size=12))+ #face="bold/plain/italic/bold.italic", color="#000000", size=# pts, angle=# (0,360) theme(axis.text.x = element_text(color="#000000", size=10.5, family="sans"))+ theme(axis.text.y = element_text(color="#000000", size=10.5, family="sans")) Fig ggsave(filename="~/##########.pdf", Fig, width=11, height=6.5)
Getting outdoors and going fishing is an excellent activity with exposure to some excellent scenery, but fishing shouldn’t be a mystery. A fishing notebook allows you to keep track of the methods and techniques that have and have not worked. When keeping a notebook over time, you will begin to analyze trends and patterns you may have missed otherwise. What worked last time is likely to work again! A fishing notebook with basic information is useful, but detailing more information will maximize your fishing habitats, patterns and techniques. However simply trying to find a basic fishing notebook appears to be extremely difficult. In regards to this issue I have created a simple and comprehensive universal fishing notebook attached below. The universal fishing notebook can be used in any type of lentic or non moving (i.e., ponds, lakes, reservoirs, oceans) and lotic or moving (i.e., creeks, rivers, streams) water environments. Additionally this notebook can also be used for calculating catch efficiency and analyze trends associated with different terminal tackle, techniques (e.g., fly fishing, wreck/bottom fishing, top and mid-water lures, etc..) and with seasonal and physical environmental parameters. Detailing and documenting your fishing experiences will give you valuable tools for landing that trophy fish.
Relative thermal resistance to mixing is able to quantify stratification as a function of temperature differential, exact position of the thermocline, the exact width of the metalimnion, and how stable of stratification results from an non linear change. RTRM identifies a relatively easy computation. Instead of visually trying to identify stratification this method can be utilized to identify both the location and intensity of thermal stratification. #https://github.com/EvanAquatic #Function to calculate water density (mg/m^3) from water temperature (celsius) WaterDensityCalc <- function(x) { Density=(1000*(1-((Temperature+288.9414)/(508929.2*(Temperature+68.12963)))*(Temperature-3.9863)^2)/1000) #output is water density in mg/m^3 } Depth=Profile$Sample.Depth Temperature=Profile$Temperature Water_Density<-WaterDensityCalc(Temperature) ###Calculating water density from the defined function RTRM<-data.frame(Profile$Sampling.Location, Depth, Temperature, Water_Density) ###Creating dataframe with outputs ##Calculate RTRM RTRM$RTRM_OUTPUT= NA for(i in seq(1, nrow(RTRM))){ RTRM[i,"RTRM_OUTPUT"] = RTRM[i,"RTRM_OUTPUT"] = ((RTRM[i+1,"Water_Density"] - RTRM[i,"Water_Density"])/(1-0.9999919)) } #1000*(1-((4+288.9414)/(508929.2*(4+68.12963)))*(4-3.9863)^2)/1000=1 #1000*(1-((5+288.9414)/(508929.2*(5+68.12963)))*(5-3.9863)^2)/1000=0.9999919 RTRM$RTRM_OUTPUT[RTRM$RTRM_OUTPUT<0]<-0 #Removing negative values RTRM #######General Plots and Figures library(ggplot2) library(MASS) library(reshape) library(reshape2) #Incorporating influences of month or date #RTRM$NewDate <- format(as.Date(RTRM$RTRM1.Date, format="%m/%d/%Y"), "%Y/%m") #RTRM$Monthday <- format(as.Date(RTRM$RTRM1.Date, format="%m/%d/%Y"), "%m/%d") ################### #Creating new dataframes to plot water temperature and RTRM df<-data.frame(RTRM$Profile.Sampling.Location, RTRM$Depth, RTRM$Temperature, RTRM$RTRM_OUTPUT) names(df)<-c("SampleLocation", "Depth", "Temperature", "RTRM") #New datadrame output with new header names; length=lt and weight=wt newdf<- melt(df, id = c("SampleLocation","Depth")) names(newdf)<-c("SampleLocation", "Depth", "Legend", "Output") #New datadrame output with new header names; length=lt and weight=wt ###Water Temperature and RTRM Profile Plot Outputs g<-ggplot(newdf, aes(x=Output, y =Depth, color=Legend))+ theme_bw() + geom_path(aes(linetype=Legend),linejoin = 'round', size=1 ) + facet_wrap(~SampleLocation, ncol=5)+ # facet_grid(Collection.Date.ymd~Collection.Year)+ labs(title='4/26/2018 Reservoir Relative Thermal Resistance to Mixing (RTRM) and Water Temperature Profiles')+ xlab("Temperature (C) and RTRM (g/m^3)")+ ylab("Depth (m)")+ scale_x_continuous(limits=c(0,30), expand=c(0,0))+ scale_y_reverse(breaks=seq(12,0, by=-1), limits=c(12,0), expand=c(0,0)) + theme(strip.text = element_text(size=6.5, lineheight=0.1, hjust=0.5), axis.text.y = element_text(size=8, colour="black"), axis.text.x = element_text(size=8, colour="black"), panel.spacing = unit(1, 'lines'), legend.position = "top", legend.background = element_rect(color = "black", size = .1), legend.direction = "horizontal") ################### #Creating new dataframes to plot Dissolved Oxygen, pH, % Dissolved Oxygen, etc. df2<-data.frame(Profile$Sampling.Location, Profile$Sample.Depth, Profile$Dissolved.Oxygen) names(df2)<-c("SampleLocation", "Depth", "Dissolved Oxygen") #New datadrame output with new header names; length=lt and weight=wt newdf2<- melt(df2, id = c("SampleLocation","Depth")) names(newdf2)<-c("SampleLocation", "Depth", "Legend", "Output") #New datadrame output with new header names; length=lt and weight=wt ###Dissolved Oxygen Profile Plot Outputs g<-ggplot(newdf2, aes(x=Output, y =Depth, color=Legend))+ theme_bw() + geom_path(aes(linetype=Legend), size=1 ) + facet_wrap(~SampleLocation, ncol=5)+ # facet_grid(Collection.Date.ymd~Collection.Year)+ labs(title='4/26/2018 Reservoir Dissolved Oxygen Profiles')+ xlab("Dissolved Oxygen (mg/L)")+ ylab("Depth (m)")+ scale_x_continuous(limits=c(0,12), expand=c(0,0))+ scale_y_reverse(breaks=seq(12,0, by=-1), limits=c(12,0), expand=c(0,0)) + theme(strip.text = element_text(size=6.5, lineheight=0.1, hjust=0.5), axis.text.y = element_text(size=8, colour="black"), axis.text.x = element_text(size=8, colour="black"), panel.spacing = unit(1, 'lines'), legend.position = "top", legend.background = element_rect(color = "black", size = .5), legend.direction = "horizontal") [1] Kortmann, R.W. 1990. Thermal Stratification in Reservoirs: Causes, Consequences, Management Techniques. Proceedings AWWA-WQTC, San Diego, November 1990. Evaluating sediment characteristics is essential, particularly as it pertains to salt marsh restoration dieback events. These dieback events on salt marshes result in the loss of Spartina alterniflora exposing open areas that create a loss in the accumulation of organic material and areas that become highly susceptible to erosion. Often an influential cause for vegetative dieback events are a result of prolonged water inundation. Vegetation exposed to continued water inundation promotes water logged soils as well as increased concentrations of sulfides in the soils porewater [2]. Another potential association to a vegetative dieback event could be caused by soil desiccation. As a result, from reduced water inundation soil desiccation would stimulate an increased supply of toxic metals and lowers pH soil levels [2]. One of the most influential characteristics to the loss of tidal influences is the absence of reducing sulfidic conditions. Hydric soil formations are developed through anaerobic (i.e., anoxic) conditions, which results from prolonged hydroperiods of soils. These anaerobic environments make sulfide materials readily available for sulfur adaptive bacteria. Sulfur adaptive bacteria are able to transfer sulfate to sulfide (hydrogen sulfide; H2S) and pyrite (FeS2) [4]. Often these processes are accelerated through an increased concentration of organic material. While sulfide soils do not cause an issue under natural tidal regimes, when these soils are left to dry, the sulfides in the soil begin to oxidize producing sulfuric acid and eventually jarosite, which greatly lowers a soils pH (<4.0) [3]. These processes create elevated acidic conditions that could negatively impact nearby vegetation and aquatic organisms. Under natural tidal salt marsh conditions, it is expected that the sequestration of carbon, nitrogen, and phosphorus would increase due to the reduced rate of decomposition. Carbon, nitrogen, and phosphorus in soils are the primary component needed for plant growth. Carbon (C) accumulation within salt marshes is the base layer for the incorporation and retention of nutrients and plant biomass. Contributions of organic and inorganic sediments eventually build up the marshes peat layer. Organic substrates and fine-textured materials (i.e., silt, loam, clay) tend to retain moisture and are more suitable for plant growth in salt marsh environments. Nitrogen (N) is an essential nutrient needed by plants. Nitrogen is found throughout a plants physiology and contained within their cells, and proteins. Nitrogen can enter soils through numerous pathways and become incorporated into the plant. However, when nitrogen is incorporated into hydric soil it is converted in the mineral form of nitrate, which can then become utilized by plants. Changes to nutrient availability within salt marsh ecosystems can drastically alter the species composition. Most of the species will transition into a macroalgae community with excess nitrogen availability [1]. Spartina alternifora has also been shown to outcompete Spartina patens within excess nitrogen sources [5]. Phosphorus (P) is also an essential nutrient that helps transfer energy from sunlight to the plant. Phosphorus is the general nutrient that helps simulate early root development, and strengthens stalks and stems. These compounds are the major nutrients that are needed towards the incorporation of peat material and influence a healthy salt marsh through sequestration. As oxidization occurs within restored salt marshes it is expected that these areas would experience a loss organic matter due to an increase of decomposition. The presence of inorganic material used as placement material potentially hinders new materials becoming incorporated into soils [1]. Although nutrients can be beneficial for the revitalization of plant growth, excess nutrients may also result in a decline of the recovery of the marsh. Healthy salt marshes are considered a sink for trace metal. These metals are often tied up in organic matter and sulfides that result from an anaerobic and extended flooding. Tidal restrictions to presently restored placement areas would cause oxidized conditions of total organics and sulfides. Oxidized soils would subsequently solubilize metals into soil and vegetative porewater. Oxidized environments could then become sources for solubilized metals through the exchange of porewater and surface water. Acidic soils could also further increase the solubility of metals within these environments. [1] Anisfeld, S.C., M.J. Tobin and G. Benoit. 1999. “Sedimentation Rates in Flow-Restricted and Restored Salt Marshes in Long Island Sound.” Estuaries 22:231-44 [2] Ogburn, Matthew Bryan, and Merryl Abler. “An investigation of salt marsh dieback in Georgia using field transplants.” Estuaries and Coasts 29.1 (2006): 54-62 [3] Rabenhorst, M.C., D.S. Fanning, and S.N. Burch 2002. Acid Sulfate Soils, Formation. In: R. Lal (ed.). Encyclopedia of Soil Science. Marcel Dekker, New York. 14-18. [4] Reddy, K.R., and R.D. DeLaune. 2008. Biogeochemistry of Wetlands: Science and Applications. CRC Press, Taylor & Francis Group, Boca Raton, FL. [5] Wigand, C., R. McKinney, M. Chintala, M. Charpentier, and G. Thursby. 2003. “Relationships of Nitrogen Loadings, Residential Development and Physical Characteristics with Plant Structure in New England Salt Marshes.” Estuaries 26: 1494-1504. The increase of protecting salt marshes has accelerated throughout the world due to coastal protection, but understanding how communities of nekton (aquatic animals, such as fish and invertebrates that are capable of movement independently of tides and/or current) are affected by replenishment efforts is extremely limited (Roman et al., 2002). These replenishment practices are firstly aimed at replacing a thin layer of material over targeted areas of the marsh to increase its elevation; secondly replenishment efforts are aimed to concentrate fill material to expanding marsh pools by elevating the substrate to the same level of adjacent marshes. Quantitative results are imperative to understanding nekton assemblage within marsh environments to better understand restoration practices, while also evaluating current and future restoration practices. Killifish are considered the most structurally important and residential species within salt marsh aquatic sub-habitats (Collette and Klein-MacPhee 2002). Killifish are considered to be the most important species due to their dominance, productivity, and have been shown to be an indicator of early stages of a declining marsh environment over other nekton assemblage throughout marsh sub-habitats (Able et al. 2007). Mummichogs may disperse over the marsh surface if and when water is present. However, if water does not disperse over the marsh surface in the event of high flooding events, killifish occupy sub-habitats such as tidal creeks, ditches, and pools that are embedded deep in marsh habitat. These sub-habitats have been shown to be important forging areas for these species (Allen et al., 1994). Other important species that may contribute to food web linkage and production of the nekton community found within marsh are daggerblade grass shrimp (Palaemonetes pugio), Atlantic silversides (Menidia menidia), striped killifish (Fundulus majalis), and sheepshead minnows (Cyprinodon variegatus). Understanding abundance and dominance of nekton is fundamental in understanding physical tolerances of nekton survival. References:
Collette, B.B., and G. Klein-MacPhee (eds.) 2002. Bigelow and Schroeder’s Fishes of the Gulf of Maine. Washington: Smithsonian Institution Press. Allen Elizabeth A., Fell Paul E., Peck Myron A., Gieg Jennifer A., Gutike Carl R., Newkirk Michael D., Gut Contents of Common Mummichogs, Fundulus heteroclitus L., in a Restored Impounded Marsh and in Natural Reference Marshes. Estuaries. Vol. 17, No. 2, pp 462-471. June 1994. Able, K.W., J.H. Balletto, S.M. Hagan, P.R. Jivoff, and K. Strait. 2007, Linkages between salt marshes and other nekton habitats in Delaware Bay, USA. Reviews in Fisheries Science 15: 1-61. Roman, Charles T., Raposa, Kenneth B., Adamowicz Susan C., James-Pirri, Mary-Jane, Catena, John G. Quantifying Vegetation and Nekton Response to Tidal Restoration of a New England Salt Marsh. Restoration Ecology Vol. 10, No. 3, pp. 450-460. September 2002 Why do we see more anadromous species (spawning in freshwater, while living the duration of their lives in saltwater, only returning to freshwater environments to spawn, e.g. salmonids or lamprey) compared to catadromous species (spawning in saltwater, while living the duration of their lives in freshwater, only returning to saltwater environments to spawn, e.g. american eels or some mullets)? The difference in these diadromous fish migration has ultimately been described as a paradox. Geographically, you will find the highest quantity of aquatic species in tropical regions, containing the highest amount of diversity. Anadromous species are more prevalent within temperate latitudes, while finding catadromous species are more common in the tropics. There have been numerous hypotheses of the differences in food availability in ocean and freshwater habitats. Oceans often produce higher quantities of food compared to freshwater habitats in temperate latitudes where anadromous species predominate. Vega and Wiens (2012) assessed actinopterygian (class of ray-finned fish) richness, which contains 96% of all fish species found today. They found that richness was similar between both freshwater and saltwater clades. That marine actinopterygians derived from a freshwater ancestor! Diversify from this ancestor only started 110 million years ago. Through evolution percomorpha (spiny ray finned fish) now makes up 40% of bony fish. Another group, ostariophysi evolved from freshwater to saltwater and now makes up 70% of freshwater species. They indicate that some possible extinction might have caused the low marine species richness. After these mass extinctions, freshwater actinopterygians were then able to re-occupy and repopulated saltwater environments. Lack of marine diversity could be one explanation to why there is low diversity within marine environments. It’s easy to think how easily a freshwater species could diversify compared to a saltwater species. Freshwater habitats could be subjected to geographical barriers, take for instance the formation of the Andes and the Amazon River basin. The rise of the Andes enclosed a small bay. Overtime the bay became less saline, allowing for species to evolve. The bay would periodically be flooded with saltwater, introducing new species and more diversity. Vega, G. C., & Wiens, J. J. (2012). Why are there so few fish in the sea? Proceedings of the Royal Society B: Biological Sciences, 279 (1737), 2323-2329. Gross, M. R., Coleman, R. M., & McDowall, R. M. (1988). Aquatic productivity and the evolution of diadromous fish migration. Science(Washington), 239 (4845), 1291-1293. Demand for cultivating and farming of oysters has been increasing around the world due to growing food demand as well as practicing of sustainability. Potential threats to oyster aquaculture practices are numerous. These potential threats can be caused by disease “Dermo/MSX disease,” climate change, ocean acidification, pollution/eutrophication, and also invasive species. Potential diseases to oyster can firstly arise through parasites, leading to Dermo or MSX disease. These two diseases have caused massive mortality to the Atlantic shellfish fishery. This pathogen enters through the blood stream of oysters after being filtered through their gills, becoming abundant throughout their tissue. The oyster will become stressed, reduce its growth rate, begin to produce non-fertile spat, and will decrease the integrity of its shell. Rising ocean temperatures produce a potential threat to oyster aquaculture. Rising ocean temperatures allow for increased ocean acidification, which has the potential of impacting the integrity of oyster shells and in turn aquaculture practices. Rising temperatures coupled with inland run off of fertilizers and heavy metals allow for new and hazardous organisms to thrive. Microscopic planktonic dinoflagellates are known to thrive in eutrophication environments and can be linked to red tides and brown tides, both toxic and non-toxic blooms that at high levels cause death to marine organisms. Shellfish digest and filter out these dinoflagellates, which contain neurotoxins. Red tide formations are usually non-native to a naturally occurring system. The recognition of red tides causes paralytic shellfish poisoning (PSP). Another influential algal bloom beginning to occur is brown tides. The occurrence of the brown tides causes densities to get so numerous that shellfish are unable to filter. Shellfish then become unable to filter particles leaving these sessile organisms to starve. Oyster cultivating and farming plays a major role in benefiting the ecosystem and economy. Although, beneficial to ecosystem services and economic gain, potential threats cause integrity to this industry. This industry can be susceptible to disease, climate change, and pollution. Biotic and Abiotic factors both have the potential of influencing this dynamic cultivating practice. |
Archives
February 2020
Categories |