Hormesis without evolution: plastic compensatory responses to herbicide drift in Oxalis stricta, a common weed of agriculture
Data files
Jul 14, 2026 version files 2.65 MB
-
floweringanalysisoxalis2022.csv
1.04 MB
-
Flowersize.csv
170.31 KB
-
MatPop.csv
15.50 KB
-
nectaranalysis.csv
22.83 KB
-
openflowers.csv
1.20 MB
-
pollinatorsfall2023-RSB010125.csv
51.96 KB
-
README.md
28.40 KB
-
seedcounts.csv
8.25 KB
-
summer2022_rawdata.csv
42.93 KB
-
vegetativedatacomplete.csv
71.32 KB
Abstract
Herbicide drift exposes nontarget plants to sublethal agrochemical doses, yet its ecological and evolutionary consequences remain poorly understood. Although hormesis-stimulatory responses to low doses of otherwise toxic compounds has been documented following herbicide exposure, it has rarely been examined within an evolutionary ecology framework. Here, we examine herbicide-induced hormesis in the agricultural weed Oxalis stricta across two field experiments. We exposed replicated maternal lines to dicamba drift and quantified growth, reproductive traits, floral allocation, and pollinator visitation. Dicamba drift consistently increased flower production in both years, revealing a plastic shift toward reproductive allocation. Fitness consequences were context dependent: in 2022, increased flowering was associated with higher seed production through indirect, trait-mediated pathways, whereas in 2023 increased flowering did not translate into detectable differences in reproductive output. We detected little genetic variation in hormetic responses, suggesting limited potential for adaptive evolution. Dicamba drift also reduced individual flower size, indicating a shift toward larger floral displays composed of smaller flowers. These allocation shifts reduced pollinator visitation primarily through changes in flower number, linking herbicide exposure to trait-mediated changes in plant–pollinator interactions. Together, our results show that low-dose herbicide exposure can generate compensatory responses that reshape ecological interactions, even when evolutionary responses are constrained.
Overview
This dataset examines the effects of simulated dicamba herbicide drift ("drift" vs. "control" treatment) on growth, flowering phenology, flower size, pollinator visitation, nectar production, and reproductive output (fruit/seed number) in Oxalis stricta, across a 2022 and a 2023 field experiment using multiple maternal lines nested within populations.
Associated publication: "Hormesis without evolution: plastic compensatory responses to herbicide drift in Oxalis stricta, a common weed of agriculture"
Dataset DOI: 10.5061/dryad.gqnk98t4d
Contact / corresponding author: Regina S Baucom, rsbaucom@umich.edu, https://orcid.org/0000-0001-7960-498X
General notes applying to all files
- Treatment (
trt/Treatment): two levels —control= no herbicide applieddrift= simulated low-dose dicamba drift exposure
parentalenv: parental (maternal) treatment environment experienced
by the prior generation. Three levels appear in the 2023 files:c= control conditions in the field (no dicamba exposure)d= dicamba exposure in the fieldn= grown in growth room (not field-grown)
matline/MatLine/MatLineName: maternal line identifier (seed family). Maternal lines are nested within populations (Pop).Pop/Population: source population identifier. Eight populations appear across files:23,26,27A,28,31,32A,
DG07,DG08,JB06,Sub9(site codes/abbreviations for wild source populations). Population names and their corresponding locations are provided in the supplemental information.labelside1: unique plant/individual identifier used in the 2023 experiment, encoding block, maternal line, parental environment, and replicate side, in the formatblock_matline_parentalenv_replicate(e.g.1_26_3_c_2).TagNum/TagLabel: unique plant identifier used in the 2022 experiment (tag number and physical tag label).block/Block: spatial block in the field design.plot/Plot: plot number within block.- Missing values: coded as blank cells (rather than infilled with "NA", "n/a", or similar text). Blank cells are used consistently throughout these files to represent missing data, and are left as literal empty cells rather than infilled with text placeholders because the accompanying R analysis script relies on blank cells being read as NA by R's default CSV import behavior; infilling with a text string (e.g., "n/a") would change the data type of otherwise-numeric columns and break the filtering/modeling steps in that script. What a blank cell represents differs by column and is documented for each file below; in general, a blank indicates either (a) the value does not apply to that row (e.g., a field that is only relevant to a subset of records), or (b) the value was not recorded/known for that row.
- Dates: mixed formats present in the raw files (e.g.,
9-Aug,
7/6/2022,6-13-2023). Day-month fields with no year (e.g.,9-AuginFlowersize.csv) belong to the 2023 experiment, since flower size was only collected in 2023.
File 1: summer2022_rawdata.csv
Description: Core 2022 field-experiment dataset — one row per tagged plant, tracking survival, spray timing, and pre-/post-spray leaf counts used to calculate vegetative growth rate.
N rows: 498 plants | N columns: 22
| Column | Description | Units / Codes |
|---|---|---|
| TagNum | Unique numeric plant tag ID | integer |
| TagLabel | Physical tag label (redundant plant ID) | text |
| MatLine | Maternal line number | integer |
| MatLineName | Maternal line name (Pop-line combination) | text, e.g. "23-3" |
| Pop | Source population | see population codes above |
| Block | Spatial block | integer |
| Plot | Plot within block | integer |
| plantdate | Date plant was planted | date, day-month |
| germinationdate | Date of germination | date, day-month |
| transplant (1/0) | Whether plant was a transplant replacement | 1 = transplant, 0 = original |
| transplantorigin | Source of transplant, if applicable | f = field, gr = greenhouse |
| transplantdate | Date of transplanting | date |
| survival_7.20 | Alive/dead at July 20 census | 1 = alive, 0 = dead |
| survival_8.8 | Alive/dead at Aug 8 census | 1 = alive, 0 = dead |
| survival_9.1 | Alive/dead at Sept 1 census | 1 = alive, 0 = dead |
| survival 9-22 | Alive/dead at Sept 22 census | 1 = alive, 0 = dead |
| survival 10-6 | Alive/dead at Oct 6 census | 1 = alive, 0 = dead |
| spray_date | Date herbicide/control spray applied | date |
| trt | Treatment | control / drift |
| prespray_leafcount | Leaf count immediately before spray | count |
| postspray_leafcount | Leaf count ~21 days after spray | count |
| postspray_damagecount | Number of damaged leaves post-spray | count |
Note: Dryad's automated tabular data checker may flag some MatLineName values (e.g., 27A-3, DG07-1) as a "Type Error" against an inferred yearmonth type. This is a false positive: because early rows in the file happen to be purely numeric Pop line codes (e.g., 26-1), the checker mistakes the column for a date field.
Blank cells in transplantorigin are NA, not applicable
All dates in form of day-month (eg 9-Aug) with the exception of germinationdate which has dates as mixed notes, would need further cleaning if used
Derived in analysis (not in raw file): growth = (postspray_leafcount − prespray_leafcount) / 21, i.e., leaves produced per day.
File 2: floweringanalysisoxalis2022.csv
Description: 2022 flowering phenology and open-flower counts,recorded across multiple census dates per plant.
N rows: 19,460 | N columns: 11
| Column | Description | Units / Codes |
|---|---|---|
| TagNum | Plant ID (links to summer2022_rawdata.csv) | integer |
| TagLabel | Tag label | text |
| Population | Source population | see codes above |
| MatLineName | Maternal line name | text |
| Block | Spatial block | integer |
| Plot | Plot | integer |
| spray 8-9 | Treatment assignment recorded at the Aug. 9 spray date | control / drift / NA |
| spray 10-6 | Not used for this experiment (see note below) | control / drift / NA |
| day first flower | Date of first observed flower for that plant | date |
| data collected | Census date for this row's flower count | date |
| flower count | Number of open flowers observed on that census date | count |
Plants in this experiment were sprayed only on the Aug. 9 date; the spray 10-6 column can be ignored (not used in this experiment).
All dates in this file in the format month/day/year
File 3: seedcounts.csv
Description: 2022 end-of-season fruit and seed production per plant.
N rows: 159 | N columns: 10
| Column | Description | Units / Codes |
|---|---|---|
| TagNum | Plant ID | integer |
| TagLabel | Tag label | text |
| MatLine | Maternal line number | integer |
| MatLineName | Maternal line name | text |
| Pop | Source population | see codes above |
| Block | Spatial block | integer |
| Plot | Plot | integer |
| trt | Treatment | control / drift |
| fruitcount | Total number of fruits collected from the plant | count |
| seedcount | Total number of seeds counted from the plant | count, counted via ImageJ |
Blank cells in this dataset (e.g. TagNum 374) represent missing data
File 4: Flowersize.csv
Description: 2023 flower width measurements, repeated across multiple
dates per plant.
N rows: 3,429 | N columns: 10
| Column | Description | Units / Codes |
|---|---|---|
| labelside1 | Unique plant ID | see ID format note above |
| ordernum | Sequential order/index number assigned to the plant | integer |
| matline | Maternal line | text |
| parentalenv | Parental treatment environment | c = control field, d = dicamba field, n = growth room |
| block | Spatial block | integer |
| plot | Plot | integer |
| trt | Treatment | control / drift |
| flowernum | Flower number/index measured on that date for that plant | integer |
| date | Measurement date | date (day-month, e.g. "9-Aug"); year is 2023 |
| flowerwidth | Flower width | mm |
File 5: MatPop.csv
Description: Lookup table linking each 2023 individual (labelside1) and its maternal line to its source population. Used to merge population identity into other 2023 files.
N rows: 687 | N columns: 3
| Column | Description | Units / Codes |
|---|---|---|
| labelside1 | Unique plant ID | see ID format note above |
| matline | Maternal line | text |
| Pop | Source population | 23, 26, 28, 31, 32A, DG08, JB06, sub9 |
Note: Dryad's automated tabular data checker may flag some Pop values (e.g., 32A, DG08) as a "Type Error" against an inferred integer type. This is a false positive: because early rows in the file happen to be purely numeric population codes (e.g., 23, 26), the checker mistakes the column for a numeric field.
File 6: nectaranalysis.csv
Description: 2023 nectar sugar concentration and flower dimension measurements from bagged flowers. Note: assessment of nectar data were not included in "Hormesis without evolution: plastic compensatory responses to herbicide drift in Oxalis stricta, a common weed of agriculture."
N rows: 414 | N columns: 10
| Column | Description | Units / Codes |
|---|---|---|
| labelside1 | Unique plant ID | see ID format note above |
| matline | Maternal line | text |
| num | Sample/record number | integer |
| flowernum | Flower number/index sampled | integer |
| Treatment | Treatment | control / drift |
| bagged | Whether flower was bagged overnight before sampling (to control pollinator access/nectar accumulation time) | 1 = bagged, 0 = not bagged (excluded from analysis) |
| nectar(BRIX) | Nectar sugar concentration | °Brix |
| Width(mm) | Flower width at sampling | mm |
| Depth(mm) | Flower depth at sampling | mm |
| Date | Sampling date | date |
File 7: openflowers.csv
Description: 2023 season-long open-flower counts per plant, recorded across many census dates, spanning both pre- and post-spray periods.
N rows: 19,980 | N columns: 11
| Column | Description | Units / Codes |
|---|---|---|
| labelside1 | Unique plant ID | see ID format note above |
| matline | Maternal line | text |
| parentalenv | Parental treatment environment | c = control field, d = dicamba field, n = growth room |
| trt | Treatment | control / drift |
| block | Spatial block | integer |
| plot | Plot | integer |
| ordernum | Sequential plant index | integer |
| roundnum | Census round number (sequential count of the census visit) | integer |
| date | Census date | date |
| timing | Whether census occurred before or after herbicide application | prespray / postspray |
| openflowers | Number of open flowers counted | count |
File 8: pollinatorsfall2023-RSB010125.csv
Description: 2023 pollinator observation data — timed watches of flower arrays recording insect visitation by functional group.
N rows: 624 | N columns: 16
| Column | Description | Units / Codes |
|---|---|---|
| arraynum | ID of the flower array/observation station | integer |
| labelside1 | Unique plant ID | see ID format note above |
| label 2 | Secondary/alternate plant label | text |
| parentalenv | Parental treatment environment | c = control field, d = dicamba field, n = growth room |
| Treatment | Treatment | control / drift |
| block | Spatial block | integer |
| Date | Observation date (raw, as originally entered) | date |
| time | Time of day observation was conducted | morning / midday / afternoon |
| weather | Weather conditions during observation | cloudy, sunny, prt. sunny, p.sunny, p. cloudy, cloudy/sprinkling — spelling/whitespace variants of the same categories; standardize before use |
| open flower count | Number of open flowers on the plant/array at time of observation | count |
| Round | Early attempt to balance observations into two coarse rounds; superseded by Round2 (use Round2 instead) |
1, 2, NA |
| functionalgroup | Pollinator functional group observed | honeybee, bumblebee, fly, syrphidfly, NA (no visit) |
| totalvisits | Total number of visits recorded | count |
| visitsperflower | Visits standardized per flower | count / flower |
| Date2 | Parsed/reformatted observation date | date |
| Round2 | Census round number (1–8), used as the primary round variable in analysis | integer |
Note: The raw Date column contains some inconsistent formats (e.g., 12-Sep instead of 9/12/23, and a few 9/19/20/9/22/20 entries that appear to be year typos for 9/19/23/9/22/23). Date is kept as originally entered; Date2 is the cleaned version used in analysis.
Blank cells in functionalgroup were visited but functional group was not recorded.
File 9: vegetativedatacomplete.csv
Description: 2023 vegetative growth, herbicide damage, and fruit
production per plant — the main "biological" dataset for the 2023
experiment.
N rows: 688 | N columns: 24
| Column | Description | Units / Codes |
|---|---|---|
| labelside1 | Unique plant ID | see ID format note above |
| ordernum | Sequential plant index | integer |
| matline | Maternal line | text |
| parentalenv | Parental treatment environment | c = control field, d = dicamba field, n = growth room |
| trt | Treatment | control / drift |
| block | Spatial block | integer |
| plot | Plot | integer |
| rep | Replicate number within plot/line | integer |
| transplant_date | Date plant was transplanted to the field | date |
| dayfirstflower | Date of first observed flower | date |
| earlyleafcount | Leaf count at an early census | count |
| presprayleafcount | Leaf count immediately before spray | count |
| redleafprespray | Number of red (anthocyanic) leaves pre-spray | count |
| spraydate | Date herbicide/control spray applied | date |
| postspraydamage | Number of damaged leaves post-spray | count |
| percentdamage | Proportion of leaves damaged post-spray | proportion (0–1) |
| postspraycurlflower | Number of curled flowers post-spray (herbicide damage symptom) | count |
| postsprayflower | Total flower count post-spray | count |
| percentcurlflower | Proportion of flowers showing curling | proportion (0–1) |
| 3wkpostsprayleafcount | Leaf count ~3 weeks after spray | count |
| 3wkpostspraydamage | Damage count ~3 weeks after spray | count |
| packedfruitnum | Number of fruits collected/packed for counting | count |
| countedfruitnum | Number of fruits directly counted | count |
| CombineFruit | Total fruit count used in analysis, calculated as the sum of packedfruitnum and countedfruitnum |
count |
Dates are in the format month-day-year or month/day/year
Cross-file relationships
- 2022 files (
summer2022_rawdata.csv,floweringanalysisoxalis2022.csv,seedcounts.csv) join onTagNum+TagLabel(+MatLine/Block/trt
in some merges). - 2023 files (
Flowersize.csv,MatPop.csv,nectaranalysis.csv,openflowers.csv,pollinatorsfall2023-RSB010125.csv,vegetativedatacomplete.csv) join onlabelside1, withMatPop.csvused specifically to attachPopto the other files viamatline.
