Skip to main content

Growthcurver: an R package for obtaining interpretable metrics from microbial growth curves



Plate readers can measure the growth curves of many microbial strains in a high-throughput fashion. The hundreds of absorbance readings collected simultaneously for hundreds of samples create technical hurdles for data analysis.


Growthcurver summarizes the growth characteristics of microbial growth curve experiments conducted in a plate reader. The data are fitted to a standard form of the logistic equation, and the parameters have clear interpretations on population-level characteristics, like doubling time, carrying capacity, and growth rate.


Growthcurver is an easy-to-use R package available for installation from the Comprehensive R Archive Network (CRAN). The source code is available under the GNU General Public License and can be obtained from Github (Sprouffske K, Growthcurver sourcecode, 2016).


By tracking bacterial growth over time, important population-level information can be assessed, including doubling time and carrying capacity. Typical experiments entail measuring bacterial cell density at a series of time intervals, and then fitting these observations to an exponential growth model. Such measures can be made in parallel in a plate reader, and may result in hundreds or thousands of absorbance measurements over the course of 24 h. The resulting growth curves are commonly used in a variety of microbiological experiments [13], including experimental evolution [47]. A variety of methods have been used to obtain metrics from such growth curves [1, 3, 4, 813]. Older methods relied on manually plotting the cell count or absorbance readings over time on semi-log graph paper to obtain metrics like the maximum growth rate [8], an approach which has been computationally mirrored recently by GrowthRates [12]. Other recent methods fit the growth data to a variety of parametric growth models [11], but have a strong focus on generating dose response curves.

Here, we fit growth curve data to the standard form of the logistic equation common in ecology and evolution [14, 15] whose parameters (the growth rate, the initial population size, and the carrying capacity) provide meaningful population-level information with straight-forward biological interpretation. We implemented this as the R package Growthcurver, available for download at Comprehensive R Archive Network (CRAN), and provide a simple data analysis work-flow in the vignette.


We developed an open-source R package, Growthcurver, to obtain a variety of easily-interpretable metrics to summarize microbial growth curve data. Growthcurver is available from CRAN and the source code is available under the GNU General Public License.

Carrying capacity and growth rate

Growthcurver fits a basic form of the logistic equation common in ecology and evolution [14, 15] to experimentally-obtained growth curve data. The logistic equation gives the number of cells N t at time t.

$$ N_{t} = \frac{K}{1 + \left(\frac{K-N_{0}}{N_{0}} \right) e^{-rt}} $$

Here, the population size at the beginning of the growth curve is given by N 0. The maximum possible population size in a particular environment, or the carrying capacity, is given by K. The intrinsic growth rate of the population, r, is the growth rate that would occur if there were no restrictions imposed on total population size. Growthcurver finds the best values of K, r, and N 0 for the growth curve data using the implementation of the non-linear least-squares Levenberg-Marquardt algorithm [16] available in the minpack.lm R package [17]. The carrying capacity and growth rate values (K and r) are particularly useful for summarizing and comparing the growth dynamics of strains.

Area under the curve

Growthcurver computes the area under the logistic curve, which provides a metric (the logistic AUC) that integrates information from the logistic parameters (k, r, and N 0). We implemented this feature by evaluating the definite integral of the fitted logistic equation from time 0 to a user-defined time t. Growthcurver also computes an empirical AUC by summing the areas of the trapezoids made up by connecting consecutive data points of cell counts (or absorbance measurements) from time 0 to time t, similar to what was done by [18].

Doubling time

The doubling time, also called the generation time, of a population is the time it takes for the number of individuals (or the absorbance reading) to double. Growthcurver computes the fastest doubling time t DT possible for the population according to

$$ t_{DT} = \frac{\ln 2}{r} $$

[15], which occurs when the population has no restrictions on its growth (e.g., when it is far from the carrying capacity).

Results and discussion


Growthcurver can be used to compute metrics for growthcurves in two modes: individually for a single sample, or in batch mode for an entire plate of samples.

In both cases, Growthcurver requires just two vectors of data for each growth curve: time measurements and absorbance readings taken at those times. The time measurements’ unit determines the unit of the metrics returned by Growthcurver (e.g., if the input data are in minutes, then the doubling time returned by Growthcurver is in minutes and the growth rate is in minutes −1). The absorbance of the media should be subtracted from the absorbance readings, and Growthcurver provides an option to do that automatically.

Example calls to Growthcurver can be found in the R documentation for the functions SummarizeGrowth and SummarizeGrowthByPlate, and extensive sample code for obtaining, checking, and interpreting growth curves is provided in the accompanying vignette [19].

Correlation between metrics

To compare different metrics computed by Growthcurver, we measured 937 growth curves of 33 different Escherichia coli K12 strains in 200 μL of Davis Minimal broth (Fluka 15758-500G-f) supplemented with 1 μg/L glucose (‘DM1000’ media). For each measurement, we started a pre-culture in 2 mL DM1000 media and grew it at 37 °C with shaking for 24 h. We diluted the overnight culture 10000-fold, transferred it into 96-well plates (TPP 92096), and placed it in a plate reader (Tecan Infinite 200 Pro). We grew the resulting 96 populations at 37 °C with shaking for 24 h, and took optical density (OD) readings at a wavelength of 600 nm every 10 min. We removed the contribution of the media from the optical density by subtracting the minimum observed OD value for each growth curve from the rest of the values. Finally, we used Growthcurver to obtain the growth curve metrics for these populations.

The growth rate is often used to summarize growth curve data, and we wondered to what extent the growth rate correlates with other metrics that summarize growth (Fig. 1). The growth rate correlates perfectly with the doubling time (Spearman, ρ=−1,p<2.2×10−16), which is unsurprising since the definition of doubling time relies on growth rate (see Implementation). The growth rate also correlates with the initial population size (Spearman, ρ=−0.88,p<2.2×10−16), the area under the curve (Spearman, ρ=0.57,p<2.2×10−16), and the carrying capacity (Spearman, ρ=0.32,p<2.2×10−16). The area under the curve is a promising metric to summarize a growth curve because it integrates the contributions of the initial population size, growth rate, and carrying capacity into a single value, and emphasizes growth rate (Spearman correlation between area under the curve and growth rate, ρ=0.57,p<2.2×10−16) and carrying capacity (Spearman correlation between area under the curve and carrying capacity, ρ=0.81,p<2.2×10−16). A viable non-parametric approach is to use the empirical area under the curve, which is correlated with the area under the curve (Spearman, ρ=1,p<2.2×10−16).

Fig. 1
figure 1

Comparisons of Growthcurver’s growth curve metrics for experimental data from 937 replicate E. coli populations. We plotted the growth curve metrics in a pairwise fashion to identify correlations between metrics. The metrics are listed in the diagonal (growth rate, doubling time, the logarithm of the initial population size, the area under the logistic curve, the area under the experimentally-measured curve, and the carrying capacity). We plotted the pairwise comparisons in the lower diagonal; for example, in the panel comparing growth rate and doubling time, each point is the growth rate and doubling time obtained from Growthcurver for a single experimental replicate. The Spearman correlation of any panel in the lower diagonal is reported in the upper diagonal


Here, we have described the R package Growthcurver that provides several growth curve metrics with intuitive biological interpretation, including the growth rate, the doubling time, the carrying capacity, and the area under the logistic growth curve which integrates the contributions of the other metrics into a single value.

Growthcurver is available for installation from CRAN [20] or Github [21]. The accompanying vignette [19] provides step-by-step examples for analyzing a single sample and a plate of samples, as well as information on preparing the input data for analysis. Novice R users should be able to use the example code provided with few or no changes to analyze their own growth curve data.

The high-throughput nature of obtaining replicate growth curves in plates allows us to easily characterize hundreds of growth curves, even though caution is needed to interpret these metrics in terms of their effects on competitive fitness [22]. Growthcurver allows for the straightforward analysis and interpretation of growth curve data collected in a high-throughput manner using plate readers.

Availability and requirements

  • Project name: Growthcurver

  • Project home page:

  • Operating system: Platform independent

  • Programming language: R (version 3.2.2)

  • Other requirements: The R Project for Statistical Computing

  • License: GNU General Public License

  • Any restrictions to use by non-academics: According to GNU General Public License



area under the curve


comprehensive R archive network


  1. Buchanan RL, Whiting RC, Damert WC. When is simple good enough: a comparison of the Gompertz, Baranyi, and three-phase linear models for fitting bacterial growth curves. Food Microbiol. 1997; 14:313–26.

    Article  Google Scholar 

  2. Toussaint M, Conconi A. High-throughput and sensitive assay to measure yeast cell growth: a bench protocol for testing genotoxic agents. Nat Protoc. 2006; 1(4):1922–8.

    Article  CAS  PubMed  Google Scholar 

  3. Koseki S, Nonaka J. Alternative approach to modeling bacterial lag time, using logistic regression as a function of time, temperature, pH, and sodium chloride concentration. Appl Environ Microbiol. 2012; 78(17):6103–112.

    Article  CAS  PubMed  PubMed Central  Google Scholar 

  4. Vasi F, Travisano M, Lenski RE. Long-term experimental evolution in Escherichia coli. II. Changes in life-history traits during adaptation to a seasonal environment. Am Nat. 1994; 144:432–56.

    Article  Google Scholar 

  5. Novak M, Pfeiffer T, Ackermann M, Bonhoeffer S. Bacterial growth properties at low optical densities. Anton Leeuw Int J Gen Mol Microbiol. 2009; 96(3):267–74.

    Article  Google Scholar 

  6. Lindsey HA, Gallie J, Taylor S, Kerr B. Evolutionary rescue from extinction is contingent on a lower rate of environmental change. Nature. 2013; 494(7438):463–7.

    Article  CAS  PubMed  Google Scholar 

  7. Leiby N, Marx CJ. Metabolic erosion primarily through mutation accumulation, and not tradeoffs, drives limited evolution of substrate specificity in Escherichia coli. PLoS Biol. 2014; 12(2):1001789.

    Article  Google Scholar 

  8. Monod J. The growth of bacterial cultures. Annu Rev Microbiol. 1949; 3(1):371–94.

    Article  CAS  Google Scholar 

  9. Zwietering MH, Jongenburger I, Rombouts FM, van ’t Riet K. Modeling of the bacterial growth curve. Appl Environ Microbiol. 1990; 56(6):1875–1881.

    CAS  PubMed  PubMed Central  Google Scholar 

  10. Baranyi J, Roberts TA, McClure P. A non-autonomous differential equation to model bacterial growth. Food Microbiol. 1993; 10:43–59.

    Article  Google Scholar 

  11. Kahm M, Hasenbrink G, Lichtenberg-Fraté H, Ludwig J, Kschischo M. Grofit: fitting biological growth curves with R. J Stat Softw. 2010; 33(7):1–21.

    Article  Google Scholar 

  12. Hall BG, Acar H, Nandipati A, Barlow M. Growth rates made easy. Mol Biol Evol. 2014; 31(1):232–8.

    Article  CAS  PubMed  Google Scholar 

  13. Bukhman YV, DiPiazza NW, Piotrowski J, Shao J, Halstead AGW, Bui MD, Xie E, Sato TK. Modeling microbial growth curves with GCAT. BioEnergy Res. 2015; 8(3):1022–1030.

    Article  CAS  Google Scholar 

  14. Crow JF, Kimura M. An Introduction to Population Genetics Theory. Caldwell, NJ: Harper and Row, Publishers, Inc.; 1970.

    Google Scholar 

  15. Rockwood LL. Introduction to Population Ecology, 2nd ed. West Sussex: Wiley; 2015.

    Google Scholar 

  16. Moré JJ. The Levenberg-Marquardt algorithm: implementation and theory. In: Numerical Analysis (Proc. 7th Biennial Conf., Univ. Dundee, Dundee, 1977). Springer: 1978. p. 105–16.

  17. Elzhov TV, Mullen KM, Spiess AN, Bolker B. minpack.lm: R Interface to the Levenberg-Marquardt Nonlinear Least-Squares Algorithm Found in MINPACK, Plus Support for Bounds. Accessed 24 Mar 2016.

  18. Hasenbrink G, Schwarzer S, Kolacna L, Ludwig J, Sychrova H, Lichtenberg-Fraté H. Analysis of the mKir2.1 channel activity in potassium influx defective Saccharomyces cerevisiae strains determined as changes in growth characteristics. FEBS Lett. 2005; 579(7):1723–1731.

    Article  CAS  PubMed  Google Scholar 

  19. Sprouffske K. Using Growthcurver. Accessed 24 Mar 2016.

  20. Sprouffske K. Growthcurver: An R package for obtaining interpretable metrics from microbial growth curves. Accessed 24 Mar 2016.

  21. Sprouffske K. Growthcurver sourcecode. Accessed 24 Mar 2016.

  22. Concepción-Acevedo J, Weiss HN, Chaudhry WN, Levin BR. Malthusian parameters as estimators of the fitness of microbes: A cautionary tale about the low side of high throughput. PLOS ONE. 2015; 10(6):0126915.

    Article  Google Scholar 

Download references


The authors thank Sinisa Bratulic, Athena Chu, Rumen Kostadinov, and Macarena Toll-Riera for advice. KS acknowledges support through the Forschungskredit program of the University of Zurich, grant K-74301-03-0. AW acknowledges support through Swiss National Science Foundation grant 31003A_146137, as well as through the University Priority Research Program in Evolutionary Biology at the University of Zurich.

Author information

Authors and Affiliations


Corresponding author

Correspondence to Andreas Wagner.

Additional information

Competing interests

The authors declare that they have no competing interests.

Authors’ contributions

KS conceived of the project, developed the package, did the growth curve experiments, and did the data analysis. KS wrote the paper with AW. Both authors read and approved the final manuscript.

Rights and permissions

Open Access This article is distributed under the terms of the Creative Commons Attribution 4.0 International License (, which permits unrestricted use, distribution, and reproduction in any medium, provided you give appropriate credit to the original author(s) and the source, provide a link to the Creative Commons license, and indicate if changes were made. The Creative Commons Public Domain Dedication waiver ( applies to the data made available in this article, unless otherwise stated.

Reprints and permissions

About this article

Check for updates. Verify currency and authenticity via CrossMark

Cite this article

Sprouffske, K., Wagner, A. Growthcurver: an R package for obtaining interpretable metrics from microbial growth curves. BMC Bioinformatics 17, 172 (2016).

Download citation

  • Received:

  • Accepted:

  • Published:

  • DOI: