diff --git a/joss.07120/10.21105.joss.07120.crossref.xml b/joss.07120/10.21105.joss.07120.crossref.xml new file mode 100644 index 0000000000..6680679827 --- /dev/null +++ b/joss.07120/10.21105.joss.07120.crossref.xml @@ -0,0 +1,312 @@ + + + + 20241029155315-17ce4e252d45044771d1811301235f88c23ab6a3 + 20241029155315 + + JOSS Admin + admin@theoj.org + + The Open Journal + + + + + Journal of Open Source Software + JOSS + 2475-9066 + + 10.21105/joss + https://joss.theoj.org + + + + + 10 + 2024 + + + 9 + + 102 + + + + colorspace: A Python Toolbox for Manipulating and +Assessing Colors and Palettes + + + + Reto + Stauffer + + Department of Statistics, Universität Innsbruck, Austria + Digital Science Center, Universität Innsbruck, Austria + + https://orcid.org/0000-0002-3798-5507 + + + Achim + Zeileis + + Department of Statistics, Universität Innsbruck, Austria + + https://orcid.org/0000-0003-0918-3766 + + + + 10 + 29 + 2024 + + + 7120 + + + 10.21105/joss.07120 + + + http://creativecommons.org/licenses/by/4.0/ + http://creativecommons.org/licenses/by/4.0/ + http://creativecommons.org/licenses/by/4.0/ + + + + Software archive + 10.5281/zenodo.14004295 + + + GitHub review issue + https://github.com/openjournals/joss-reviews/issues/7120 + + + + 10.21105/joss.07120 + https://joss.theoj.org/papers/10.21105/joss.07120 + + + https://joss.theoj.org/papers/10.21105/joss.07120.pdf + + + + + + Envisioning information + Tufte + 1990 + Tufte, E. (1990). Envisioning +information. Graphics Press. + + + Color use guidelines for data +representation + Brewer + Proceedings of the section on statistical +graphics, american statistical association + 1999 + Brewer, C. A. (1999). Color use +guidelines for data representation. Proceedings of the Section on +Statistical Graphics, American Statistical Association, +55–60. + + + Color + Ware + Information visualization: Perception for +design + 2004 + Ware, C. (2004). Color. In +Information visualization: Perception for design (pp. 103–149). Morgan +Kaufmann Publishers Inc. + + + Fundamentals of data +visualization + Wilke + 1492031089 + 2019 + Wilke, C. O. (2019). Fundamentals of +data visualization. O’Reilly Media. +ISBN: 1492031089 + + + The misuse of colour in science +communication + Crameri + Nature Communications + 5444 + 11 + 10.1038/s41467-020-19160-7 + 2020 + Crameri, F., Shephard, G. E., & +Heron, P. J. (2020). The misuse of colour in science communication. +Nature Communications, 11(5444), 1–10. +https://doi.org/10.1038/s41467-020-19160-7 + + + colorspace: A toolbox for manipulating and +assessing colors and palettes + Zeileis + Journal of Statistical +Software + 1 + 96 + 10.18637/jss.v096.i01 + 2020 + Zeileis, A., Fisher, J. C., Hornik, +K., Ihaka, R., McWhite, C., Murrell, P., Stauffer, R., & Wilke, C. +O. (2020). colorspace: A toolbox for manipulating and assessing colors +and palettes. Journal of Statistical Software, 96(1), 1–49. +https://doi.org/10.18637/jss.v096.i01 + + + What’s new in matplotlib 2.0, changes to the +default style + Hunter + 2017 + Hunter, J. D., Dale, D., Firing, E., +Droettboom, M., & the Matplotlib Development Team. (2017). What’s +new in matplotlib 2.0, changes to the default style. +https://matplotlib.org/stable/users/prev_whats_new/dflt_style_changes.html + + + Colour for presentation +graphics + Ihaka + Proceedings of the 3rd international workshop +on distributed statistical computing, vienna, austria + 2003 + Ihaka, R. (2003). Colour for +presentation graphics. In K. Hornik, F. Leisch, & A. Zeileis (Eds.), +Proceedings of the 3rd international workshop on distributed statistical +computing, vienna, austria. +https://www.R-project.org/conferences/DSC-2003/Proceedings/Ihaka.pdf + + + A physiologically-based model for simulation +of color vision deficiency + Machado + IEEE Transactions on Visualization and +Computer Graphics + 6 + 15 + 10.1109/tvcg.2009.113 + 2009 + Machado, G. M., Oliviera, M. M., +& Fernandes, L. A. F. (2009). A physiologically-based model for +simulation of color vision deficiency. IEEE Transactions on +Visualization and Computer Graphics, 15(6), 1291–1298. +https://doi.org/10.1109/tvcg.2009.113 + + + Matplotlib: A 2D graphics +environment + Hunter + Computing in Science & +Engineering + 3 + 9 + 10.1109/mcse.2007.55 + 2007 + Hunter, J. D. (2007). Matplotlib: A +2D graphics environment. Computing in Science & Engineering, 9(3), +90–95. https://doi.org/10.1109/mcse.2007.55 + + + seaborn: Statistical data +visualization + Waskom + Journal of Open Source +Software + 60 + 6 + 10.21105/joss.03021 + 2021 + Waskom, M. L. (2021). seaborn: +Statistical data visualization. Journal of Open Source Software, 6(60), +3021. https://doi.org/10.21105/joss.03021 + + + pandas-Dev/Pandas: pandas + The Pandas Development Team + 10.5281/zenodo.10957263 + 2024 + The Pandas Development Team. (2024). +pandas-Dev/Pandas: pandas (Version v2.2.2). Zenodo. +https://doi.org/10.5281/zenodo.10957263 + + + Imageio/imageio + Klein + 10.5281/zenodo.12514964 + 2024 + Klein, A., Wallkötter, S., Silvester, +S., Rynes, A., actions-user, Müller, P., Nunez-Iglesias, J., Harfouche, +M., Schrangl, L., Dennis, Lee, A., Pandede, McCormick, M., +OrganicIrradiation, Rai, A., Ladegaard, A., van Kemenade, H., Smith, T. +D., Vaillant, G., … Singleton, J. (2024). Imageio/imageio (Version +v2.34.2). Zenodo. +https://doi.org/10.5281/zenodo.12514964 + + + Array programming with NumPy + Harris + Nature + 7825 + 585 + 10.1038/s41586-020-2649-2 + 2020 + Harris, C. R., Millman, K. J., van +der Walt, S. J., Gommers, R., Virtanen, P., Cournapeau, D., Wieser, E., +Taylor, J., Berg, S., Smith, N. J., Kern, R., Picus, M., Hoyer, S., van +Kerkwijk, M. H., Brett, M., Haldane, A., del Río, J. F., Wiebe, M., +Peterson, P., … Oliphant, T. E. (2020). Array programming with NumPy. +Nature, 585(7825), 357–362. +https://doi.org/10.1038/s41586-020-2649-2 + + + Colormap + Cokelaer + 2024 + Cokelaer, T. (2024). Colormap +(Version v1.1.0). Python Package Index (PyPI). +https://pypi.org/project/colormap/ + + + Colormaps + Patel + 2024 + Patel, P. (2024). Colormaps (Version +v0.4.2). Python Package Index (PyPI). +https://pypi.org/project/colormaps/ + + + palettable: Color palettes for +Python + Davis + 2023 + Davis, M. (2023). palettable: Color +palettes for Python (Version v3.3.3). Python Package Index (PyPI). +https://pypi.org/project/palettable/ + + + cmcrameri: Python wrapper around Fabio +Crameri’s perceptually uniform colormaps + Rollo + 2024 + Rollo, C. (2024). cmcrameri: Python +wrapper around Fabio Crameri’s perceptually uniform colormaps (Version +v1.9). Python Package Index (PyPI). +https://pypi.org/project/cmcrameri/ + + + + + + diff --git a/joss.07120/10.21105.joss.07120.pdf b/joss.07120/10.21105.joss.07120.pdf new file mode 100644 index 0000000000..fc01664346 Binary files /dev/null and b/joss.07120/10.21105.joss.07120.pdf differ diff --git a/joss.07120/paper.jats/10.21105.joss.07120.jats b/joss.07120/paper.jats/10.21105.joss.07120.jats new file mode 100644 index 0000000000..eae1813ffb --- /dev/null +++ b/joss.07120/paper.jats/10.21105.joss.07120.jats @@ -0,0 +1,701 @@ + + +
+ + + + +Journal of Open Source Software +JOSS + +2475-9066 + +Open Journals + + + +7120 +10.21105/joss.07120 + +colorspace: A Python Toolbox for Manipulating and +Assessing Colors and Palettes + + + +https://orcid.org/0000-0002-3798-5507 + +Stauffer +Reto + + + + + +https://orcid.org/0000-0003-0918-3766 + +Zeileis +Achim + + + + + +Department of Statistics, Universität Innsbruck, +Austria + + + + +Digital Science Center, Universität Innsbruck, +Austria + + + + +28 +10 +2024 + +9 +102 +7120 + +Authors of papers retain copyright and release the +work under a Creative Commons Attribution 4.0 International License (CC +BY 4.0) +2022 +The article authors + +Authors of papers retain copyright and release the work under +a Creative Commons Attribution 4.0 International License (CC BY +4.0) + + + +Python +color palettes +color vision +visualization +assesment + + + + + + Summary +

The Python colorspace package provides a toolbox + for mapping between different color spaces, which can then be used to + generate a wide range of perceptually-based color palettes for + qualitative or quantitative (sequential or diverging) information. + These palettes (as well as any other sets of colors) can be + visualized, assessed, and manipulated in various ways, e.g., by color + swatches, emulating the effects of color vision deficiencies, or + depicting the perceptual properties. Finally, + colorspace integrates seamlessly with standard Python + graphics packages like matplotlib, + seaborn, and plotly, making it a + valuable resource for both developers and practitioners to customize, + assess, and implement color palettes in their data visualization + workflows.

+
+ + Statement of need +

Color is an integral element of visualizations and graphics and is + essential for communicating (scientific) information. However, colors + need to be chosen carefully so that they support the information + displayed for all viewers (see e.g., + Tufte, + 1990; + Ware, + 2004; + Wilke, + 2019). Therefore, suitable color palettes have been proposed in + the literature (e.g., + Brewer, + 1999; + Crameri + et al., 2020; + Ihaka, + 2003) and many software packages transitioned to better color + defaults over the last decade. A prominent example from the Python + community is matplotlib 2.0 + (Hunter + et al., 2017), which replaced the classic “jet” palette (a + variation of the infamous “rainbow”) by the perceptually-based + “viridis” palette. Hence a wide range of useful palettes for different + purposes is provided in a number of Python packages today, including + cmcramery + (Rollo, + 2024), colormap + (Cokelaer, + 2024), colormaps + (Patel, + 2024), matplotlib + (Hunter, + 2007), palettable + (Davis, + 2023), and seaborn + (Waskom, + 2021).

+

However, colors are provided as a fixed set in most graphics + packages. While this makes it easy to use them in different + applications, it is usually not easy to modify the perceptual + properties or to set up new palettes following the same principles. + The colorspace package addresses this by supporting + color descriptions using different color spaces (hence the package + name), including some that are based on human color perception. One + notable example is the Hue-Chroma-Luminance (HCL) model, which + represents colors by coordinates on three perceptually-based axes: hue + (type of color), chroma (colorfulness), and luminance (brightness). + Selecting colors along paths along these axes allows for intuitive + construction of palettes that closely match many of the palettes + provided in the packages listed above.

+

In addition to functions and interactive apps for HCL-based colors, + the colorspace package also offers functions and + classes for handling, transforming, and visualizing color palettes + (from any source). In particular, this includes the simulation of + color vision deficiencies + (Machado + et al., 2009) but also contrast ratios, desaturation, + lightening/darkening, etc.

+

The colorspace Python package was inspired by the + eponymous R package + (Zeileis + et al., 2020). It comes with extensive documentation at + https://retostauffer.github.io/python-colorspace/, + including many practical examples. The package complements existing + graphics packages in Python both for casual users and data + visualization experts. Selected highlights are presented in the + following, motivating its usefulness for various kinds of graphics in + different fields of application and research.

+
+ + Key functionality + + HCL-based color palettes +

The key functions and classes for constructing color palettes + using hue-chroma-luminance paths (and then mapping these to hex + codes) are:

+ + +

qualitative_hcl: For qualitative or + unordered categorical information, where every color should + receive a similar perceptual weight.

+
+ +

sequential_hcl: For ordered/numeric + information from high to low (or vice versa).

+
+ +

diverging_hcl: For ordered/numeric + information around a central neutral value, where colors diverge + from neutral to two extremes.

+
+
+

These functions provide a range of named palettes inspired by + well-established packages but actually implemented using HCL paths. + Additionally, the HCL parameters can be modified or new palettes can + be created from scratch.

+

As an example, + [fig:chosingpalettes] + depicts color swatches for four viridis variations. The first, + pal1, sets up the palette from its name. It + is identical to the second, pal2, which + employes the HCL specification directly: the hue ranges from purple + (300) to yellow (75), colorfulness (chroma) increases from 40 to 95, + and luminance (brightness) from dark (15) to light (90). The + power parameter chooses a linear change in + chroma and a slightly nonlinear path for luminance.

+

In pal3 and pal4, + the most HCL properties are kept the same but some are modified: + pal3 uses a triangular chroma path from 40 + via 90 to 20, yielding muted colors at the end of the palette. + pal4 just changes the starting hue for the + palette to green (200) instead of purple. All four palettes are + visualized by the swatchplot function from + the package.

+ +

Swatches of four HCL-based sequential palettes: + pal1 is the predefined HCL-based viridis + palette, pal2 is identical to + pal2 but created “by hand” and + pal3 and pal4 are + modified versions with a triangular chroma paths and reduced hue + range, + respectively.

+ +
+

The objects returned by the palette functions provide a series of + methods, e.g., pal1.settings for displaying + the HCL parameters, pal1(3) for obtaining a + number of hex colors, or pal1.cmap() for + setting up a matplotlib color map, among + others.

+ from colorspace import palette, sequential_hcl, swatchplot +pal1 = sequential_hcl(palette = "viridis") +pal2 = sequential_hcl(h = [300, 75], c = [40, 95], l = [15, 90], + power = [1., 1.1]) +pal3 = sequential_hcl(palette = "viridis", cmax = 90, c2 = 20) +pal4 = sequential_hcl(palette = "viridis", h1 = 200) +swatchplot({"Viridis (and altered versions of it)": [ + palette(pal1(7), "By name"), + palette(pal2(7), "By hand"), + palette(pal3(7), "With triangular chroma"), + palette(pal4(7), "With smaller hue range") + ]}, figsize = (8, 1.75)); +

An overview of the named HCL-based palettes in + colorspace is depicted in + [fig-hcl-palettes].

+ from colorspace import hcl_palettes +hcl_palettes(plot = True, figsize = (20, 15)) + +

Overview of the predefined (fully customizable) HCL + color + palettes.

+ +
+
+ + Palette visualization and assessment +

To better understand the properties of palette + pal4, defined above, + [fig:specplothclplot] + shows its HCL spectrum (left) with separate lines for the hue, + chroma, and luminance coordinates and the corresponding path through + the three-dimensional HCL space (right) where hue co-varies along + with chroma and luminance.

+ +

Hue-chroma-luminance spectrum plot (left) and + corresponding path in the chroma-luminance coordinate system + (where hue changes with luminance) for the custom sequential + palette + pal4.

+ +
+

The spectrum in the first panel shows how the hue (right axis) + changes from about 200 (green) to 75 (yellow), while chroma and + luminance (left axis) increase from about 20 to 95. Note that the + kink in the chroma curve for the greenish colors occurs because such + dark greens cannot have higher chromas when represented through + RGB-based hex codes. The same is visible in the second panel where + the path moves along the outer edge of the HCL space.

+ pal4.specplot(figsize = (5, 5)); +pal4.hclplot(n = 7, figsize = (5, 5)); +
+ + Color vision deficiency +

Another important assessment of a color palette is how well it + works for viewers with color vision deficiencies. This is + exemplified in [fig-cvd], + which depicts a demo plot (heatmap) under “normal” vision (left), + deuteranomaly (colloquially known as “red-green color blindness”, + center), and desaturated (gray scale, right). The palette in the top + row is the traditional fully-saturated RGB rainbow, deliberately + selected here as a palette with poor perceptual properties. It is + contrasted with a perceptually-based sequential blue-yellow HCL + palette in the bottom row.

+

The sequential HCL palette is monotonic in luminance so that it + is easy to distinguish high-density and low-density regions under + deuteranomaly and desaturation. However, the rainbow is + non-monotonic in luminance and parts of the red-green contrasts + collapse under deuteranomaly, making it much harder to interpret + correctly.

+ from colorspace import rainbow, sequential_hcl +col1 = rainbow(end = 2/3, rev = True)(7) +col2 = sequential_hcl("Blue-Yellow", rev = True)(7) + +from colorspace import demoplot, deutan, desaturate +import matplotlib.pyplot as plt +fig, ax = plt.subplots(2, 3, figsize = (9, 4)) +demoplot(col1, "Heatmap", ax = ax[0,0], ylabel = "Rainbow", title = "Original") +demoplot(col2, "Heatmap", ax = ax[1,0], ylabel = "HCL (Blue-Yellow)") +demoplot(deutan(col1), "Heatmap", ax = ax[0,1], title = "Deuteranope") +demoplot(deutan(col2), "Heatmap", ax = ax[1,1]) +demoplot(desaturate(col1), "Heatmap", ax = ax[0,2], title = "Desaturated") +demoplot(desaturate(col2), "Heatmap", ax = ax[1,2]) +plt.show() + +

Example of color vision deficiency emulation and color + manipulation using a heatmap. Top/bottom: RGB rainbow based + palette and HCL based sequential palette. Left to right: Original + colors, deuteranope color vision, and desaturated + representation.

+ +
+
+ + Integration with Python graphics packages +

To illustrate that colorspace can be easily + combined with different graphics workflows in Python, + [fig-plotting] + shows a heatmap (two-dimensional histogram) from + matplotlib and multi-group density from + seaborn. The code below employs an example data set + from the package (using pandas) with daily maximum + and minimum temperature. For matplotlib the + colormap (.cmap(); + LinearSegmentedColormap) is extracted from + the adapted viridis palette pal3 defined + above. For seaborn the hex codes from a custom + qualitative palette are extracted via + .colors(4).

+ from colorspace import dataset, qualitative_hcl +import matplotlib.pyplot as plt +import seaborn as sns + +df = dataset("HarzTraffic") + +fig = plt.hist2d(df.tempmin, df.tempmax, bins = 20, + cmap = pal3.cmap().reversed()) +plt.title("Joint density daily min/max temperature") +plt.xlabel("minimum temperature [deg C]") +plt.ylabel("maximum temperature [deg C]") +plt.show() + +pal = qualitative_hcl("Dark 3", h1 = -180, h2 = 100) +g = sns.displot(data = df, x = "tempmax", hue = "season", fill = "season", + kind = "kde", rug = True, height = 4, aspect = 1, + palette = pal.colors(4)) +g.set_axis_labels("temperature [deg C]") +g.set(title = "Distribution of daily maximum temperature given season") +plt.show() + +

Example of a matplotlib heatmap + and a seaborn density using custom + HCL-based + colors.

+ +
+
+
+ + Dependencies and availability +

The colorspace package is available from PyPI at + https://pypi.org/project/colorspace. + It is designed to be lightweight, requiring only + numpy + (Harris + et al., 2020) for the core functionality. Only a few features + rely on matplotlib, imageio + (Klein + et al., 2024), and pandas + (The + Pandas Development Team, 2024). More information and an + interactive interface can be found on + https://hclwizard.org/. + Package development is hosted on GitHub at + https://github.com/retostauffer/python-colorspace. + Bug reports, code contributions, and feature requests are warmly + welcome.

+
+ + + + + + + + TufteEdward + + Envisioning information + Graphics Press + Cheshire + 1990 + + + + + + BrewerCynthia A. + + Color use guidelines for data representation + Proceedings of the section on statistical graphics, american statistical association + Alexandria, VA + 1999 + 55 + 60 + + + + + + WareColin + + Color + Information visualization: Perception for design + Morgan Kaufmann Publishers Inc. + 2004 + 103 + 149 + + + + + + WilkeClaus O. + + Fundamentals of data visualization + O’Reilly Media + 2019 + 1492031089 + https://clauswilke.com/dataviz/color-basics.html + + + + + + CrameriFabio + ShephardGrace E. + HeronPhilip J. + + The misuse of colour in science communication + Nature Communications + 2020 + 11 + 5444 + 10.1038/s41467-020-19160-7 + 1 + 10 + + + + + + ZeileisAchim + FisherJason C. + HornikKurt + IhakaRoss + McWhiteClaire + MurrellPaul + StaufferReto + WilkeClaus O. + + colorspace: A toolbox for manipulating and assessing colors and palettes + Journal of Statistical Software + 2020 + 96 + 1 + 10.18637/jss.v096.i01 + 1 + 49 + + + + + + HunterJohn D. + DaleDarren + FiringEric + DroettboomMichael + the Matplotlib Development Team + + What’s new in matplotlib 2.0, changes to the default style + 2017 + https://matplotlib.org/stable/users/prev_whats_new/dflt_style_changes.html + + + + + + IhakaRoss + + Colour for presentation graphics + Proceedings of the 3rd international workshop on distributed statistical computing, vienna, austria + + HornikKurt + LeischFriedrich + ZeileisAchim + + 2003 + https://www.R-project.org/conferences/DSC-2003/Proceedings/Ihaka.pdf + + + + + + MachadoGustavo M. + OlivieraManuel M. + FernandesLeandro A. F. + + A physiologically-based model for simulation of color vision deficiency + IEEE Transactions on Visualization and Computer Graphics + 2009 + 15 + 6 + 10.1109/tvcg.2009.113 + 1291 + 1298 + + + + + + HunterJohn D. + + Matplotlib: A 2D graphics environment + Computing in Science & Engineering + IEEE: Computing in Science & Engineering + 2007 + 9 + 3 + 10.1109/mcse.2007.55 + 90 + 95 + + + + + + WaskomMichael L. + + seaborn: Statistical data visualization + Journal of Open Source Software + The Open Journal + 2021 + 6 + 60 + 10.21105/joss.03021 + 3021 + + + + + + + The Pandas Development Team + + pandas-Dev/Pandas: pandas + Zenodo + 2024 + 10.5281/zenodo.10957263 + + + + + + KleinAlmar + WallkötterSebastian + SilvesterSteven + RynesAnthony + actions-user + MüllerPaul + Nunez-IglesiasJuan + HarfoucheMark + SchranglLukas + Dennis + LeeAntony + Pandede + McCormickMatt + OrganicIrradiation + RaiArash + LadegaardAriel + van KemenadeHugo + SmithTim D. + VaillantGhislain + jackwalker64 + NisesJoel + KomarčevičMiloš + rreilink + BarnesChris + Zulko + HsiehPo-Chuan + RosensteinNiklas + G’ornyMichał + scivision + SingletonJoe + + Imageio/imageio + Zenodo + 2024 + 10.5281/zenodo.12514964 + + + + + + HarrisCharles R. + MillmanK. Jarrod + van der WaltStéfan J. + GommersRalf + VirtanenPauli + CournapeauDavid + WieserEric + TaylorJulian + BergSebastian + SmithNathaniel J. + KernRobert + PicusMatti + HoyerStephan + van KerkwijkMarten H. + BrettMatthew + HaldaneAllan + del RíoJaime Fernández + WiebeMark + PetersonPearu + Gérard-MarchantPierre + SheppardKevin + ReddyTyler + WeckesserWarren + AbbasiHameer + GohlkeChristoph + OliphantTravis E. + + Array programming with NumPy + Nature + Springer Science; Business Media LLC + 202009 + 585 + 7825 + 10.1038/s41586-020-2649-2 + 357 + 362 + + + + + + CokelaerThomas + + Colormap + Python Package Index (PyPI) + 20240428 + https://pypi.org/project/colormap/ + + + + + + PatelPratiman + + Colormaps + Python Package Index (PyPI) + 20240704 + https://pypi.org/project/colormaps/ + + + + + + DavisMatt + + palettable: Color palettes for Python + Python Package Index (PyPI) + 20230420 + https://pypi.org/project/palettable/ + + + + + + RolloCallum + + cmcrameri: Python wrapper around Fabio Crameri’s perceptually uniform colormaps + Python Package Index (PyPI) + 20240422 + https://pypi.org/project/cmcrameri/ + + + + +
diff --git a/joss.07120/paper.jats/fig-chosing-palettes.png b/joss.07120/paper.jats/fig-chosing-palettes.png new file mode 100644 index 0000000000..883249bec1 Binary files /dev/null and b/joss.07120/paper.jats/fig-chosing-palettes.png differ diff --git a/joss.07120/paper.jats/fig-cvd.png b/joss.07120/paper.jats/fig-cvd.png new file mode 100644 index 0000000000..341783dec6 Binary files /dev/null and b/joss.07120/paper.jats/fig-cvd.png differ diff --git a/joss.07120/paper.jats/fig-hcl-palettes.png b/joss.07120/paper.jats/fig-hcl-palettes.png new file mode 100644 index 0000000000..d8bdbb11e1 Binary files /dev/null and b/joss.07120/paper.jats/fig-hcl-palettes.png differ diff --git a/joss.07120/paper.jats/fig-plotting.png b/joss.07120/paper.jats/fig-plotting.png new file mode 100644 index 0000000000..147edba619 Binary files /dev/null and b/joss.07120/paper.jats/fig-plotting.png differ diff --git a/joss.07120/paper.jats/fig-specplot-hclplot.png b/joss.07120/paper.jats/fig-specplot-hclplot.png new file mode 100644 index 0000000000..f1e7a8bb12 Binary files /dev/null and b/joss.07120/paper.jats/fig-specplot-hclplot.png differ