Colorado River Atlas
  • Home
  • Reservoirs
  • State Usage
  • Snow Pack

On this page

  • Basinwide Use and Supply
    • Total Basin Demand
    • Supply and Demand
  • Regional Water Consumption
    • Upper Basin
      • Upper Basin State Consumption
      • Upper Basin Use vs. Supply
      • Upper Basin Use by Category
    • Lower Basin
      • Lower Basin State Consumption
      • Lower Basin Use vs. Supply
      • Lower Basin Use by Category
Consumptive_Use_Dataset = (await FileAttachment("Data/WaterYear_Annual_Use.csv").csv()).map(d =>({
  ...d,
  Date: new Date(d.Date),
  Water_Year: String(d.Water_Year),
  State: String(d.State),
  Category: String(d.Category),
  Region: String(d.Region),
  Apportionment_Countable: String(d.Apportionment_Countable),
  Consumptive_Use: parseFloat((+d.Consumptive_Use).toFixed(2)),
  Consumptive_Use_MAF: parseFloat((+d.Consumptive_Use_MAF).toFixed(2))
}))

WY_State_Use = (await FileAttachment("Data/WaterYear_State_Sum.csv").csv()).map(d =>({
  ...d,
  Water_Year: String(d.Water_Year),
  Date: new Date(d.Date),
  Consumptive_Use_MAF: parseFloat((+d.Consumptive_Use_MAF).toFixed(2))
}))

WY_Region_Use = (await FileAttachment("Data/WaterYear_Region_Sum.csv").csv()).map(d =>({
  ...d,
  Water_Year: String(d.Water_Year),
  Date: new Date(d.Date),
  Consumptive_Use_MAF: parseFloat((+d.Consumptive_Use_MAF).toFixed(2))
}))

WY_Basin_Use = (await FileAttachment("Data/WaterYear_Basin_Sum.csv").csv()).map(d =>({
  ...d,
  Water_Year: String(d.Water_Year),
  Date: new Date(d.Date),
  Consumptive_Use_MAF: parseFloat((+d.Consumptive_Use_MAF).toFixed(2))
}))

Supply = (await FileAttachment("Data/Supply.csv").csv()).map(d =>({
  ...d,
  Water_Year: String(d.Water_Year),
  Date: new Date(d.Date),
  Supply_Acre_Feet: +d.Acre_Feet,
  Supply_MAF: parseFloat((+d.Million_Acre_Feet).toFixed(2)),
  Upper_Basin_Supply: +d.Upper_Basin_Supply, // Made by subtracting 8.25 maf (7.5 to LB and half of 1.5 to Mexico) to reflect legal supply available to Upper Basin
  Lower_Basin_Supply: +d.Lower_Basin_Supply, // Natural flow minus Upper Basin use
  Ten_Year_Avg: parseFloat((+d.Ten_Year_Average).toFixed(2)),
  UB_10yr_Avg: parseFloat((+d.UB_10yr_Avg).toFixed(2)),
  LB_10yr_Avg: parseFloat((+d.LB_10yr_Avg).toFixed(2))
})).sort((a, b) => a.Date - b.Date)

Basinwide Use and Supply

Total Basin Demand

Consumptive water use* in the Colorado River basin has been around 13 to 14 million acre-feet annually over the past 20 years, declining from a high in the 1990s of 16-17maf. This use is split between three main regions: the Upper Basin (Colorado, Wyoming, New Mexico, Utah), the Lower Basin (California, Arizona, Nevada) and Mexico.

The Upper and Lower Basins are allocated 7.5maf each but the Lower Basin is also apportioned additional water in years of surplus supply. Mexico is apportioned 1.5maf a year through a 1944 treaty with the US for a total system allocation of 16.5maf.

Data for consumptive use is provided by the US Bureau of Reclamation. For data on Mexico the USBR tracks total deliveries and not exact consumptive use. Therefore, excess flood waters during the unusually wet 1980s and 1990s are reflected in the data as deliveries but true consumptive use was likely closer to the 1.5maf the region was accustomed to using.

As discussed further down, evaporation from Lower Basin reservoirs are not counted towards its consumptive use total but are included in the chart below to illustrate scale of evaporative losses. Lake Powell is also included as a separate category because Upper Basin states share responsibility for the reservoir proportionately. Upper Basin reservoir evaporation is counted towards Upper Basin consumptive use totals.

*Water that is “consumed” is lost as evaporation and transpiration from plants and is different from “withdrawals”, which return part of the water to streams and aquifers for other users.

Basin_wEvap = WY_Basin_Use.filter(d => d.Type === "Evap")
{
  // Arizona Upper Basin consumption is exluded for now to simplify the graph and processing but needs to be wrapped into all of Arizona. Amounts negligble so taking quickest route to remove for now

  const plot_data = WY_State_Use.filter(d => 
    !(d.State === "Arizona" && d.Region === "Upper Basin")
  )

  return Plot.plot({
    width: width,
    height: 500,
    y: {
      grid: true,
      label: "Consumptive Use in Millions of Acre-Feet"
    },
    color: { legend: true },
    marks: [
      Plot.ruleY([16.5], {strokeDasharray: "4,4"}),
      Plot.text(["Total Apportioned Water - 16.5maf"], {frameAnchor: "top", textAnchor: "middle", y: 17.2, x: new Date("2010-01-01")}),
      Plot.lineY(Basin_wEvap, { 
        x: "Date", 
        y: "Consumptive_Use_MAF", 
        stroke: "black",
        channels: {
          "Water Year":                 { value: d => d.Water_Year },
          "Total Use (MAF)": { value: d => d.Consumptive_Use_MAF }
        },
        tip: {
          anchor: "top",
          format: {
            x: false,
            y: false,
            y1: false,
            y2: false,
            fill: false,
            "Water Year": true,
            "Total Use (MAF)": true
          }
        } 
      }),
      Plot.areaY(plot_data, Plot.stackY({
        x: "Date",
        y: "Consumptive_Use_MAF",
        fill: "State",
        order: "-sum", // Orders largest at the bottom
        fillOpacity: 0.7,
        channels: {
          "State":                 { value: d => d.State },
          "Water Year":            { value: d => d.Water_Year },
          "Consumptive Use (MAF)": { value: d => d.Consumptive_Use_MAF }
        },
        tip: {
          anchor: "top",
          format: {
            x: false,
            y: false,
            y1: false,
            y2: false,
            fill: false,
            "State": true,
            "Water Year": true,
            "Consumptive Use (MAF)": true
          }
        }
      }))
    ]
  })
}

Supply and Demand

Supply in the Colorado River basin has declined considerably over the past 25 years from around 16-18maf a year in the 1980s and 90s to 12-13maf today. Supply is presented as the natural flows calculated by the Bureau of Reclamation at Lee Ferry, the dividing point between the Upper and Lower Basin and a common location in Colorado River history for measuring supply, particuarly to the Lower Basin. Natural flow refers to the volume estimated to occur if there was no human use.

While consumptive use has fallen in reponse to the decline in flows it has not fallen enough to balance supply and demand. Since the onset of drought since the turn of the century demand has consistently remained above the 10yr moving average of supply. This general trend is illustrative of a tendency from water managers, politicians and economic interests to respond to short-term supply shocks while failing to appropriately respond to a multi-decadal drought with no end in sight.

Significantly, long-term supply figures show a similar decline in supplies in the mid-20th century. We are looking to include demand data prior to 1971, but figures for the 70s from USBR give a glimpse to the overall lower demand from that period and the reduced impact that a large decline in supply had at the time.

While researchers consider the current drought to be the worst in 1,200 years – using data from tree rings to reconstruct historic flows – data from the past century shows that the current crisis along the Colorado is not one of supply but of demand. The current drought will not be resolved by waiting for a sudden shift in climatic trends or through the grand schemes of engineers for thousand mile pipelines to import water from elsewhere. This drought is fundamentally a human issue of demand, economic interests, priorities and infrastructure and it will only be resolved through the complete overhaul of how water is used and managed on a basin wide scale.

// Build lookup map from second dataset - one row per date
supply_use_map = new Map(Basin_wEvap.map(d => [d.Water_Year, d]))
{
    const marks = [
  // Annual Supply
  Plot.lineY(Supply, { 
    x: "Date", 
    y: "Supply_MAF",       
    stroke: "#305ef8",
    strokeOpacity: 0.5
   }),
  // Supply 10yr average
  Plot.lineY(Supply, { 
    x: "Date", 
    y: "Ten_Year_Avg",       
    stroke: "blue",
    strokeDasharray: "4,4",
    strokeOpacity: 1,
    channels: {
        "Water Year":      { value: d => d.Water_Year },
        "Supply (MAF)":    { value: d => d.Supply_MAF },
        "Supply 10yr Avg (MAF)": { value: d => d.Ten_Year_Avg },
        "Demand (MAF)":    { value: d => {
      const match = supply_use_map.get(d.Water_Year)
      return match?.Consumptive_Use_MAF ?? "N/A"
       }}
      },
    tip: {
      format: {
        x: false,
        y: false,
        y1: false,
        y2: false,
        fill: false,
        "Water year": true,
        "Supply (MAF)": true,
        "Supply 10yr Avg (MAF)": true,
        "Demand (MAF)": true
      }
    } 
   }),
   // Supply 10yr average
  Plot.lineY(Basin_wEvap, { 
    x: "Date", 
    y: "Consumptive_Use_MAF",       
    stroke: "black",
    strokeOpacity: 1 
   })  
  ]

  return Plot.plot({
    title: "Basin Supply vs. Demand",
    width: width,
    height: 500,
    color: {
      legend: true,
      domain: ["Supply", "10yr Avg Supply", "Consumptive Use"],
      range:  ["#305ef8", "blue", "black"]
    },
    y: { 
      grid: true, 
      label: "Volume (MAF)",
      domain: [
        Math.min(d3.min(Supply, d => d.Supply_MAF), d3.min(Basin_wEvap, d => d.Consumptive_Use_MAF)),
        Math.max(d3.max(Supply, d => d.Supply_MAF), d3.max(Basin_wEvap, d => d.Consumptive_Use_MAF))
      ] },
    x: { 
      label: "Water Year"
      },
    marks: marks
  })
}

Regional Water Consumption

Region_wEvap = WY_Region_Use.filter(d => d.Type === "Evap")

Region_woEvap = WY_Region_Use.filter(d => d.Type === "No Evap")

Significant differences between the Upper and Lower Basin affect how their consumptive use is calculated. The Upper Basin Compact of 1948 stipulates that evaporative losses from reservoirs count towards the consumptive use of the state the reservoir is in (Lake Powell losses are shared proportionately among the states). No such provision applies to the Lower Basin and so roughly 800,000af of consumptive use are not accounted for.

The chart below illustrates how the Lower Basin has consistently used above it’s annual allocation even into the 2020s if evaporative losses are inluded. If they are excluded the Lower Basin’s response the current drought is made clearer as uses drop below 7.5maf in 2003.

Additionally, Arizona’s ~1.1maf consumption from the Gila River is not reflected in Lower Basin figures because it is not legally considered part of the Lower Basin’s apportionment, recognized by the 1963 Supreme Court ruling in Arizona v. California as Arizona’s exclusive right.

Upper Basin use has rarely exceeded 4.5maf owning to a combination of climate, terrain and infrastructure. The Lower Basin has a longer and hotter growing season and larger areas suitable for irrigation. Meanwhile, the Upper Basin largely lacks the large reservoir infrastructure of the Lower Basin, making less efficient flood irrigation more common.

Spikes in deliveries in Mexico reflect release of excess flood water during periods when Lakes Mead and Powell were near full capacity.

  • Include Lower Basin Reservoir Evaporation
  • Exclude Lower Basin Reservoir Evaporation
{
  const Region_Use_wEvap = Plot.plot({
    width: width,
    height: 500,
    y: { grid: true, label: "Consumptive Use (MAF)",
        domain: [0, d3.max(Region_wEvap, d => d.Consumptive_Use_MAF)]
     },
    x: { label: "Date" },
    color: {
      domain: ["Lower Basin", "Upper Basin", "Mexico"],
      range: ["red", "green", "orange"],
      legend: true
    },
    marks: [
      Plot.lineY(Region_wEvap, { x: "Date", y: "Consumptive_Use_MAF", stroke: "Region" }),
      Plot.tip(Region_wEvap, Plot.pointerX({ x: "Date", y: "Consumptive_Use_MAF" })),
      Plot.ruleY([7.5], {strokeDasharray: "4,4"}),
      Plot.ruleY([1.5], {strokeDasharray: "4,4"}),
      Plot.text(["US Region Apportionments"], {frameAnchor: "bottom", textAnchor: "middle", y: 7}),
      Plot.text(["Obligatitions to Mexico"], {frameAnchor: "bottom", textAnchor: "middle", y: 1})
    ]
  })
  return Region_Use_wEvap
}
{
  const Region_Use_woEvap = Plot.plot({
    width: width,
    height: 500,
    y: { grid: true, label: "Consumptive Use (MAF)",
        domain: [0, d3.max(Region_woEvap, d => d.Consumptive_Use_MAF)]
     },
    x: { label: "Date" },
    color: {
      domain: ["Lower Basin", "Upper Basin", "Mexico"],
      range: ["red", "green", "orange"],
      legend: true
    },
    marks: [
      Plot.lineY(Region_woEvap, { x: "Date", y: "Consumptive_Use_MAF", stroke: "Region" }),
      Plot.tip(Region_woEvap, Plot.pointerX({ x: "Date", y: "Consumptive_Use_MAF" })),
      Plot.ruleY([7.5], {strokeDasharray: "4,4"}),
      Plot.ruleY([1.5], {strokeDasharray: "4,4"}),
      Plot.text(["US Region Apportionments"], {frameAnchor: "bottom", textAnchor: "middle", y: 7}),
      Plot.text(["Obligatitions to Mexico"], {frameAnchor: "bottom", textAnchor: "middle", y: 1})
    ]
  })
  return Region_Use_woEvap
}

Upper Basin

The distribution of Upper Basin water is based on the Upper Colorado River Basin Compact of 1948, which established a proportional distribution.

Colorado: 51.75% - up to 3,881,250af
Utah: 23% - up to 1,725,000af
Wyoming: 14% - up to 1,050,000af
New Mexico: 11.25% - up to 843,750af

State apportionents apply to tributaries and reservoir evaporation, unlike in the Lower Basin. No Upper Basin state has ever used their full apportionment.

Upper Basin State Consumption

Upper_Basin_States = WY_State_Use.filter(d => d.Region === "Upper Basin")
viewof upper_basin_options = Inputs.checkbox(
  ["Show Apportionment Lines"],
  { value: ["Show Apportionment Lines"] }
)
{
  const show_apportionment_lines = upper_basin_options.includes("Show Apportionment Lines")

  const apportionment_marks = show_apportionment_lines ? [
    Plot.ruleY([3.88],  { strokeDasharray: "4,4", stroke: "red" }),
    Plot.ruleY([1.725], { strokeDasharray: "4,4", stroke: "green" }),
    Plot.ruleY([1.05],  { strokeDasharray: "4,4", stroke: "orange" }),
    Plot.ruleY([0.843], { strokeDasharray: "4,4", stroke: "purple" })//,
    // Plot.text(["Colorado"],   { frameAnchor: "bottom", textAnchor: "right", y: 3.9, x: new Date(d3.max(Upper_Basin_States, d => d.Date)) }),
    // Plot.text(["Utah"],       { frameAnchor: "bottom", textAnchor: "right", y: 1.8, x: new Date(d3.max(Upper_Basin_States, d => d.Date)) }),
    // Plot.text(["Wyoming"],    { frameAnchor: "bottom", textAnchor: "right", y: 1.1, x: new Date(d3.max(Upper_Basin_States, d => d.Date)) }),
    // Plot.text(["New Mexico"], { frameAnchor: "bottom", textAnchor: "right", y: 0.9, x: new Date(d3.max(Upper_Basin_States, d => d.Date)) })
  ] : []

  // Adjust y domain based on checkbox - expand to fit reference lines when shown
  const y_max = show_apportionment_lines
    ? Math.max(d3.max(Upper_Basin_States, d => d.Consumptive_Use_MAF), 4.2)  // 4.2 gives headroom above 3.88
    : d3.max(Upper_Basin_States, d => d.Consumptive_Use_MAF)

  return Plot.plot({
    width: width,
    height: 500,
    //marginRight: 100,
    y: {
      grid: true,
      label: "Consumptive Use (MAF)",
      domain: [0, y_max]
    },
    x: { label: "Date" },
    color: {
      domain: ["Colorado", "Utah", "Wyoming", "New Mexico"],
      range: ["red", "green", "orange", "purple"],
      legend: true
    },
    marks: [
      Plot.lineY(Upper_Basin_States, { x: "Date", y: "Consumptive_Use_MAF", stroke: "State" }),
      Plot.tip(Upper_Basin_States, Plot.pointerX({ x: "Date", y: "Consumptive_Use_MAF" })),
      ...apportionment_marks
    ]
  })
}

A challenge for the Upper Basin is that it must supply the Lower Basin and Mexico with a minimum amount of supply while facing much of the brunt of early snow melt and declining supplies. This is reflected in inter-state negotiations as a common refrain that the Upper Basin is already forced to make cuts in low supply years while the Lower Basin can continue to draw from Lakes Mead and Powell at consistent amounts.

The chart below shows consumptive use in the Upper Basin as reported by the Bureau of Reclamation against supply available to it. Supply is calculated by suptracting 8.5maf (7.5 to the lower basin and 0.75 to Mexico) from USBR’s estimates of natural flow at Lee Ferry, which serves as an estimate of the naturally available supply in water for apportionment to users. While not perfect, Lee Ferry sits below all major tributaries into the Colorado River before the Gila River and has a long history of use for supply modeling.

Upper Basin Use vs. Supply

{
  const UB_Total = WY_Region_Use.filter(d => d.Region === "Upper Basin").sort((a, b) => a.Date - b.Date)

  const UB_Supply_Plot = Plot.plot({
    width: width,
    height: 500,
    color: {
      legend: true,
      domain: ["Consumptive Use", "Upper Basin Supply", "Supply 10yr Average"],
      range:  ["black", "blue", "#427FFF"]
    },
    y: {
      grid: true,
      label: "Millions of Acre-Feet",
      domain: [d3.min(Supply, d => d.Upper_Basin_Supply), d3.max(Supply, d => d.Upper_Basin_Supply)]
    },
    x: { label: "Water Year", domain: [d3.min(UB_Total, d => d.Date), d3.max(UB_Total, d => d.Date)] },
    marks: [
      Plot.lineY(UB_Total, { 
      x: "Date", 
      y: "Consumptive_Use_MAF", 
      stroke: "black",
      channels: {
        "Water Year":      { value: d => d.Water_Year },
        "Total Use (MAF)": { value: d => d.Consumptive_Use_MAF },
        "Upper Basin Supply": { value: d => d.Upper_Basin_Supply },
        "Supply 10yr Avg": { value: d => d.UB_10yr_Avg }
      },
      tip: {
        format: {
          x: false,
          y: false,
          y1: false,
          y2: false,
          fill: false,
          "Water Year": true,
          "Total Use (MAF)": true,
          "Upper Basin Supply": true,
          "Supply 10yr Avg": true
        }
      } 
    }),
      Plot.lineY(Supply, { 
        x: "Date", 
        y: "Upper_Basin_Supply", 
        stroke: "blue",
        channels: {
        "Water Year":      { value: d => d.Water_Year },
        "Upper Basin Supply": { value: d => d.Upper_Basin_Supply },
        "Supply 10yr Avg": { value: d => d.UB_10yr_Avg }
      },
      tip: {
        format: {
          x: false,
          y: false,
          y1: false,
          y2: false,
          fill: false,
          "Water Year": true,
          "Upper Basin Supply": true,
          "Supply 10yr Avg": true
        }
      } 
      }),
      Plot.lineY(Supply, { 
        x: "Date", 
        y: "UB_10yr_Avg", 
        stroke: "#427FFF",
        strokeDasharray: "4,4",
        strokeOpacity: 0.5
      })
    ]
  })
  return UB_Supply_Plot
}

Annual Upper Basin supply demonstrates the extreme swings in natural flows of the Colorado River, sometimes swinging so low that the Upper Basin cannot supply its obligations for that year without Lakes Mead and Powell, reflected in negative values. This is why the Upper Basin’s obligation to the Lower Basin is measured in a 10-year rolling sum.

These swings in supply result in sharp drops in Upper Basin usage, reaching upwards of 1 million acre-feet. However, the long term trend for the Upper Basin does not show any sign of a systematic reduction in use. Average annual consumption during the 1980s, some of the wettest years in the past century, was 4.3maf while average annual consumption between 2020 and 2024, some of the driest years, was 4.4maf.

The charts below demonstrate that irrigated agriculture is by far the largest consumer of Colorado River water. Outside of Colorado, where trans-basin exports to Front Range cities consumes a large portion of water, municipal and industrial consumptive use is quite small.

Significantly, agricultural water use does not show any long term trends down as supply diminishes. In fact, in most states agricultural use is increasing over time.

Upper Basin Use by Category

{
  const UB_Use_Categories = Consumptive_Use_Dataset.filter(d => 
    d.Region === "Upper Basin" &&
    d.State !== "Lake Powell" &&
    d.State !== "Arizona" &&
    d.Category !== "Import" &&
    d.Water_Year !== "2025"
  ).sort((a, b) => a.Date - b.Date)

  return Plot.plot({
    width: width,
    height: 800,
    marginRight: 100,
    color: {
      legend: true,
    },
    y: {
      grid: true,
      label: "Millions of Acre-Feet",
      domain: [0, 2.6]
    },
    x: { label: "Water Year", domain: [d3.min(UB_Use_Categories, d => d.Date), d3.max(UB_Use_Categories, d => d.Date)] },
    marks: [
      Plot.frame(),
      Plot.areaY(UB_Use_Categories, Plot.stackY({
      x: "Date",
      y: "Consumptive_Use_MAF",
      fy: "State",
      fill: "Category",
      order: "-sum", // Orders largest at the bottom
      fillOpacity: 0.7,
      channels: {
        "Category":              { value: d => d.Category },
        "Water Year":            { value: d => d.Water_Year },
        "Consumptive Use (MAF)": { value: d => d.Consumptive_Use_MAF }
      },
      tip: {
        format: {
          x: false,
          y: false,
          y1: false,
          y2: false,
          fill: false,
          "Category": true,
          "Water Year": true,
          "Consumptive Use (MAF)": true
        }
      }
    }))
    ]
  })
}

Lower Basin

Lower Basin allocations are:

California: 4.4maf
Arizona: 2.8maf
Nevada: 0.3maf

Lower Basin states do not take evaporation from reservoirs into account as a contributor to their consumptive use, and while the Upper Basin is responsible for evaporation from Lake Powell it is really the Lower Basin that benefits from the water stored there. However, the Lower Basin makes somewhat of a trade for this. It does not “pay” for evaporation from Lake Mead but it does pay for the declining storage in the form of cuts to deliveries from the reservoir. Only the Lower Basin is subject to these cuts under the 2007 operating guidelines and 2019 Drought Contingency Plan as part of the USBR’s efforts to control reservoir levels.

Lower Basin State Consumption

Lower_Basin_States = WY_State_Use.filter(d => d.Region === "Lower Basin")
viewof lower_basin_options = Inputs.checkbox(
  ["Show Apportionment Lines"],
  { value: ["Show Apportionment Lines"] }
)
{
  const show_apportionment_lines = lower_basin_options.includes("Show Apportionment Lines")

  const apportionment_marks = show_apportionment_lines ? [
    Plot.ruleY([4.4],  { strokeDasharray: "4,4", stroke: "red" }),
    Plot.ruleY([2.8], { strokeDasharray: "4,4", stroke: "green" }),
    Plot.ruleY([0.3],  { strokeDasharray: "4,4", stroke: "orange" })
    // Plot.text(["Colorado"],   { frameAnchor: "bottom", textAnchor: "right", y: 3.9, x: new Date(d3.max(Upper_Basin_States, d => d.Date)) }),
    // Plot.text(["Utah"],       { frameAnchor: "bottom", textAnchor: "right", y: 1.8, x: new Date(d3.max(Upper_Basin_States, d => d.Date)) }),
    // Plot.text(["Wyoming"],    { frameAnchor: "bottom", textAnchor: "right", y: 1.1, x: new Date(d3.max(Upper_Basin_States, d => d.Date)) }),
    // Plot.text(["New Mexico"], { frameAnchor: "bottom", textAnchor: "right", y: 0.9, x: new Date(d3.max(Upper_Basin_States, d => d.Date)) })
  ] : []

  // Adjust y domain based on checkbox - expand to fit reference lines when shown
  const y_max = show_apportionment_lines
    ? Math.max(d3.max(Lower_Basin_States, d => d.Consumptive_Use_MAF), 4.2)  // 4.2 gives headroom above 3.88
    : d3.max(Lower_Basin_States, d => d.Consumptive_Use_MAF)

  return Plot.plot({
    width: width,
    height: 500,
    //marginRight: 100,
    y: {
      grid: true,
      label: "Consumptive Use (MAF)",
      domain: [0, y_max]
    },
    x: { label: "Date" },
    color: {
      domain: ["California", "Arizona", "Nevada", "Lower Basin Reservoirs"],
      range: ["red", "green", "orange", "blue"],
      legend: true
    },
    marks: [
      Plot.lineY(Lower_Basin_States, { x: "Date", y: "Consumptive_Use_MAF", stroke: "State" }),
      Plot.tip(Lower_Basin_States, Plot.pointerX({ x: "Date", y: "Consumptive_Use_MAF" })),
      ...apportionment_marks
    ]
  })
}

Most noticable about Lower Basin use is that California regularly used more than its allocation until the onset of drought. This was because the Lower Basin is allowed to use “surplus” water, of which California is entitled to half. Prior to the completion of the Central Arizona Project in 1993, California was able to claim a portion of Arizona’s allocation as surplus. With unused Arizonan water and the wet years of the 1980s and 1990s, California was able ot use nearly one million acre-feet above its base allocation. The rapid growth of Arizonan cities and agricultural demand with the completion of the CAP ended the viability of this system and the onset of drought in the early 2000s brought California’s years of surplus crashing down.

Perhaps more striking, however, is how much water is lost to reservoir evaporation, at times losing more water than the entire state of Arizona was consuming. As Lake Mead has shrunk so has evaporation but the Lower Basin’s lakes continue to lose roughly 700,000af of water and at their peak lost nearly 1.2maf a year. The failure of Lower Basin water managers to account for this, the product of intense political tensions between Arizona and California over water that prevented a Lower Basin Compact, has become a significant challenge to sustainable supply management.

Lower Basin Use vs. Supply

{
  // Type = Evap used to include reservoir evaporation in consumptive use figures
  const LB_Total = WY_Region_Use.filter(d => d.Region === "Lower Basin" & d.Type === "Evap").sort((a, b) => a.Date - b.Date)

  const LB_Supply_Plot = Plot.plot({
    width: width,
    height: 500,
    color: {
      legend: true,
      domain: ["Consumptive Use", "Lower Basin Supply", "Supply 10yr Average"],
      range:  ["black", "blue", "#427FFF"]
    },
    y: {
      grid: true,
      label: "Millions of Acre-Feet",
      domain: [d3.min(Supply, d => d.Lower_Basin_Supply), d3.max(Supply, d => d.Lower_Basin_Supply)]
    },
    x: { label: "Water Year", domain: [d3.min(LB_Total, d => d.Date), d3.max(LB_Total, d => d.Date)] },
    marks: [
      Plot.lineY(LB_Total, { 
      x: "Date", 
      y: "Consumptive_Use_MAF", 
      stroke: "black",
      channels: {
        "Water Year":      { value: d => d.Water_Year },
        "Total Use (MAF)": { value: d => d.Consumptive_Use_MAF },
        "Lower Basin Supply": { value: d => d.Lower_Basin_Supply },
        "Supply 10yr Avg": { value: d => d.LB_10yr_Avg }
      },
      tip: {
        format: {
          x: false,
          y: false,
          y1: false,
          y2: false,
          fill: false,
          "Water Year": true,
          "Total Use (MAF)": true,
          "Lower Basin Supply": true,
          "Supply 10yr Avg": true
        }
      } 
    }),
      Plot.lineY(Supply, { 
        x: "Date", 
        y: "Lower_Basin_Supply", 
        stroke: "blue",
        channels: {
        "Water Year":      { value: d => d.Water_Year },
        "Lower Basin Supply": { value: d => d.Lower_Basin_Supply },
        "Supply 10yr Avg": { value: d => d.LB_10yr_Avg }
      },
      tip: {
        format: {
          x: false,
          y: false,
          y1: false,
          y2: false,
          fill: false,
          "Water Year": true,
          "Lower Basin Supply": true,
          "Supply 10yr Avg": true
        }
      } 
      }),
      Plot.lineY(Supply, { 
        x: "Date", 
        y: "LB_10yr_Avg", 
        stroke: "#427FFF",
        strokeDasharray: "4,4",
        strokeOpacity: 0.5
      })
    ]
  })
  return LB_Supply_Plot
}

Total consumptive use includes evaporation from Lower Basin reservoirs. Supply is measured as natural flow at Lee Ferry minus Upper Basin use and half of obligation to Mexico (0.75maf)

The chart above explores how the Lower Basin’s consumptive use compares to long term trends in available water supply, independent of storage in Lake Mead. Similar to the Upper Basin, wide swings in annual supply complicate long-term responses to drought. Positive supply water years are regularly followed by increases in use the following year and vice versa.

This see-sawing of use is not sustainable and while the Lower Basin has cut consumptive use by nearly a third since 2002 (including reservoir evaporation) much of that reduction was a correction to overuse and the result of mandatory cuts in recent years. Lakes Mead and Powell continue to decline while Lower Basin use struggles to catch up.

Lower Basin Use by Category

The chart below is derived from data from the US Bureau of Reclamation on consumptive use. Unfortunately, the USBR categorizes broadly by the initial form of transfer for its consumptive use reporting on the Lower Basin. This is most clear for California, which does in fact export most of its water outside of the drainage basin of the Colorado, but uses the vast majority of that water for agriculture and the rest to supply cities like LA and San Diego.

{
  const LB_Use_Categories = Consumptive_Use_Dataset.filter(d => 
    d.Region === "Lower Basin" &&
    d.Water_Year !== "2025" &&
    d.State !== "Lower Basin Reservoirs"
  ).sort((a, b) => a.Date - b.Date)

  return Plot.plot({
    width: width,
    height: 800,
    marginRight: 100,
    color: {
      legend: true,
    },
    y: {
      grid: true,
      label: "Millions of Acre-Feet",
      domain: [0, 6]
    },
    x: { label: "Water Year", domain: [d3.min(LB_Use_Categories, d => d.Date), d3.max(LB_Use_Categories, d => d.Date)] },
    marks: [
      Plot.frame(),
      Plot.areaY(LB_Use_Categories, Plot.stackY({
      x: "Date",
      y: "Consumptive_Use_MAF",
      fy: "State",
      fill: "Category",
      order: "-sum", // Orders largest at the bottom
      fillOpacity: 0.7,
      channels: {
        "Category":              { value: d => d.Category },
        "Water Year":            { value: d => d.Water_Year },
        "Consumptive Use (MAF)": { value: d => d.Consumptive_Use_MAF }
      },
      tip: {
        format: {
          x: false,
          y: false,
          y1: false,
          y2: false,
          fill: false,
          "Category": true,
          "Water Year": true,
          "Consumptive Use (MAF)": true
        }
      }
    }))
    ]
  })
}

Additionally, the use of the term “export” is not entirely correct for much of this water. In Arizona, water moved through the Central Arizona Project is largely brought to the Phoenix metropolitan area, which itself is within the Gila River watershed that flows into the Colorado at Yuma. For this reason “export with system” is only informative insofar as the audience is primarily interested in how much water is being moved from the Colorado main stem to another part of the basin.

In California the hundreds of thousands of acre-feet piped to the Metropolitan Water District of Southern California are without a doubt an “export” that is fully consumed as a transbasin diversion, similar to the water moved to the Colorado Front Range. But the vast majority of the water marked as “export” is used as agricultural water in the Imperial and Coachella Valleys. The Imperial Irrigation District alone is the largest holder of Colorado River Water rights with claims approaching three million and current annual usage close to 2.5 million.

This water is only technically “exported” outside the basin. The Imperial Valley, also known as the Mexicali Valley, is naturally part of the Colorado River Delta. What is now the Salton Sea was once Lake Cahuilla, fed by flood waters from the Colorado into the Salton Trough, the region from the Gulf of California towards what is now Palm Springs formed by tectonic spreading. The region has flooded many times over millions of years as sediment from the Colorado River slowly built up to cut the Trough off from the Gulf of California.

Regardless of hydrologic continuity, though, the USBR figures do not effectively show the dominance of agriculture in Lower Colorado River water demand.

For this we must use more limited data provided by the USBR in specific evapotranspiration and evaporation reports.

StateET_TypeTotal = (await FileAttachment("Data/StateET_TypeTotal.csv").csv()).map(d =>({
  ...d,
  State: String(d.State),
  Year: String(d.Year),
  Date: new Date(d.Date),
  Type: String(d.Type),
  ET: parseFloat((+d.ET).toFixed(2)),
  Acres: parseFloat((+d.Acres).toFixed(2)),
  ET_per_Acre: parseFloat((+d.ET).toFixed(2))
}))

StateET_CropTotal = (await FileAttachment("Data/StateET_CropTotal.csv").csv()).map(d =>({
  ...d,
  State: String(d.State),
  Year: String(d.Year),
  Date: new Date(d.Date),
  Crop: String(d.Crop),
  Crop_Group : String(d.Crop_Group),
  Type: String(d.Type),
  ET: parseFloat((+d.ET).toFixed(2)),
  Acres: parseFloat((+d.Acres).toFixed(2)),
  ET_per_Acre: parseFloat((+d.ET).toFixed(2))
}))

Evapotranspiration by State and Type

{
  return Plot.plot({
  marginRight: 100,
  marginLeft: 50,
  width: width,
  height: 500,
  x: {label: "Year"},
  y: {label: "ET (Acre-Feet)"},
  color: {legend: true},
  marks: [
    Plot.frame(),
    Plot.barY(StateET_TypeTotal, Plot.stackY({
        x: "Date",
        y: "ET",
        fy: "State",
        fill: "Type",
        order: "-sum", // Orders largest at the bottom
        fillOpacity: 1
      })
    )
  ]
 })
}

Evapotranspiration by Crop Type

{
  return Plot.plot({
  marginRight: 100,
  marginLeft: 50,
  width: width,
  height: 500,
  x: {label: "Year"},
  y: {label: "ET (Acre-Feet)"},
  color: {legend: true},
  marks: [
    Plot.frame(),
    Plot.barY(StateET_CropTotal, Plot.stackY({
        x: "Date",
        y: "ET",
        fy: "State",
        fill: "Crop_Group",
        order: "-sum", // Orders largest at the bottom
        fillOpacity: 1
      })
    )
  ]
 })
}