Minimal OpenSCM-Runner example with FaIR

Minimal OpenSCM-Runner example with FaIR#

import openscm_runner
openscm_runner.__version__
'0.13.1a0'
from pathlib import Path

import matplotlib.pyplot as plt
import numpy as np
from scmdata import ScmRun

from openscm_runner.adapters import FAIR
from openscm_runner.run import run
from openscm_runner.utils import calculate_quantiles
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/database/_database.py:9: TqdmExperimentalWarning: Using `tqdm.autonotebook.tqdm` in notebook mode. Use `tqdm.tqdm` instead to force console mode (e.g. in jupyter console)
  import tqdm.autonotebook as tqdman
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/pymagicc/io/base.py:224: FutureWarning: The 'delim_whitespace' keyword in pd.read_csv is deprecated and will be removed in a future version. Use ``sep='\s+'`` instead
  df = pd.read_csv(
fair = FAIR()
fair.get_version()
'1.6.4'
input_scenarios = ScmRun(
    str(
        Path("..")
        / ".."
        / ".."
        / ".."
        / "tests"
        / "test-data"
        / "rcmip_scen_ssp_world_emissions.csv"
    ),
    lowercase_cols=True,
)

input_scenarios.head(30)
time 2015-01-01 2020-01-01 2030-01-01 2040-01-01 2050-01-01 2060-01-01 2070-01-01 2080-01-01 2090-01-01 2100-01-01
model region scenario unit variable
AIM/CGE World ssp370 Mt BC/yr Emissions|BC 9.727424 10.227893 10.687554 11.006388 10.945712 10.581617 10.203875 9.761072 9.449638 9.105233
kt C2F6/yr Emissions|C2F6 1.570000 2.018300 1.357400 0.934400 0.663700 0.490500 0.379600 0.308700 0.182500 0.182500
kt C6F14/yr Emissions|C6F14 0.350000 0.449891 0.302626 0.208315 0.147921 0.109300 0.084573 0.068818 0.040700 0.040700
kt CF4/yr Emissions|CF4 10.869900 12.751283 10.327405 8.776119 7.783328 7.147934 6.741338 6.481040 6.018345 6.018345
Mt CH4/yr Emissions|CH4 388.072796 418.454212 471.330793 515.545705 558.974274 602.318529 647.129406 693.382453 735.323193 777.732192
Mt CO/yr Emissions|CO 934.349885 968.199943 985.393828 1002.733950 996.036314 969.819813 946.592481 926.132789 919.418030 915.425024
Mt CO2/yr Emissions|CO2|MAGICC AFOLU 3517.440000 3875.091863 3518.037633 3161.907297 2889.126278 3144.546763 3048.513956 2843.305300 2564.936400 2656.121100
Emissions|CO2|MAGICC Fossil and Industrial 35635.286298 40932.946361 49329.321684 55336.062530 60014.932344 63423.820853 66993.464611 70561.920621 75234.113021 80069.712021
kt HFC125/yr Emissions|HFC125 78.790600 154.436090 212.358860 251.941960 282.002550 299.827430 318.903410 340.664240 358.674180 380.636610
kt HFC134a/yr Emissions|HFC134a 201.953400 233.567600 199.087200 192.274300 201.090800 203.604500 213.079700 232.340800 254.877700 280.732500
kt HFC143a/yr Emissions|HFC143a 32.381000 56.247300 76.104900 93.629800 106.882500 114.293000 123.598200 133.430100 140.363400 148.953400
kt HFC227ea/yr Emissions|HFC227ea 3.663300 4.960724 5.073230 5.083905 5.233234 4.859732 4.580264 4.467998 4.395552 4.400470
kt HFC23/yr Emissions|HFC23 14.485700 2.355200 0.527400 0.318300 0.160300 0.084500 0.043900 0.022700 0.011600 0.000000
kt HFC245fa/yr Emissions|HFC245fa 11.728500 18.894736 25.231352 31.381222 36.911089 40.877515 45.079665 49.711190 54.019714 58.678425
kt HFC32/yr Emissions|HFC32 38.579200 6.272500 1.404600 0.847700 0.426900 0.225000 0.116900 0.060500 0.030900 0.000000
kt HFC4310mee/yr Emissions|HFC4310mee 1.151600 1.143618 0.722052 0.575677 0.530488 0.486157 0.464422 0.465773 0.474246 0.491929
kt N2O/yr Emissions|N2O 10900.000000 11774.929915 13291.805177 14526.610299 15634.911664 16637.955454 17624.301293 18581.107000 19626.758700 20654.084200
Mt NH3/yr Emissions|NH3 65.279703 68.740214 74.356986 78.141369 80.714002 82.573545 83.418569 83.671519 85.953850 88.308379
Mt NOx/yr Emissions|NOx 155.520450 166.055266 169.680102 170.896874 169.856025 163.489875 157.435306 151.232142 148.066756 144.449167
Mt OC/yr Emissions|OC 34.746024 35.840262 37.482750 38.294227 38.379225 37.542331 36.560925 35.556500 34.750084 33.748357
kt SF6/yr Emissions|SF6 8.020000 8.408800 8.667200 8.707500 8.514200 8.519300 8.589500 8.730600 9.064400 9.521300
Mt SO2/yr Emissions|Sulfur 100.771167 98.602158 99.221557 99.570916 99.777851 95.882896 91.855165 87.403154 83.616229 78.147378
Mt VOC/yr Emissions|VOC 227.244819 237.021540 246.670646 250.865856 256.014508 252.178651 247.398146 241.421792 235.276703 227.919036
ssp370-lowNTCF-aerchemmip Mt BC/yr Emissions|BC 9.727424 9.654149 8.585723 7.397100 5.875750 5.492153 5.092665 4.682260 4.333613 3.967145
kt C2F6/yr Emissions|C2F6 1.570000 2.018300 1.357400 0.934400 0.663700 0.490500 0.379600 0.308700 0.182500 0.182500
kt C6F14/yr Emissions|C6F14 0.350000 0.449891 0.302626 0.208315 0.147921 0.109300 0.084573 0.068818 0.040700 0.040700
kt CF4/yr Emissions|CF4 10.869900 12.751283 10.327405 8.776119 7.783328 7.147934 6.741338 6.481040 6.018345 6.018345
Mt CH4/yr Emissions|CH4 388.072796 418.454212 471.330793 515.545705 558.974274 602.318529 647.129406 693.382453 735.323193 777.732192
Mt CO/yr Emissions|CO 934.349885 925.476786 838.223607 732.376446 602.469951 566.425696 532.060408 498.984701 470.975278 438.754040
Mt CO2/yr Emissions|CO2|MAGICC AFOLU 3517.440000 3875.091863 3518.037633 3161.907297 2889.126278 3144.546763 3048.513956 2843.305300 2564.936400 2656.121100
res_run = run(
    climate_models_cfgs={
        "FAIR": [
            {},  # passing an empty list of an empty dict will run with defaults
            {"q": np.array([0.3, 0.45]), "r0": 30.0, "lambda_global": 0.9},
            {"q": np.array([0.35, 0.4]), "r0": 25.0, "lambda_global": 1.1},
        ],
    },
    scenarios=input_scenarios,
    output_variables=(
        "Surface Air Temperature Change",
        "Atmospheric Concentrations|CO2",
        "Effective Radiative Forcing",
        "Effective Radiative Forcing|CO2",
        "Effective Radiative Forcing|Aerosols",
        "Effective Radiative Forcing|Aerosols|Direct Effect|BC",
        "Effective Radiative Forcing|Aerosols|Direct Effect|OC",
        "Effective Radiative Forcing|Aerosols|Direct Effect|SOx",
        "Effective Radiative Forcing|Aerosols|Direct Effect",
        "Effective Radiative Forcing|Aerosols|Indirect Effect",
    ),
)
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/run.py:2632: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.
  pd.concat([ret._meta.to_frame(), *to_join_metas]).astype("category")

Note in the plots below that ‘model’ is the IAM that produced the scenario. In all cases, the climate model is FaIR.

res_run.get_unique_meta("climate_model", no_duplicates=True)
'FaIRv1.6.4'
plot_kwargs = dict(
    quantiles_plumes=[((0.05, 0.95), 0.5), ((0.5,), 1.0)],
    quantile_over="run_id",
    hue_var="scenario",
    style_var="model",
    style_label="IAM",
    time_axis="year",
)
ax = plt.figure(figsize=(12, 7)).add_subplot(111)
res_run.filter(variable="Surface Air Temperature Change").plumeplot(
    ax=ax, **plot_kwargs
)
ax.axhline(1.1)
ax.axvline(2018)
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/run.py:197: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
  df.reset_index(inplace=True)
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/run.py:197: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
  df.reset_index(inplace=True)
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/run.py:197: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
  df.reset_index(inplace=True)
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/run.py:197: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
  df.reset_index(inplace=True)
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/run.py:197: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
  df.reset_index(inplace=True)
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/run.py:197: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
  df.reset_index(inplace=True)
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/run.py:197: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
  df.reset_index(inplace=True)
<matplotlib.lines.Line2D at 0x7f898af46820>
../../_images/5264457344992e6a5c4d105e9d0331f09d35fb5dde6fa0b4b824708c2697df66.png
ax = plt.figure(figsize=(12, 7)).add_subplot(111)
res_run.filter(variable="Atmospheric Concentrations|CO2").plumeplot(
    ax=ax, **plot_kwargs
)
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/run.py:197: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
  df.reset_index(inplace=True)
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/run.py:197: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
  df.reset_index(inplace=True)
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/run.py:197: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
  df.reset_index(inplace=True)
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/run.py:197: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
  df.reset_index(inplace=True)
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/run.py:197: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
  df.reset_index(inplace=True)
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/run.py:197: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
  df.reset_index(inplace=True)
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/run.py:197: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
  df.reset_index(inplace=True)
(<Axes: ylabel='ppm'>,
 [<matplotlib.patches.Patch at 0x7f898a76c160>,
  <matplotlib.collections.PolyCollection at 0x7f898948cfa0>,
  <matplotlib.lines.Line2D at 0x7f8989487970>,
  <matplotlib.patches.Patch at 0x7f8989482a00>,
  <matplotlib.lines.Line2D at 0x7f898ae81b80>,
  <matplotlib.lines.Line2D at 0x7f898ae811f0>,
  <matplotlib.lines.Line2D at 0x7f898af409d0>,
  <matplotlib.lines.Line2D at 0x7f898aef2c70>,
  <matplotlib.lines.Line2D at 0x7f898aef2040>,
  <matplotlib.lines.Line2D at 0x7f8989472ca0>,
  <matplotlib.lines.Line2D at 0x7f898a61b880>,
  <matplotlib.lines.Line2D at 0x7f898a61be50>,
  <matplotlib.lines.Line2D at 0x7f89894397f0>,
  <matplotlib.lines.Line2D at 0x7f8989482280>,
  <matplotlib.patches.Patch at 0x7f8989482820>,
  <matplotlib.lines.Line2D at 0x7f8989482580>,
  <matplotlib.lines.Line2D at 0x7f8989482220>,
  <matplotlib.lines.Line2D at 0x7f8989482460>,
  <matplotlib.lines.Line2D at 0x7f89894828e0>,
  <matplotlib.lines.Line2D at 0x7f8989482e80>])
../../_images/6d9831d15d8cd2a0dcdbea3fcc7afd635a9bce49498497b36cbf896c6a54942c.png
ax = plt.figure(figsize=(12, 7)).add_subplot(111)
ax, legend_items = res_run.filter(
    variable="Effective Radiative Forcing*", scenario="ssp245"
).plumeplot(
    quantiles_plumes=[((0.05, 0.95), 0.5), ((0.5,), 1.0)],
    quantile_over="run_id",
    hue_var="variable",
    hue_label="Variable",
    style_var="scenario",
    style_label="Scenario",
    ax=ax,
    time_axis="year",
)
ax.legend(handles=legend_items, ncol=2, loc="upper left")
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/run.py:197: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
  df.reset_index(inplace=True)
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/run.py:197: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
  df.reset_index(inplace=True)
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/run.py:197: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
  df.reset_index(inplace=True)
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/run.py:197: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
  df.reset_index(inplace=True)
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/run.py:197: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
  df.reset_index(inplace=True)
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/run.py:197: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
  df.reset_index(inplace=True)
/home/docs/checkouts/readthedocs.org/user_builds/openscm-runner/envs/latest/lib/python3.9/site-packages/scmdata/run.py:197: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
  df.reset_index(inplace=True)
<matplotlib.legend.Legend at 0x7f8989482850>
../../_images/b705c50b0a76f77e4e8e7c8354c08453ef677924137094b8938a32e5c0b6c95a.png
res_run.filter(
    variable="Surface Air Temperature Change", year=2100, scenario=["ssp126"]
).values.max()
2.0039648925689164
res_run.filter(
    variable="Surface Air Temperature Change", year=2100, scenario=["ssp126"]
).values.min()
1.6255017914411736
res_run.filter(
    variable="Surface Air Temperature Change", year=2100, scenario=["ssp370"]
).values.max()
4.64593005355395
res_run.filter(
    variable="Surface Air Temperature Change", year=2100, scenario=["ssp370"]
).values.min()
3.9270094948581384
quantiles = calculate_quantiles(res_run, [0.05, 0.17, 0.5, 0.83, 0.95])
quantiles.filter(
    variable="Surface Air Temperature Change",
    year=2100,
    scenario=["ssp126"],
    quantile=0.05,
).values[0][0]
1.641021680354161
quantiles.filter(
    variable="Surface Air Temperature Change",
    year=2100,
    scenario=["ssp126"],
    quantile=0.95,
).values[0][0]
1.9816384713691297
quantiles.filter(
    variable="Surface Air Temperature Change",
    year=2100,
    scenario=["ssp370"],
    quantile=0.05,
).values[0][0]
3.9423565896582753
quantiles.filter(
    variable="Surface Air Temperature Change",
    year=2100,
    scenario=["ssp370"],
    quantile=0.95,
).values[0][0]
4.589385092484505