diff --git a/.travis.yml b/.travis.yml index 4fac483f4..cb8d22ef9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,13 +3,13 @@ language: sh matrix: include: - os: linux - env: PYENV=py37 + env: PYENV=py36 - os: linux - env: PYENV=py27 - - os: osx env: PYENV=py37 - os: osx - env: PYENV=py27 + env: PYENV=py36 + - os: osx + env: PYENV=py37 # Observed on 10-Feb-19, choclatey builds for miniconda3 break # see: https://github.com/conda/conda/issues/6064 # It is not clear how/when this can be fixed, so turn this back off for now @@ -21,17 +21,21 @@ matrix: before_install: - source ./ci/env.sh - - bash ./ci/travis-install.sh + - bash ./ci/travis-install-miniconda.sh + - conda create -n testing python=$PYVERSION --yes - source activate testing - - make virtual-environment + - make -B virtual-environment install: - make install script: - - python -c "import os, sys; assert os.environ['PYVERSION'] == sys.version[0]" + - conda list + - python -c "import os; print(os.environ['PYVERSION'])" + - python -c "import sys; print(sys.version)" + - python -c "import os, sys; assert os.environ['PYVERSION'] == '.'.join([sys.version[0], sys.version[2]])" - make test - # silly problems are there for building docs in windows and py2 (tries to look for py3 jupyter kernel) + # only test docs once to make sure everything works on most recent python - cd doc - if [[ "${PYENV}" == "py37" && "${TRAVIS_OS_NAME}" != 'windows' ]]; then make html; fi - cd .. diff --git a/Makefile b/Makefile index c450de5ad..80eafbe79 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,9 @@ .DEFAULT_GOAL := help +CI_DIR=./ci +CI_ENVIRONMENT_CONDA_DEFAULT_FILE=$(CI_DIR)/environment-conda-default.txt +CI_ENVIRONMENT_CONDA_FORGE_FILE=$(CI_DIR)/environment-conda-forge.txt + ifndef CONDA_PREFIX $(error Conda not active, please install conda and then activate it using \`conda activate\`)) @@ -10,7 +14,6 @@ endif VENV_DIR=$(CONDA_PREFIX) endif - define PRINT_HELP_PYSCRIPT import re, sys @@ -80,19 +83,15 @@ docs: $(VENV_DIR) ## make the docs .PHONY: virtual-environment virtual-environment: $(VENV_DIR) ## make virtual environment for development + +$(VENV_DIR): $(CI_ENVIRONMENT_CONDA_DEFAULT_FILE) $(CI_ENVIRONMENT_CONDA_FORGE_FILE) # TODO: unify with ci install instructions somehow - $(CONDA_EXE) install --yes $(shell cat ci/environment-conda-default.txt | tr '\n' ' ') - $(CONDA_EXE) install --yes -c conda-forge $(shell cat ci/environment-conda-forge.txt | tr '\n' ' ') - # do matplotlib version fiddling for making plots - $(CONDA_EXE) uninstall --yes --force matplotlib + $(CONDA_EXE) install --yes $(shell cat $(CI_ENVIRONMENT_CONDA_DEFAULT_FILE) | tr '\n' ' ') + $(CONDA_EXE) install --yes -c conda-forge $(shell cat $(CI_ENVIRONMENT_CONDA_FORGE_FILE) | tr '\n' ' ') # Install development setup $(VENV_DIR)/bin/pip install -e .[tests,deploy] - # do matplotlib version fiddling for making plots (part 2) - $(VENV_DIR)/bin/pip uninstall -y matplotlib - $(VENV_DIR)/bin/pip install matplotlib==2.1.2 - touch $(VENV_DIR) # install docs requirements - cd doc; pip install -r requirements.txt + cd doc; $(VENV_DIR)/bin/pip install -r requirements.txt .PHONY: release-on-conda release-on-conda: ## release pyam on conda diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index ddc5f3d92..87305a602 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -2,6 +2,7 @@ # Next Release - [#214](https://github.com/IAMconsortium/pyam/pull/214) Tidy up requirements specifications a little +- [#213](https://github.com/IAMconsortium/pyam/pull/213) Add support for IPCC colors, see the new tutorial "Using IPCC Color Palattes" - [#212](https://github.com/IAMconsortium/pyam/pull/212) Now natively support reading R-style data frames with year columns like "X2015" - [#202](https://github.com/IAMconsortium/pyam/pull/202) Extend the `df.rename()` function with a `check_duplicates (default True)` validation option - [#201](https://github.com/IAMconsortium/pyam/pull/201) Added native support for legends outside of plots with `pyam.plotting.OUTSIDE_LEGEND` with a tutorial diff --git a/appveyor.yml b/appveyor.yml index a66ef5cdb..5ee66a40e 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,12 +1,12 @@ environment: matrix: - - PYTHON_VERSION: "2.7" - MINICONDA: "C:\\Miniconda-x64" - PYTHON_ARCH: "64" - PYTHON_VERSION: "3.6" MINICONDA: "C:\\Miniconda36-x64" PYTHON_ARCH: "64" + - PYTHON_VERSION: "3.7" + MINICONDA: "C:\\Miniconda37-x64" + PYTHON_ARCH: "64" init: - "ECHO %PYTHON_VERSION% %MINICONDA%" @@ -20,14 +20,19 @@ install: - set "CONDA_ROOT=C:\Miniconda%BASE_PYTHON_VERSION%%ARCH_LABEL%" - set "PATH=%CONDA_ROOT%;%CONDA_ROOT%\Scripts;%CONDA_ROOT%\Library\bin;%PATH%" - # Dependencies and package install - - conda install --yes geopandas cartopy - - if "%PYTHON_VERSION%" == "2.7" pip install functools32 + # create conda environment + - conda update --yes conda + - conda create -n testing python="%PYTHON_VERSION%" --yes + - conda --version + - activate testing + - conda install -y numpy pandas pyyaml xlrd xlsxwriter matplotlib==3.0.3 seaborn==0.9.0 six requests jupyter nbconvert + - conda install -y -c conda-forge libiconv gdal fiona geopandas cartopy build: false test_script: - - pip install -e .[tests] + - conda list + - pip install -e .[tests,deploy] - pytest -v --mpl tests --mpl-results-path=test-artifacts artifacts: diff --git a/ci/env.sh b/ci/env.sh index 47e4cab12..090d00af8 100644 --- a/ci/env.sh +++ b/ci/env.sh @@ -16,18 +16,23 @@ case "${TRAVIS_OS_NAME}" in esac case "${PYENV}" in - py27) - export PYVERSION=2 - export CHOCOPATH='miniconda2' - export CHOCONAME='miniconda' + py35) + export PYVERSION=3.5 + export CHOCOPATH='miniconda3' + export CHOCONAME='miniconda3' + ;; + py36) + export PYVERSION=3.6 + export CHOCOPATH='miniconda3' + export CHOCONAME='miniconda3' ;; py37) - export PYVERSION=3 + export PYVERSION=3.7 export CHOCOPATH='miniconda3' export CHOCONAME='miniconda3' ;; esac -export URL="https://repo.anaconda.com/miniconda/Miniconda$PYVERSION-latest-$OSNAME-x86_64.$EXT" +export URL="https://repo.anaconda.com/miniconda/Miniconda3-latest-$OSNAME-x86_64.$EXT" if [[ "$TRAVIS_OS_NAME" != 'windows' ]]; then export PATH=$HOME/miniconda/bin:$PATH diff --git a/ci/environment-conda-default.txt b/ci/environment-conda-default.txt index cfb24b48d..6242aa04d 100644 --- a/ci/environment-conda-default.txt +++ b/ci/environment-conda-default.txt @@ -1,10 +1,10 @@ -numpy==1.14.0 -pandas==0.22.0 +numpy +pandas pyyaml xlrd xlsxwriter -matplotlib==2.1.2 -seaborn==0.8.1 +matplotlib==3.0.3 +seaborn==0.9.0 six requests jupyter diff --git a/ci/environment-conda-forge.txt b/ci/environment-conda-forge.txt index 9734591ca..54bb7219e 100644 --- a/ci/environment-conda-forge.txt +++ b/ci/environment-conda-forge.txt @@ -1,3 +1,4 @@ +libiconv gdal fiona geopandas diff --git a/ci/travis-install.sh b/ci/travis-install-miniconda.sh similarity index 89% rename from ci/travis-install.sh rename to ci/travis-install-miniconda.sh index 8d6ef31b8..0c39107f3 100644 --- a/ci/travis-install.sh +++ b/ci/travis-install-miniconda.sh @@ -20,5 +20,3 @@ fi # update conda conda update --yes conda -# create named env -conda create -n testing python=$PYVERSION --yes diff --git a/doc/requirements.txt b/doc/requirements.txt index f81b98856..469ac28fc 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -9,4 +9,5 @@ cloud_sptheme nbformat ipython jupyter +jupyter_contrib_nbextensions pillow diff --git a/doc/source/tutorials.rst b/doc/source/tutorials.rst index d3216dc4f..519a286ff 100644 --- a/doc/source/tutorials.rst +++ b/doc/source/tutorials.rst @@ -8,6 +8,7 @@ Tutorials :maxdepth: 1 tutorials/pyam_first_steps.ipynb + tutorials/ipcc_colors.ipynb tutorials/pyam_logo.ipynb tutorials/iiasa_dbs.ipynb tutorials/checking_databases.ipynb diff --git a/doc/source/tutorials/ipcc_colors.ipynb b/doc/source/tutorials/ipcc_colors.ipynb new file mode 100644 index 000000000..02251f1bc --- /dev/null +++ b/doc/source/tutorials/ipcc_colors.ipynb @@ -0,0 +1,329 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Using IPCC Color Palattes\n", + "\n", + "`pyam` supports the use of explicit IPCC AR5 and AR6 color palattes by providing the RCP and/or SSP of interest via the `pyam.run_control()`.\n", + "\n", + "The full list of supported special colors is" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "IPython.OutputArea.prototype._should_scroll = function(lines) { return false; }" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
namecolor
0AR6-SSP1-1.9#00AAD0
1AR6-SSP1-2.6#003466
2AR6-SSP2-4.5#EF550F
3AR6-SSP3-7.0#E00000
4AR6-SSP3-LowNTCF#E00000
5AR6-SSP4-3.4#FFA900
6AR6-SSP4-6.0#C47900
7AR6-SSP5-3.4-OS#7F006E
8AR6-SSP5-8.5#990002
9AR6-RCP-2.6#003466
10AR6-RCP-4.5#5492CD
11AR6-RCP-6.0#C47900
12AR6-RCP-8.5#990002
13AR5-RCP-2.6#0000FF
14AR5-RCP-4.5#79BCFF
15AR5-RCP-6.0#FF822D
16AR5-RCP-8.5#FF0000
\n", + "
" + ], + "text/plain": [ + " name color\n", + "0 AR6-SSP1-1.9 #00AAD0\n", + "1 AR6-SSP1-2.6 #003466\n", + "2 AR6-SSP2-4.5 #EF550F\n", + "3 AR6-SSP3-7.0 #E00000\n", + "4 AR6-SSP3-LowNTCF #E00000\n", + "5 AR6-SSP4-3.4 #FFA900\n", + "6 AR6-SSP4-6.0 #C47900\n", + "7 AR6-SSP5-3.4-OS #7F006E\n", + "8 AR6-SSP5-8.5 #990002\n", + "9 AR6-RCP-2.6 #003466\n", + "10 AR6-RCP-4.5 #5492CD\n", + "11 AR6-RCP-6.0 #C47900\n", + "12 AR6-RCP-8.5 #990002\n", + "13 AR5-RCP-2.6 #0000FF\n", + "14 AR5-RCP-4.5 #79BCFF\n", + "15 AR5-RCP-6.0 #FF822D\n", + "16 AR5-RCP-8.5 #FF0000" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pyam\n", + "import pandas as pd\n", + "\n", + "pd.DataFrame({'name': list(pyam.plotting.PYAM_COLORS.keys()), \n", + " 'color': list(pyam.plotting.PYAM_COLORS.values())})" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's pull out a few example scenarios from our tutorial dataset and plot them with defaults" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:Reading `tutorial_AR5_data.csv`\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "scenarios = ['AMPERE3-450', 'AMPERE3-RefPol']\n", + "\n", + "df = (\n", + " pyam.IamDataFrame(data='tutorial_AR5_data.csv', encoding='utf-8')\n", + " .filter(variable='Emissions|CO2', region='World', scenario=scenarios)\n", + ")\n", + "\n", + "df.line_plot(color='scenario')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As an example, let us say that each of these two scenario families correspond to scenarios in the AR6 context. We can utilize the specific colors by following two steps:\n", + "\n", + "1. Update `pyam.run_control()` telling it which metadata maps to which AR6 scenario color\n", + "2. Call `line_plot` using that meta data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Updating the run control\n", + "\n", + "We need to tell `pyam` that whenever it sees a certain `ar6-type`, it should use a specific color. We do this here in code, but it also works by specifying the mapping in a `yaml` config file." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "color_map = {\n", + " 'AMPERE3-450': 'AR6-SSP2-4.5', \n", + " 'AMPERE3-RefPol': 'AR6-SSP5-8.5',\n", + "}\n", + "\n", + "pyam.run_control().update({'color': {'scenario': color_map}})" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Use the new colors\n", + "\n", + "It's as simple as calling the plot function!" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df.line_plot(color='scenario')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pyam/plotting.py b/pyam/plotting.py index 485719834..9cefb3d83 100644 --- a/pyam/plotting.py +++ b/pyam/plotting.py @@ -49,6 +49,28 @@ 'bottom': dict(loc='upper center', bbox_to_anchor=(0.5, -0.2), ncol=3), } +PYAM_COLORS = { + 'AR6-SSP1-1.9': "#00AAD0", + 'AR6-SSP1-2.6': "#003466", + 'AR6-SSP2-4.5': "#EF550F", + 'AR6-SSP3-7.0': "#E00000", + 'AR6-SSP3-LowNTCF': "#E00000", + 'AR6-SSP4-3.4': "#FFA900", + 'AR6-SSP4-6.0': "#C47900", + 'AR6-SSP5-3.4-OS': "#7F006E", + 'AR6-SSP5-8.5': "#990002", + 'AR6-RCP-2.6': "#003466", + 'AR6-RCP-4.5': "#5492CD", + 'AR6-RCP-6.0': "#C47900", + 'AR6-RCP-8.5': "#990002", + # AR5 colours from + # https://tdaviesbarnard.co.uk/1202/ipcc-official-colors-rcp/ + 'AR5-RCP-2.6': "#0000FF", + 'AR5-RCP-4.5': "#79BCFF", + 'AR5-RCP-6.0': "#FF822D", + 'AR5-RCP-8.5': "#FF0000", +} + def reset_default_props(**kwargs): """Reset properties to initial cycle point""" @@ -110,6 +132,22 @@ def assign_style_props(df, color=None, marker=None, linestyle=None, props_for_kind[val] = next(defaults[kind]) props[kind] = props_for_kind + # update for special properties only if they exist in props + if 'color' in props: + d = props['color'] + values = list(d.values()) + # find if any colors in our properties corresponds with special colors + # we know about + overlap_idx = np.in1d(values, list(PYAM_COLORS.keys())) + if overlap_idx.any(): # some exist in our special set + keys = np.array(list(d.keys()))[overlap_idx] + values = np.array(values)[overlap_idx] + # translate each from pyam name, like AR6-SSP2-45 to proper color + # designation + for k, v in zip(keys, values): + d[k] = PYAM_COLORS[v] + # replace props with updated dict without special colors + props['color'] = d return props diff --git a/tests/expected_figs/test_add_panel_label.png b/tests/expected_figs/test_add_panel_label.png index 6854892ee..0ab14a68a 100644 Binary files a/tests/expected_figs/test_add_panel_label.png and b/tests/expected_figs/test_add_panel_label.png differ diff --git a/tests/expected_figs/test_bar_plot.png b/tests/expected_figs/test_bar_plot.png index 49922f413..8141b2ca9 100644 Binary files a/tests/expected_figs/test_bar_plot.png and b/tests/expected_figs/test_bar_plot.png differ diff --git a/tests/expected_figs/test_bar_plot_h.png b/tests/expected_figs/test_bar_plot_h.png index 8fa738c16..e7795ed5c 100644 Binary files a/tests/expected_figs/test_bar_plot_h.png and b/tests/expected_figs/test_bar_plot_h.png differ diff --git a/tests/expected_figs/test_bar_plot_rc.png b/tests/expected_figs/test_bar_plot_rc.png index 55596a205..39939ad62 100644 Binary files a/tests/expected_figs/test_bar_plot_rc.png and b/tests/expected_figs/test_bar_plot_rc.png differ diff --git a/tests/expected_figs/test_bar_plot_stacked.png b/tests/expected_figs/test_bar_plot_stacked.png index 5fad7b76f..7c6da3ff8 100644 Binary files a/tests/expected_figs/test_bar_plot_stacked.png and b/tests/expected_figs/test_bar_plot_stacked.png differ diff --git a/tests/expected_figs/test_bar_plot_stacked_net_line.png b/tests/expected_figs/test_bar_plot_stacked_net_line.png index 0daab1503..26778a22c 100644 Binary files a/tests/expected_figs/test_bar_plot_stacked_net_line.png and b/tests/expected_figs/test_bar_plot_stacked_net_line.png differ diff --git a/tests/expected_figs/test_bar_plot_title.png b/tests/expected_figs/test_bar_plot_title.png index 08c570a87..3a63eca35 100644 Binary files a/tests/expected_figs/test_bar_plot_title.png and b/tests/expected_figs/test_bar_plot_title.png differ diff --git a/tests/expected_figs/test_line_PYAM_COLORS.png b/tests/expected_figs/test_line_PYAM_COLORS.png new file mode 100644 index 000000000..283b160f6 Binary files /dev/null and b/tests/expected_figs/test_line_PYAM_COLORS.png differ diff --git a/tests/expected_figs/test_line_color.png b/tests/expected_figs/test_line_color.png index 4933e2be6..9fefa258a 100644 Binary files a/tests/expected_figs/test_line_color.png and b/tests/expected_figs/test_line_color.png differ diff --git a/tests/expected_figs/test_line_color_fill_between.png b/tests/expected_figs/test_line_color_fill_between.png index 45aca0584..1b07dd163 100644 Binary files a/tests/expected_figs/test_line_color_fill_between.png and b/tests/expected_figs/test_line_color_fill_between.png differ diff --git a/tests/expected_figs/test_line_color_fill_between_interpolate.png b/tests/expected_figs/test_line_color_fill_between_interpolate.png index b7c40b2a1..cf8a84ba9 100644 Binary files a/tests/expected_figs/test_line_color_fill_between_interpolate.png and b/tests/expected_figs/test_line_color_fill_between_interpolate.png differ diff --git a/tests/expected_figs/test_line_color_final_ranges.png b/tests/expected_figs/test_line_color_final_ranges.png index 3a38237a0..df057d189 100644 Binary files a/tests/expected_figs/test_line_color_final_ranges.png and b/tests/expected_figs/test_line_color_final_ranges.png differ diff --git a/tests/expected_figs/test_line_filter_title.png b/tests/expected_figs/test_line_filter_title.png index 4946a74f6..630a64dd9 100644 Binary files a/tests/expected_figs/test_line_filter_title.png and b/tests/expected_figs/test_line_filter_title.png differ diff --git a/tests/expected_figs/test_line_linestyle_legend.png b/tests/expected_figs/test_line_linestyle_legend.png index efad2bc78..f5f6b06eb 100644 Binary files a/tests/expected_figs/test_line_linestyle_legend.png and b/tests/expected_figs/test_line_linestyle_legend.png differ diff --git a/tests/expected_figs/test_line_marker_legend.png b/tests/expected_figs/test_line_marker_legend.png index 46279ac72..380dd561b 100644 Binary files a/tests/expected_figs/test_line_marker_legend.png and b/tests/expected_figs/test_line_marker_legend.png differ diff --git a/tests/expected_figs/test_line_no_legend.png b/tests/expected_figs/test_line_no_legend.png index 957d550ca..34a3816b9 100644 Binary files a/tests/expected_figs/test_line_no_legend.png and b/tests/expected_figs/test_line_no_legend.png differ diff --git a/tests/expected_figs/test_line_plot.png b/tests/expected_figs/test_line_plot.png index 0e4aca939..106daf9b0 100644 Binary files a/tests/expected_figs/test_line_plot.png and b/tests/expected_figs/test_line_plot.png differ diff --git a/tests/expected_figs/test_line_plot_1_var.png b/tests/expected_figs/test_line_plot_1_var.png index dba32618c..a12ea20fc 100644 Binary files a/tests/expected_figs/test_line_plot_1_var.png and b/tests/expected_figs/test_line_plot_1_var.png differ diff --git a/tests/expected_figs/test_line_plot_2_vars.png b/tests/expected_figs/test_line_plot_2_vars.png index d52147614..00c8b243d 100644 Binary files a/tests/expected_figs/test_line_plot_2_vars.png and b/tests/expected_figs/test_line_plot_2_vars.png differ diff --git a/tests/expected_figs/test_line_plot_bottom_legend.png b/tests/expected_figs/test_line_plot_bottom_legend.png index 42222bd3d..853a07a9a 100644 Binary files a/tests/expected_figs/test_line_plot_bottom_legend.png and b/tests/expected_figs/test_line_plot_bottom_legend.png differ diff --git a/tests/expected_figs/test_line_plot_dict_legend.png b/tests/expected_figs/test_line_plot_dict_legend.png index e5f81b384..931e764ed 100644 Binary files a/tests/expected_figs/test_line_plot_dict_legend.png and b/tests/expected_figs/test_line_plot_dict_legend.png differ diff --git a/tests/expected_figs/test_line_rm_legend_label.png b/tests/expected_figs/test_line_rm_legend_label.png index 2c4956942..32e64f5cf 100644 Binary files a/tests/expected_figs/test_line_rm_legend_label.png and b/tests/expected_figs/test_line_rm_legend_label.png differ diff --git a/tests/expected_figs/test_line_single_color.png b/tests/expected_figs/test_line_single_color.png index 626738f7e..cdecec006 100644 Binary files a/tests/expected_figs/test_line_single_color.png and b/tests/expected_figs/test_line_single_color.png differ diff --git a/tests/expected_figs/test_line_update_rc.png b/tests/expected_figs/test_line_update_rc.png index a0fded850..bc6899a59 100644 Binary files a/tests/expected_figs/test_line_update_rc.png and b/tests/expected_figs/test_line_update_rc.png differ diff --git a/tests/expected_figs/test_pie_plot_labels.png b/tests/expected_figs/test_pie_plot_labels.png index 28f9aa084..d9f5ddb2c 100644 Binary files a/tests/expected_figs/test_pie_plot_labels.png and b/tests/expected_figs/test_pie_plot_labels.png differ diff --git a/tests/expected_figs/test_pie_plot_legend.png b/tests/expected_figs/test_pie_plot_legend.png index fa2eec656..50576e9dc 100644 Binary files a/tests/expected_figs/test_pie_plot_legend.png and b/tests/expected_figs/test_pie_plot_legend.png differ diff --git a/tests/expected_figs/test_pie_plot_other.png b/tests/expected_figs/test_pie_plot_other.png index d876d6131..4e5a67ca6 100644 Binary files a/tests/expected_figs/test_pie_plot_other.png and b/tests/expected_figs/test_pie_plot_other.png differ diff --git a/tests/expected_figs/test_region.png b/tests/expected_figs/test_region.png index 29e7a1157..3a3732782 100644 Binary files a/tests/expected_figs/test_region.png and b/tests/expected_figs/test_region.png differ diff --git a/tests/expected_figs/test_region_cbar.png b/tests/expected_figs/test_region_cbar.png index e545749c7..7faaeaedc 100644 Binary files a/tests/expected_figs/test_region_cbar.png and b/tests/expected_figs/test_region_cbar.png differ diff --git a/tests/expected_figs/test_region_cbar_args.png b/tests/expected_figs/test_region_cbar_args.png index 1c3479db3..b30471889 100644 Binary files a/tests/expected_figs/test_region_cbar_args.png and b/tests/expected_figs/test_region_cbar_args.png differ diff --git a/tests/expected_figs/test_region_cmap.png b/tests/expected_figs/test_region_cmap.png index 7ce70d1b4..b7ee3b551 100644 Binary files a/tests/expected_figs/test_region_cmap.png and b/tests/expected_figs/test_region_cmap.png differ diff --git a/tests/expected_figs/test_region_crs.png b/tests/expected_figs/test_region_crs.png index a4b911598..0f6ba5a7b 100644 Binary files a/tests/expected_figs/test_region_crs.png and b/tests/expected_figs/test_region_crs.png differ diff --git a/tests/expected_figs/test_region_map_regions.png b/tests/expected_figs/test_region_map_regions.png index 0dab2907b..33065afd6 100644 Binary files a/tests/expected_figs/test_region_map_regions.png and b/tests/expected_figs/test_region_map_regions.png differ diff --git a/tests/expected_figs/test_region_map_regions_legend.png b/tests/expected_figs/test_region_map_regions_legend.png index 465088c6c..b17b149d3 100644 Binary files a/tests/expected_figs/test_region_map_regions_legend.png and b/tests/expected_figs/test_region_map_regions_legend.png differ diff --git a/tests/expected_figs/test_region_vmin_vmax.png b/tests/expected_figs/test_region_vmin_vmax.png index 7bf13a36f..87b562332 100644 Binary files a/tests/expected_figs/test_region_vmin_vmax.png and b/tests/expected_figs/test_region_vmin_vmax.png differ diff --git a/tests/expected_figs/test_scatter.png b/tests/expected_figs/test_scatter.png index 7b542a4c6..d883cf50f 100644 Binary files a/tests/expected_figs/test_scatter.png and b/tests/expected_figs/test_scatter.png differ diff --git a/tests/expected_figs/test_scatter_meta.png b/tests/expected_figs/test_scatter_meta.png index 8275f2bbe..dc977d60d 100644 Binary files a/tests/expected_figs/test_scatter_meta.png and b/tests/expected_figs/test_scatter_meta.png differ diff --git a/tests/expected_figs/test_scatter_variables_with_meta_color.png b/tests/expected_figs/test_scatter_variables_with_meta_color.png index 823453bdb..932ab568b 100644 Binary files a/tests/expected_figs/test_scatter_variables_with_meta_color.png and b/tests/expected_figs/test_scatter_variables_with_meta_color.png differ diff --git a/tests/expected_figs/test_scatter_with_lines.png b/tests/expected_figs/test_scatter_with_lines.png index 30ec948ba..2f25ba483 100644 Binary files a/tests/expected_figs/test_scatter_with_lines.png and b/tests/expected_figs/test_scatter_with_lines.png differ diff --git a/tests/expected_figs/test_stack_plot.png b/tests/expected_figs/test_stack_plot.png index 205c2b235..1bff69ad5 100644 Binary files a/tests/expected_figs/test_stack_plot.png and b/tests/expected_figs/test_stack_plot.png differ diff --git a/tests/expected_figs/test_stack_plot_other.png b/tests/expected_figs/test_stack_plot_other.png index ee3453b37..7cb945eca 100644 Binary files a/tests/expected_figs/test_stack_plot_other.png and b/tests/expected_figs/test_stack_plot_other.png differ diff --git a/tests/test_plotting.py b/tests/test_plotting.py index 5c71444a5..837440c3e 100644 --- a/tests/test_plotting.py +++ b/tests/test_plotting.py @@ -3,15 +3,18 @@ import os import copy import numpy as np +import pandas as pd import pyam - +import warnings # on CI, freetype version 2.6.1 works, but 2.8.0 does not # if we want to move to 2.8.0, then we will need to regenerate images FREETYPE_VERSION = matplotlib.ft2font.__freetype_version__ -if int(FREETYPE_VERSION.replace('.', '')) > 261: - pytest.skip('Freetype version > 2.6.1: {}'.format(FREETYPE_VERSION), - allow_module_level=True) +if int(FREETYPE_VERSION.replace('.', '')) < 291: + msg = 'Freetype version < 2.9.1: {}'.format(FREETYPE_VERSION) + warnings.warn('test_plotting.py is being skipped due to a ' + 'Freetype Version mismatch: {}'.format(msg)) + pytest.skip(msg, allow_module_level=True) try: import cartopy @@ -82,6 +85,31 @@ def test_line_color(plot_df): return fig +@pytest.mark.mpl_image_compare(**MPL_KWARGS) +def test_line_PYAM_COLORS(plot_df): + # add a family of lines for each color in plotting.PYAM_COLORS separated by + # a small offset + update = {'color': {'model': {}}} + _df = plot_df.filter( + model='test_model', + variable='Primary Energy', + scenario='test_scenario1', + ).data.copy() + dfs = [] + for i, color in enumerate(plotting.PYAM_COLORS): + df = _df.copy() + model = color + df['model'] = model + df['value'] += i + update['color']['model'][model] = color + dfs.append(df) + df = pyam.IamDataFrame(pd.concat(dfs)) + fig, ax = plt.subplots(figsize=(8, 8)) + with update_run_control(update): + df.line_plot(ax=ax, color='model', legend=True) + return fig + + @pytest.mark.mpl_image_compare(**MPL_KWARGS) def test_line_color_fill_between(plot_df): fig, ax = plt.subplots(figsize=(8, 8)) diff --git a/tests/test_tutorials.py b/tests/test_tutorials.py index 13b7b4b79..955f656b9 100644 --- a/tests/test_tutorials.py +++ b/tests/test_tutorials.py @@ -89,3 +89,11 @@ def test_iiasa_dbs(): fname = os.path.join(tut_path, 'iiasa_dbs.ipynb') nb, errors = _notebook_run(fname) assert errors == [] + + +@pytest.mark.skipif(not jupyter_installed, reason=jupyter_reason) +@pytest.mark.skipif(not pandoc_installed, reason=pandoc_reason) +def test_ipcc_colors(): + fname = os.path.join(tut_path, 'ipcc_colors.ipynb') + nb, errors = _notebook_run(fname) + assert errors == []