Giter Club home page Giter Club logo

ggvegan's Introduction

ggvegan; ggplot2-based plots for vegan

R build status CRAN version

What is ggvegan?

ggvegan is a package for the R statistical software and environment. It aims to implement ggplot-based versions of the plots produced by the vegan package. Initially, ggvegan will provide fortify and autoplot methods for objects created in vegan, with the aim of providing full replacement plots via autoplot. The fortify methods allow the data contained within objects created by vegan to be converted into a format suitable for use with ggplot directly.

Licence

ggvegan is released under the GNU General Public Licence, version 2.

Development & contributions

ggvegan uses the roxygen2 system to document package functions alongside the code itself.

ggvegan is very much alpha code at the moment. Comments and feedback on the approach taken are welcome, as are code contributions. See Design decisions below for two important areas for consideration

Design decisions

autoplot

The autoplot concept is somewhat poorly defined at the moment --- at least in public. I have taken it to mean that a full ggplot object is returned, which can then be augmented with additional layers and changes to the scales etc. This means that the aesthetics for the scores are hard-coded in the autoplot methods. If you want greater control over these aesthetics, use fortify to return the scores in a suitable format and build the plot up yourself. I hope to include at least one example of this, where applicable, in the help pages for each autoplot method.

fortify

fortify methods are supposed to return a data frame but this is not necessarily the most convenient representation for vegan's ordination objects where several data frames representing the various sets of ordination scores would be more natural. Currently, ggvegan follows the existing fortify convention of returning a single data frame so returns the ordination scores in long format with variables Score indicating the type of score and Label the label/rowname for each score.

Standard ordination methods

From version 0.0-9, I changed the representation of fortified ordination objects. The first two columns will now be Score and Label. The remaining columns will be the requested ordination dimensions, named as per the scores method from vegan. For example, a PCA will have columns named 'PC1', 'PC2', etc. How many and their numbering depending on the axes argument; the default is 1:6. Consequently, the 'dimLables' attribute is no longer necessary.

A further design decision is that ggvegan fortify methods for ordination objects will return all possible sets of scores and the set returned can not be chosen by the user. Instead, the sets of scores to be plotted should be chosen at the autoplot stage.

More specialised objects

The components returned for more specialised objects will typically vary as needed for a sensible, tidy data representation. Such fortify() methods will return suitable components. For example, fortify.prc() returns components Time, Treatment, and Response corresponding to the two-way factors defining the experiment and the regression coefficients on RDA axis 1 respectively.

Status

The following autoplot methods are currently available

  1. autoplot.cca --- for objects of classes "cca" and "capscale"
  2. autoplot.rda --- for objects of class "rda"
  3. autoplot.metaMDS --- for objects of class "metaMDS"
  4. autoplot.prc --- for objects of class "prc"
  5. autoplot.decorana --- for objects of class "decorana" (AKA DCA)
  6. autoplot.prestonfit --- for objects of class "prestonfit"
  7. autoplot.fisherfit --- for objects of class "fisherfit"

The following fortify method are currently available

  1. fortify.cca --- for objects of classes "cca", "rda", and "capscale"
  2. fortify.metaMDS --- for objects of class "metaMDS"
  3. fortify.prc --- for objects of class "prc"
  4. fortify.decorana --- for objects of class "decorana" (AKA DCA)
  5. autoplot.prestonfit --- for objects of class "prestonfit"
  6. autoplot.fisherfit --- for objects of class "fisherfit"

Installation

No binary packages are currently available via CRAN for ggvegan. If you have the correct development tools you can compile the package yourself after downloading the source code from github.

You can install ggvegan directly from GitHub using functions that the remotes package provides. To do this, install remotes from CRAN via

install.packages("remotes")

then run

remotes::install_github("gavinsimpson/ggvegan")

If that doesn't work or you prefer to install from binaries, the R Universe service run by rOpenSci now provides binaries. Instruction on how to install ggvegan from that repository are:

# Enable repository from gavinsimpson
options(repos = c(
  gavinsimpson = 'https://gavinsimpson.r-universe.dev',
  CRAN = 'https://cloud.r-project.org'))
# Download and install ggvegan in R
install.packages('ggvegan')

ggvegan's People

Contributors

delferts avatar fvd avatar gavinsimpson avatar jarioksa avatar jooolia avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ggvegan's Issues

no functions are exportable from package

Hi Gavin,

QUESTION:
I love the idea of this package! After installing with the recommended remotes:: method, with no errors and loading the "ggvegan" library, no functions are available for export except "ggvegan::valid_layers()". Is there a trick I'm missing to use the functions?

Thanks for your time,

Sam

remotes::install_github("gavinsimpson/ggvegan"
library(ggvegan)
ggvegan::valid_layers() #only export available

sessionInfo()

R version 4.1.2 (2021-11-01)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: CentOS Linux 7 (Core)

Matrix products: default
BLAS/LAPACK: /usr/lib64/libopenblasp-r0.3.3.so

locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats4 stats graphics grDevices utils datasets methods base

other attached packages:
[1] ggvegan_0.1-0 pairwiseAdonis_0.4 cluster_2.1.2 patchwork_1.1.1
[5] MicrobiotaProcess_1.6.3 weathermetrics_1.2.2 tidyquant_1.0.3 quantmod_0.4.18
[9] TTR_0.24.3 PerformanceAnalytics_2.0.4 xts_0.12.1 zoo_1.8-9
[13] ggtext_0.1.1 lubridate_1.8.0 wesanderson_0.3.6 viridis_0.6.2
[17] viridisLite_0.4.0 Cairo_1.5-14 cowplot_1.1.1 ggthemes_4.2.4
[21] magrittr_2.0.1 reshape_0.8.8 reshape2_1.4.4 forcats_0.5.1
[25] stringr_1.4.0 dplyr_1.0.7 purrr_0.3.4 readr_2.1.1
[29] tidyr_1.1.4 tibble_3.1.6 tidyverse_1.3.1 DivNet_0.4.0
[33] breakaway_4.7.6 DESeq2_1.34.0 SummarizedExperiment_1.24.0 Biobase_2.54.0
[37] MatrixGenerics_1.6.0 matrixStats_0.61.0 GenomicRanges_1.46.1 GenomeInfoDb_1.30.0
[41] IRanges_2.28.0 S4Vectors_0.32.3 BiocGenerics_0.40.0 metagMisc_0.0.4
[45] microbiome_1.16.0 ggplot2_3.3.5 phyloseq_1.38.0 vegan_2.5-7
[49] lattice_0.20-45 permute_0.9-5 ANCOMBC_1.4.0 corrplot_0.92
[53] pvclust_2.2-0 dendextend_1.15.2

CCA plot issues

Unable to use the function autoplot with my vegan produced cca object. I know that cca is intended to be supported, and I see the autoplot.cca.R code.

> cca_model <- vegan::cca(t(X)~.,t(Y))
> autoplot(cca_model)
Error: Objects of type cca not supported by autoplot.

If I copy/paste the code from autoplot.cca.R and utils.R and don't have any issues.

Recreating autoplot.cca() from fortify.cca() data frame

Hi Gavin

As ever a very cool package. I am trying to help a student plot a cca using ggvegan and wanted a little more control over the ggplot2 object returned so was trying to fortify() the data and then create the plot object.

However, when I plot the predictor variables (the arrows) of the fortify data frame (Score == 'biplot'), the arrows do not look quite like the output of autoplot().

I use the code:

ggplot() +
    geom_segment(data = subset(d, Score == "biplot"), aes(x = 0, y = 0, xend = Dim1, yend = Dim2), arrow = arrow(length = unit(0.01, "npc"))

To plot the arrows and they do not fill the same space as in the autoplot. The plot using ggplot sets limits equal to the dimensions of the data frame, whereas autoplot() gives different results.

Autoplot example:
Autoplot.pdf

Ggplot only example:
Ggplot.pdf

Just wondering if this difference (a) is important and (b) how to get from one to the other reproducibly.

Many thanks
Dan

autoplot.rda creating an extra legend for site scores

In this example we see a redundant legend for site scores:

library('vegan')
library('ggvegan')
data(varespec, varechem)

ord <- rda(varespec ~ ., data = varechem, scale = TRUE)

autoplot(ord, arrows = FALSE, scaling = "symmetric")

autoplot-rda

autoplot.prc should display species labels on the right of the plot

To complete the plot for autoplot.prc() we need to draw species names/labels on the right hand side of the plot. There are issues in doing this as it lies outside the general remit of ggplot graphics.

Early attempts are documented in a StackOverflow question I asked about this issue some months ago.

Solution would be to implement the idea in Baptiste's second answer which has an actual example.

Labeling Ordination Plots

Hello, I just used ggvegan to plot a NMDS. Two questions:

Is there an argument that will allow the site and species names to be labeled?
Is there a way to plot ellipses on this ordination plot?

autoplot.rda issues

Hello everyone,
I successfully installed the packages ggvegan, ggplot2 and ggfortify, however when I try to run the commands to plot my rda result (https://github.com/gavinsimpson/ggvegan/blob/master/R/autoplot.rda.R), I get across different error messages at different steps. The first problem is: when I run

autoplot.rda <- function(rda.abund_Ao.Ach, axes = c(1,2), geom = c("point", "text"),
                         layers = c("species", "sites", "biplot", "centroids"),
                         arrows = TRUE, legend.position = "right",
                         title = NULL, subtitle = NULL, caption = NULL,
                         ylab, xlab, const, ...) {
 
 valid <- ggvegan:::valid_layers(rda.abund_Ao.Ach)       
 ok_layers <- ggvegan:::check_user_layers(layers, valid, message = TRUE)
 layers <- layers[ok_layers]         
 draw_list <- ggvegan:::layer_draw_list(valid, layers) 
 draw_list <- ggvegan:::layer_draw_list(valid)  

 laxes <- length(axes)
  if (laxes != 2L) {
    if (laxes > 2L) {
      axes <- rep(axes, length.out = 2L)  # shrink to required length
    } else {
      stop("Need 2 ordination axes to plot; only 1 was given.",
           call. = FALSE)
    }
  }

it creates the function autoplot.rda, but doesn't create the elements from the function. I mean, if I then type "geom" or "legend.position", e.g., I get Error: object 'geom' not found, so I need to run them individually afterwards anyway, even if I already had the function.. Later on, when I get to if(missing(xlab)) { xlab <- vars[1] }, it also doesn't work (Error in missing(xlab) : 'missing' can only be used for arguments) and finally, if I skip this part and go directly to the plotting stage, plt <- plt + theme(legend.position = legend.position), I get the final error message: Error in as.character(x$label) : cannot coerce type 'closure' to vector of type 'character'. Did someone already come across those error messages?
I know it's too much to ask, but I'm also not sure how to track or identify where those problems come from, any help is appreciated.
Thanks a lot!
Adriana

Functions not loading

Hi, I have a problem that I haven't been able to solve. Loading ggvegan only loads the function valid_layers. When I try to use, for example fortify.cca, I get the message "could not find function "fortify.cca". I have installed (and reinstalled) the package using:

install.packages("remotes")
remotes::install_github("gavinsimpson/ggvegan")

and

options(repos = c(
gavinsimpson = 'https://gavinsimpson.r-universe.dev',
CRAN = 'https://cloud.r-project.org'))
install.packages('ggvegan')

I have updated all dependencies, one by one. Oddly enough, in the documentation (help) of the package I can find information for all the functions of the ggvegan package, but I cannot execute them. I reinstalled R, Rstudio and Rtools but nothing works. Any idea of how to fix this? Below you will find my R and Rstudio version.

R
platform x86_64-w64-mingw32
arch x86_64
os mingw32
crt ucrt
system x86_64, mingw32
status
major 4
minor 2.2
year 2022
month 10
day 31
svn rev 83211
language R
version.string R version 4.2.2 (2022-10-31 ucrt)
nickname Innocent and Trusting

Rstudio
RStudio 2023.03.0+386 "Cherry Blossom" Release (3c53477afb13ab959aeb5b34df1f10c237b256c3, 2023-03-09) for Windows
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) RStudio/2023.03.0+386 Chrome/108.0.5359.179 Electron/22.0.3 Safari/537.36

Use of display= vs layers= in autoplot and scores

There seems a slight inconsistency in some functions in vegan vs ggvegan as to when display= or layers= should be used. For example autoplot.metaMDS fails with display="sites", and only accepts layers="sites", whereas autoplot.rda accepts both. The scores() function from vegan seems to require display= and does not recognise layers=.

List of outstanding plot methods in vegan that need adding to ggvegan

The following plot methods in vegan need adding to ggvegan

  • plot.cca
  • plot.rda
  • plot.metaMDS
  • plot.prc
  • plot.decorana
  • plot.prestonfit
  • plot.fisherfit
  • plot.rad
  • plot.renyi
  • plot.anosim
  • plot.envfit
  • plot.isomap
  • plot.permat
  • plot.radfit
  • plot.humpfit
  • plot.MOStest
  • plot.radline
  • plot.varpart
  • plot.clamtest
  • plot.meandist
  • plot.ordisurf
  • plot.spantree
  • plot.betadiver
  • plot.cascadeKM
  • plot.poolaccum
  • plot.specaccum
  • plot.taxondive
  • plot.betadisper
  • plot.contribdiv
  • plot.nestedtemp
  • plot.orditkplot
  • plot.procrustes
  • plot.renyiaccum
  • plot.varpart234
  • plot.rdfitframe
  • plot.ordipointlabel

autoplot.rda argument const is ignored

data(dune)
m <- rda(dune)
plot(m)
plot(m, const = c(2, 1)) # changes arrow length

autoplot(m)
autoplot(m, const = c(2, 1)) # no change in arrow length

The solution is either to remove the const argument so that const can be passed with the ... or to pass const to fortify.rda.

Only function avaliable is valid_layers()

Hello there,

I have downloaded the ggvegan package using the code you provided...

library(devtools)
devtools::install_github("gavinsimpson/ggvegan", force=TRUE)

I was able to succesfully install the package however the only function that I am able to access from it is valid_layers()

When I attempt to use another function by specifying ggvegan directly... i.e. ggvegan::autoplot.cca() I recieve the following error message.

Error: 'autoplot.cca' is not an exported object from 'namespace:ggvegan'

Thank you for any assistance you may be able to offer me

Issue downloading ggvegan in R (Version 1.1.463)

I am having issues istalling ggvegan in to R after running the code:
library(devtools)
devtools::install_github("gavinsimpson/ggvegan")

It comes up with the error:
Error: Failed to install 'ggvegan' from GitHub:
(converted from warning) packages ‘vegan’, ‘ggplot2’, ‘tidyr’, ‘permute’, ‘tibble’, ‘dplyr’, ‘purrr’, ‘stringr’ are in use and will not be installed

Please can someone help assist with this issue as I am looking to use ggvegan to create an autoplot for a cca?

Thanks!

Adding biplot onto plot of fortify.rda()

Hello,

I was wondering if you could help me?

I am trying to use ggvegan (lovely package btw) to plot a dbrda ordination. I have managed to use autoplot(). However I would like to add information and use different colours etc. I can not seem to get the biplot (arrows) onto the plot.

Here is what I have tried so far:

  1. run dbRDA
    rda_bin3_all <- dbrda(lab_dist_matrix3_all.dist~Lat+dev.tmp+mat.10yr, data= bin3_allEnv)

  2. use autoplot to have a look - this works
    autoplot(rda_bin3_all,legend = "none")+ theme_bw()+ theme(legend.position = "none")

  3. now try to use fortify method to plot
    rda_bin3_all_df <- fortify(rda_bin3_all)

  4. add info in (just adds extra columns to dataframe)

  5. try to plot using ggplot - this works
    ggplot(aes(x=dbRDA1, y=dbRDA2, colour=Expansion), data = rda_bin3_all_df_new)+ geom_point()

  6. add biplot of variables
    I tried following the accepted answer here [https://stackoverflow.com/questions/32194193/plotting-rda-vegan-in-ggplot] but even with the coord_fixed - the arrows are not the same size as what your autoplot produces.

Any help would be greatly appreciated!
Thanks,
Eve

Lollipop chart to illustrate the species scores to an axis

Could something like this be useful for the package? The graph is from the example.

image

#' @title Lollipop chart of species contributions to ordination axes
#' @description Creates a lollipop chart of species contributions to ordination axes with scalable point size
#' @param mod \code{\link[vegan]{cca}} or rda object
#' @param axis The ordination axis for which the chart should be made for
#' @param n Number of columns (=species) to show
#' @param sides Character vector specifying which columns should be shown. Options: \code{"both"} shows \code{n/2} from both sides of the axis ordered by species scores; \code{"contrib"} orders the species based on "contributions" to the axis (squared species scores); \code{pos} orders the species based on the species score to the axis and \code{neg} orders the species based on the inverted species score to the axis. 
#' @param point_cols a character vector of length 2 specifying the colors for negative and positive species scores respectively.
#' @param xlab X-axis label
#' @param ylab Y-axis label. If \code{NULL}, the label is generated automatically from the \code{\link[vegan]{cca}} or rda object. 
#' @param sp_names Optional data frame specifying the species names to be used in the plot. The first column has to specify the species names used in the \code{\link[vegan]{cca}} or rda object and the second column the species names that should be used to replace the original names.
#' @param point_size Single number specifying the size for "lollipop heads". 
#' @param text_col Character. Color of text for the points. The text spcifies species contributions to the axis in percentages.
#' @param map_size Logical. Should point size be mapped to species contributions to the axis?
#' @param break_interval Single number specifying the interval to be used for x-axis.
#' @import ggplot2 vegan
#' @importFrom plyr mapvalues
#' @importFrom plyr round_any
#' @author Mikko Vihtakari
#' @example data(dune)
#' axis_plot(rda(dune), break_interval = 0.5)
#' @export

axis_plot <- function(mod, axis = 1, n = 10, sides = "both", point_cols = c("#f8766d", "#00ba38"), xlab = NULL, sp_names = NULL, point_size = 6, text_col = "white", map_size = FALSE, break_interval = 0.1) {
  
  ## ####
  
  tmp <- scores(mod, display = "sp")[,axis]
  contrib <- 100*scores(mod, scaling = 0, display = "sp")[,axis]^2
  
  if(sides == "contrib") {
    tmp <- tmp[names(sort(contrib, decreasing = TRUE)[1:n])]
    tmp <- tmp[order(-tmp)]
  } else if(sides == "pos") {
    tmp <- tmp[order(-tmp)][1:n]
  } else if(sides == "neg") {
    tmp <- tmp[order(tmp)][1:n]
  } else {
    sp1 <- tmp[order(tmp)][1:ceiling(n/2)]
    sp2 <- tmp[order(-tmp)][1:ceiling(n/2)]
    tmp <- c(sp1, sp2)
    tmp <- tmp[order(tmp)]
  }
  
  xp <- data.frame(variable = names(tmp), value = unname(tmp))
  xp$variable <- factor(xp$variable, levels = xp$variable)
  xp$sign <- ifelse(sign(xp$value) < 0, "neg", "pos")
  xp <- merge(xp, data.frame(variable = names(contrib), contr = unname(contrib)), all.x = TRUE, sort = FALSE)
  
  if(is.null(xlab)) {
    xlab <- paste(names(axis.expl(mod)[axis]), "value")
  }
  
  if(!is.null(sp_names)) {
    levels(xp$variable) <- plyr::mapvalues(levels(xp$variable), as.character(sp_names[[1]]), as.character(sp_names[[2]]), warn_missing = FALSE)
  }

xmin <- plyr::round_any(min(xp$value), break_interval, floor)
xmax <- plyr::round_any(max(xp$value), break_interval, ceiling)

  ## ####
  out <- ggplot(data = xp, aes(x = variable, y = value, fill = sign, label = round(contr, 1))) +
    geom_hline(yintercept = 0, size = LS(0.5), color = "black") +
    geom_segment(aes(y = 0, x = variable, yend = value, xend = variable), size = LS(0.5)) +
    coord_flip() +
    scale_y_continuous(name = xlab, breaks = seq(xmin, xmax, break_interval), limits = c(xmin, xmax)) +
    xlab(ylab) + 
    theme_minimal(base_size = 8) +
    theme(legend.position = "none",
      axis.line.x = element_line(size = LS(0.5), color = "black"), 
      axis.ticks.x = element_line(size = LS(0.5), color = "black"),
      panel.grid.major = element_blank(), 
      panel.grid.minor = element_blank(),  
      plot.margin=unit(c(0.5, 0.2, 0.5, 0.1), units = "line"))
  ## ####
  
  if(map_size) {
    # ####
    out +
      geom_point(aes(size = contr), shape = 21) +
      geom_text(color= text_col, size = 1/3*point_size) +
      scale_fill_manual(values = point_cols) +
      scale_size(range = c(point_size-1, point_size+4))
    # ####
  } else {
    # ####
    out + 
      geom_point(size = point_size, shape = 21) +
      geom_text(color= text_col, size = 1/3*point_size) +
      scale_fill_manual(values = point_cols)
    # ####
  }
  
}

The current code requires a custom axis.expl function, which can be replaced:

#' @title Get percent of total inertia explained by principal or constrained axes
#' @param mod cca.object
#' @param axes A numeric vector indicating the axes for which percent explained inertia should be returned for
#' @return Returns a named vector containing explained inertia as percentages. Returns constrained inertia fo CCA and unconstrained for CA

axis.expl <- function(mod, axes = 1:2) {
  
  if(is.null(mod$CCA)) {
    sapply(axes, function(i) {
    100*mod$CA$eig[i]/mod$tot.chi
    })
  } else {
    sapply(axes, function(i) {
    100*mod$CCA$eig[i]/mod$tot.chi
    })
  }
    
}

The "contribution calculation" does not seem to work for cca objects at the moment, but fixing this should not be a major issue.

options to improve CCA autoplot in ggvegan

Hi,

I am trying to plot the CCA with sample "sites" coloured by their site info. I did not find any option with autoplot function in ggvegan. I want to make sure it is not available here before i try some other tools. Thanks in advance!

Below is my code:
install.packages("devtools")
devtools::install_github("biom", "joey711")
library(biom)
library(vegan)
otus.biom <- read_biom('otu.table.json.fmt.biom')
otus <- as.matrix(biom_data(otus.biom))
otus <- t(otus)
map <- read.csv('DNA.dis.microbiol.txt', sep='\t', header=T, row.names=1)
common.ids <- intersect(rownames(map), rownames(otus))
otus <- otus[common.ids,]
map <- map[common.ids,]
my.ca <- cca(otus)
plot(my.ca)
my.cca <- cca(otus ~ AOC + MAP + HPC + VLP + DAPI, data=map, na.action=na.exclude)
devtools::install_github("gavinsimpson/ggvegan")
library("ggvegan")
autoplot(my.cca)

Basically, what i look in ggvegan package is to have options to use the "units" column in below mapping file for the colouring of sites. Also, i want to reduce the size of the "species".

head(map,100)
coding units AOC MAP HPC VLP DAPI
1B06_DNA_Co_C_1_wk1 1B06.DNA.Co.C.1.wk1 C 127 0.04 5 7140000 120000
1C04_DNA_Co_C_1_wk2 1C04.DNA.Co.C.1.wk2 C 126 0.04 5 6700000 77000
2B06_DNA_Co_C_1_wk1 2B06.DNA.Co.C.1.wk1 C 210 0.1 30 8000000 92000
2C03_DNA_Co_C_1_wk2 2C03.DNA.Co.C.1.wk2 C 151 0.04 20 8200000 120000
3B12_DNA_Co_C_1_wk1 3B12.DNA.Co.C.1.wk1 C 168 0.73 20 390000 78000
3C04_DNA_Co_C_1_wk2 3C04.DNA.Co.C.1.wk2 C 152 0.69 40 2600000 71000
4G02_DNA_Co_C_1_wk2 4G02.DNA.Co.C.1.wk2 C 90 0.09 350 5900000 110000
1B07_DNA_Co_C_2_wk1 1B07.DNA.Co.C.2.wk1 C 198 0.1 5 NA 67000
1C05_DNA_Co_C_2_wk2 1C05.DNA.Co.C.2.wk2 C 171 0.04 10 7400000 41000
2B07_DNA_Co_C_2_wk1 2B07.DNA.Co.C.2.wk1 C 193 0.1 30 9000000 98000
2C04_DNA_Co_C_2_wk2 2C04.DNA.Co.C.2.wk2 C 137 0.04 110 9300000 90000
3C01_DNA_Co_C_2_wk1 3C01.DNA.Co.C.2.wk1 C 140 0.58 20 3700000 11000
3C05_DNA_Co_C_2_wk2 3C05.DNA.Co.C.2.wk2 C 125 0.77 70 400000 62000
4F06_DNA_Co_C_2_wk1 4F06.DNA.Co.C.2.wk1 C 92 0.18 5 4500000 81000
4G03_DNA_Co_C_2_wk2 4G03.DNA.Co.C.2.wk2 C 89 0.07 110 4900000 48000
1C01_DNA_Co_C_3_wk1 1C01.DNA.Co.C.3.wk1 C 126 0.04 5 8000000 63000
1C07_DNA_Co_C_3_wk2 1C07.DNA.Co.C.3.wk2 C 254 0.04 10 6000000 55000
2B09_DNA_Co_C_3_wk1 2B09.DNA.Co.C.3.wk1 C 154 0.04 70 8300000 120000
2C06_DNA_Co_C_3_wk2 2C06.DNA.Co.C.3.wk2 C 146 0.19 150 6700000 165000
3C03_DNA_Co_C_3_wk1 3C03.DNA.Co.C.3.wk1 C 173 0.52 240 180000 62000
3C07_DNA_Co_C_3_wk2 3C07.DNA.Co.C.3.wk2 C 93 0.88 1100 460000 74000
4F08_DNA_Co_C_3_wk1 4F08.DNA.Co.C.3.wk1 C 84 0.04 70 1200000 76000
1B09_DNA_Co_D_1_wk1 1B09.DNA.Co.D.1.wk1 D 117 0.1 1200 960000 69000
1C08_DNA_Co_D_1_wk2 1C08.DNA.Co.D.1.wk2 D 187 0.1 1200 1500000 36000
2B10_DNA_Co_D_1_wk1 2B10.DNA.Co.D.1.wk1 D 196 0.1 1100 950000 20000
2C07_DNA_Co_D_1_wk2 2C07.DNA.Co.D.1.wk2 D 108 0.16 1000 1000000 23000
3B08_DNA_Co_D_1_wk1 3B08.DNA.Co.D.1.wk1 D 118 0.36 1900 2800000 81000
3C08_DNA_Co_D_1_wk2 3C08.DNA.Co.D.1.wk2 D 96 0.18 6700 3100000 72000
4F10_DNA_Co_D_1_wk1 4F10.DNA.Co.D.1.wk1 D 58 0.1 1500 4800000 26000
4H02_DNA_Co_D_1_wk2 4H02.DNA.Co.D.1.wk2 D NA 2100 1600000 35000
1B10_DNA_Co_D_2_wk1 1B10.DNA.Co.D.2.wk1 D 128 0.1 160 730000 51000
1C09_DNA_Co_D_2_wk2 1C09.DNA.Co.D.2.wk2 D 186 0.1 150 850000 27000
2B11_DNA_Co_D_2_wk1 2B11.DNA.Co.D.2.wk1 D 240 0.1 1100 1100000 15000
2C08_DNA_Co_D_2_wk2 2C08.DNA.Co.D.2.wk2 D 123 0.09 510 1000000 20000
3B09_DNA_Co_D_2_wk1 3B09.DNA.Co.D.2.wk1 D 120 0.43 1000 2300000 60000
3C09_DNA_Co_D_2_wk2 3C09.DNA.Co.D.2.wk2 D 139 0.16 1400 2500000 56000
4F11_DNA_Co_D_2_wk1 4F11.DNA.Co.D.2.wk1 D 95 0.07 1100 1800000 29000
4H03_DNA_Co_D_2_wk2 4H03.DNA.Co.D.2.wk2 D NA 240 990000 30000
1B12_DNA_Co_D_3_wk1 1B12.DNA.Co.D.3.wk1 D 103 0.1 550 740000 40000
1C11_DNA_Co_D_3_wk2 1C11.DNA.Co.D.3.wk2 D 175 0.1 470 950000 46000
2C01_DNA_Co_D_3_wk1 2C01.DNA.Co.D.3.wk1 D 257 0.1 1600 990000 33000
2C10_DNA_Co_D_3_wk2 2C10.DNA.Co.D.3.wk2 D 78 0.18 1600 1200000 42000
3B11_DNA_Co_D_3_wk1 3B11.DNA.Co.D.3.wk1 D 137 0.49 2200 2600000 63000
3C11_DNA_Co_D_3_wk2 3C11.DNA.Co.D.3.wk2 D 174 0.47 5100 2000000 54000
4G01_DNA_Co_D_3_wk1 4G01.DNA.Co.D.3.wk1 D 66 0.14 1000 1600000 20000
4H05_DNA_Co_D_3_wk2 4H05.DNA.Co.D.3.wk2 D NA 500 1400000 20000
3C12_DNA_Co_E_1_wk1 3C12.DNA.Co.E.1.wk1 E 74 5 20 NA 17000
1D01_DNA_Co_E_2_wk1 1D01.DNA.Co.E.2.wk1 E 64 3 50 380000 23000
1D05_DNA_Co_E_2_wk2 1D05.DNA.Co.E.2.wk2 E 63 4 90 730000 34000
2C12_DNA_Co_E_2_wk1 2C12.DNA.Co.E.2.wk1 E 9 4 20 710000 41000
3D06_DNA_Co_E_2_wk2 3D06.DNA.Co.E.2.wk2 E 96 6 100 510000 41000
4G06_DNA_Co_E_2_wk1 4G06.DNA.Co.E.2.wk1 E 52 5 70 540000 50000

Let me know the possibilities! Thanks in advance for the help.

Best Regards,
Bala

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.