diff --git a/.coverage b/.coverage
new file mode 100644
index 000000000..e044fd1e2
Binary files /dev/null and b/.coverage differ
diff --git a/.gitignore b/.gitignore
index b205da2d6..4ee7d5139 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,16 +18,18 @@ dist
# Local docs builds
docs/api
-docs/_build
+docs/_build/*
docs/_static/ultraplotrc
docs/_static/rctable.rst
docs/_static/*
+docs/gallery/*
# Development subfolders
dev
sources
# Python extras
+*.ipynb
.ipynb_checkpoints
*.log
*.pyc
diff --git a/.gitignore.rej b/.gitignore.rej
new file mode 100644
index 000000000..539e316ec
--- /dev/null
+++ b/.gitignore.rej
@@ -0,0 +1,21 @@
+diff a/.gitignore b/.gitignore (rejected hunks)
+@@ -18,16 +18,18 @@ dist
+
+ # Local docs builds
+ docs/api
+-docs/_build
++docs/_build/*
+ docs/_static/ultraplotrc
+ docs/_static/rctable.rst
+ docs/_static/*
++docs/gallery/*
+
+ # Development subfolders
+ dev
+ sources
+
+ # Python extras
++*.ipynb
+ .ipynb_checkpoints
+ *.log
+ *.pyc
diff --git a/.mplconfig/fontlist-v390.json b/.mplconfig/fontlist-v390.json
new file mode 100644
index 000000000..a513cf2c6
--- /dev/null
+++ b/.mplconfig/fontlist-v390.json
@@ -0,0 +1,6624 @@
+{
+ "_version": 390,
+ "_FontManager__default_weight": "normal",
+ "default_size": null,
+ "defaultFamily": {
+ "ttf": "DejaVu Sans",
+ "afm": "Helvetica"
+ },
+ "afmlist": [
+ {
+ "fname": "fonts/afm/cmmi10.afm",
+ "name": "Computer Modern",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/phvb8an.afm",
+ "name": "Helvetica",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "bold",
+ "stretch": "condensed",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/cmsy10.afm",
+ "name": "Computer Modern",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/pbkd8a.afm",
+ "name": "ITC Bookman",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "demi",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/ptmri8a.afm",
+ "name": "Times",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/pagk8a.afm",
+ "name": "ITC Avant Garde Gothic",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "book",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/putri8a.afm",
+ "name": "Utopia",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "regular",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/pbkl8a.afm",
+ "name": "ITC Bookman",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "light",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/pplr8a.afm",
+ "name": "Palatino",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "roman",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/pagdo8a.afm",
+ "name": "ITC Avant Garde Gothic",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "demi",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/pdfcorefonts/ZapfDingbats.afm",
+ "name": "ZapfDingbats",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/pdfcorefonts/Courier-Oblique.afm",
+ "name": "Courier",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/pbkdi8a.afm",
+ "name": "ITC Bookman",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "demi",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/pcrbo8a.afm",
+ "name": "Courier",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "bold",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/ptmr8a.afm",
+ "name": "Times",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "roman",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/pncb8a.afm",
+ "name": "New Century Schoolbook",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "bold",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/phvro8a.afm",
+ "name": "Helvetica",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/pncri8a.afm",
+ "name": "New Century Schoolbook",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/phvb8a.afm",
+ "name": "Helvetica",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "bold",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/putb8a.afm",
+ "name": "Utopia",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "bold",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/phvbo8an.afm",
+ "name": "Helvetica",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "bold",
+ "stretch": "condensed",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/pdfcorefonts/Courier-BoldOblique.afm",
+ "name": "Courier",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "bold",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/pncbi8a.afm",
+ "name": "New Century Schoolbook",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "bold",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/pbkli8a.afm",
+ "name": "ITC Bookman",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "light",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/cmr10.afm",
+ "name": "Computer Modern",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/pdfcorefonts/Times-Italic.afm",
+ "name": "Times",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/pdfcorefonts/Times-Roman.afm",
+ "name": "Times",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "roman",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/pagko8a.afm",
+ "name": "ITC Avant Garde Gothic",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "book",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/pplri8a.afm",
+ "name": "Palatino",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/pplb8a.afm",
+ "name": "Palatino",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "bold",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/pdfcorefonts/Helvetica.afm",
+ "name": "Helvetica",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/pdfcorefonts/Times-Bold.afm",
+ "name": "Times",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "bold",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/psyr.afm",
+ "name": "Symbol",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/pdfcorefonts/Courier.afm",
+ "name": "Courier",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/phvro8an.afm",
+ "name": "Helvetica",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "condensed",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/pcrr8a.afm",
+ "name": "Courier",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/pplbi8a.afm",
+ "name": "Palatino",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "bold",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/pncr8a.afm",
+ "name": "New Century Schoolbook",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "roman",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/phvr8an.afm",
+ "name": "Helvetica",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "condensed",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/pcrb8a.afm",
+ "name": "Courier",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "bold",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/phvlo8a.afm",
+ "name": "Helvetica",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "light",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/pagd8a.afm",
+ "name": "ITC Avant Garde Gothic",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "demi",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/pdfcorefonts/Symbol.afm",
+ "name": "Symbol",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/pdfcorefonts/Courier-Bold.afm",
+ "name": "Courier",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "bold",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/putbi8a.afm",
+ "name": "Utopia",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "bold",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/pdfcorefonts/Times-BoldItalic.afm",
+ "name": "Times",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "bold",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/pzdr.afm",
+ "name": "ITC Zapf Dingbats",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/pdfcorefonts/Helvetica-BoldOblique.afm",
+ "name": "Helvetica",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "bold",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/putr8a.afm",
+ "name": "Utopia",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "regular",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/pcrro8a.afm",
+ "name": "Courier",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/phvbo8a.afm",
+ "name": "Helvetica",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "bold",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/pzcmi8a.afm",
+ "name": "ITC Zapf Chancery",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/phvl8a.afm",
+ "name": "Helvetica",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "light",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/ptmbi8a.afm",
+ "name": "Times",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "bold",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/cmtt10.afm",
+ "name": "Computer Modern",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/pdfcorefonts/Helvetica-Bold.afm",
+ "name": "Helvetica",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "bold",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/ptmb8a.afm",
+ "name": "Times",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "bold",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/pdfcorefonts/Helvetica-Oblique.afm",
+ "name": "Helvetica",
+ "style": "italic",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/cmex10.afm",
+ "name": "Computer Modern",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/afm/phvr8a.afm",
+ "name": "Helvetica",
+ "style": "normal",
+ "variant": "normal",
+ "weight": "medium",
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ }
+ ],
+ "ttflist": [
+ {
+ "fname": "fonts/ttf/cmr10.ttf",
+ "name": "cmr10",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/DejaVuSerif.ttf",
+ "name": "DejaVu Serif",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/DejaVuSerifDisplay.ttf",
+ "name": "DejaVu Serif Display",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/DejaVuSansMono.ttf",
+ "name": "DejaVu Sans Mono",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/STIXSizFourSymBol.ttf",
+ "name": "STIXSizeFourSym",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/cmsy10.ttf",
+ "name": "cmsy10",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/STIXSizFiveSymReg.ttf",
+ "name": "STIXSizeFiveSym",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/DejaVuSerif-Italic.ttf",
+ "name": "DejaVu Serif",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/STIXSizTwoSymBol.ttf",
+ "name": "STIXSizeTwoSym",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/STIXSizThreeSymBol.ttf",
+ "name": "STIXSizeThreeSym",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/STIXNonUniBol.ttf",
+ "name": "STIXNonUnicode",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/cmss10.ttf",
+ "name": "cmss10",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/STIXGeneralItalic.ttf",
+ "name": "STIXGeneral",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/STIXSizOneSymBol.ttf",
+ "name": "STIXSizeOneSym",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/DejaVuSans-Oblique.ttf",
+ "name": "DejaVu Sans",
+ "style": "oblique",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/DejaVuSansMono-Oblique.ttf",
+ "name": "DejaVu Sans Mono",
+ "style": "oblique",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/DejaVuSans-BoldOblique.ttf",
+ "name": "DejaVu Sans",
+ "style": "oblique",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/cmex10.ttf",
+ "name": "cmex10",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/STIXSizTwoSymReg.ttf",
+ "name": "STIXSizeTwoSym",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/STIXSizFourSymReg.ttf",
+ "name": "STIXSizeFourSym",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/STIXGeneral.ttf",
+ "name": "STIXGeneral",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/STIXGeneralBolIta.ttf",
+ "name": "STIXGeneral",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/DejaVuSansDisplay.ttf",
+ "name": "DejaVu Sans Display",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/STIXSizOneSymReg.ttf",
+ "name": "STIXSizeOneSym",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/cmtt10.ttf",
+ "name": "cmtt10",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/DejaVuSerif-BoldItalic.ttf",
+ "name": "DejaVu Serif",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/DejaVuSans.ttf",
+ "name": "DejaVu Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/STIXNonUni.ttf",
+ "name": "STIXNonUnicode",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/DejaVuSans-Bold.ttf",
+ "name": "DejaVu Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/STIXSizThreeSymReg.ttf",
+ "name": "STIXSizeThreeSym",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/DejaVuSansMono-BoldOblique.ttf",
+ "name": "DejaVu Sans Mono",
+ "style": "oblique",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/DejaVuSerif-Bold.ttf",
+ "name": "DejaVu Serif",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/STIXNonUniIta.ttf",
+ "name": "STIXNonUnicode",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/cmb10.ttf",
+ "name": "cmb10",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/cmmi10.ttf",
+ "name": "cmmi10",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/STIXGeneralBol.ttf",
+ "name": "STIXGeneral",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/STIXNonUniBolIta.ttf",
+ "name": "STIXNonUnicode",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "fonts/ttf/DejaVuSansMono-Bold.ttf",
+ "name": "DejaVu Sans Mono",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansVai-Regular.ttf",
+ "name": "Noto Sans Vai",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Verdana Bold.ttf",
+ "name": "Verdana",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXNonUniIta.otf",
+ "name": "STIXNonUnicode",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/SFNSItalic.ttf",
+ "name": "System Font",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSNerdFontMono-Italic.ttf",
+ "name": "MesloLGS Nerd Font Mono",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSDZNerdFontPropo-Bold.ttf",
+ "name": "MesloLGSDZ Nerd Font Propo",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansCarian-Regular.ttf",
+ "name": "Noto Sans Carian",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansTifinagh-Regular.otf",
+ "name": "Noto Sans Tifinagh",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansAdlam-Regular.ttf",
+ "name": "Noto Sans Adlam",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Academy Engraved LET Fonts.ttf",
+ "name": "Academy Engraved LET",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansTaiViet-Regular.ttf",
+ "name": "Noto Sans Tai Viet",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Mishafi.ttf",
+ "name": "Mishafi",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansCypriot-Regular.ttf",
+ "name": "Noto Sans Cypriot",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansKaithi-Regular.ttf",
+ "name": "Noto Sans Kaithi",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/MuktaMahee.ttc",
+ "name": "Mukta Mahee",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMNerdFont-Bold.ttf",
+ "name": "MesloLGM Nerd Font",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Thonburi.ttc",
+ "name": "Thonburi",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansSiddham-Regular.otf",
+ "name": "Noto Sans Siddham",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Marion.ttc",
+ "name": "Marion",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/GillSans.ttc",
+ "name": "Gill Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/\u30d2\u30e9\u30ad\u3099\u30ce\u89d2\u30b3\u3099\u30b7\u30c3\u30af W7.ttc",
+ "name": "Hiragino Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLNerdFontMono-Italic.ttf",
+ "name": "MesloLGL Nerd Font Mono",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMDZNerdFontMono-Italic.ttf",
+ "name": "MesloLGMDZ Nerd Font Mono",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/KefaIII.ttf",
+ "name": "Kefa III",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Kohinoor.ttc",
+ "name": "Kohinoor Devanagari",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansMeeteiMayek-Regular.ttf",
+ "name": "Noto Sans Meetei Mayek",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Palatino.ttc",
+ "name": "Palatino",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NewPeninimMT.ttc",
+ "name": "New Peninim MT",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/DevanagariMT.ttc",
+ "name": "Devanagari MT",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Shree714.ttc",
+ "name": "Shree Devanagari 714",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansSamaritan-Regular.ttf",
+ "name": "Noto Sans Samaritan",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSNerdFont-Regular.ttf",
+ "name": "MesloLGS Nerd Font",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Seravek.ttc",
+ "name": "Seravek",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansMasaramGondi-Regular.otf",
+ "name": "Noto Sans Masaram Gondi",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSDZNerdFontMono-Italic.ttf",
+ "name": "MesloLGSDZ Nerd Font Mono",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXIntUpSmBol.otf",
+ "name": "STIXIntegralsUpSm",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/ThonburiUI.ttc",
+ "name": ".ThonburiUI",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSerifBalinese-Regular.ttf",
+ "name": "Noto Serif Balinese",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansCham-Regular.ttf",
+ "name": "Noto Sans Cham",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/SFNSRounded.ttf",
+ "name": ".SF NS Rounded",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Damascus.ttc",
+ "name": "Damascus",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/SFArabicRounded.ttf",
+ "name": ".SF Arabic Rounded",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansNagMundari-Regular.ttf",
+ "name": "Noto Sans Nag Mundari",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Arial Narrow Bold Italic.ttf",
+ "name": "Arial Narrow",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "condensed",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansRejang-Regular.ttf",
+ "name": "Noto Sans Rejang",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/EuphemiaCAS.ttc",
+ "name": "Euphemia UCAS",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansOsage-Regular.ttf",
+ "name": "Noto Sans Osage",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Bodoni 72.ttc",
+ "name": "Bodoni 72",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Iowan Old Style.ttc",
+ "name": "Iowan Old Style",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Baskerville.ttc",
+ "name": "Baskerville",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/PTSerifCaption.ttc",
+ "name": "PT Serif Caption",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Baghdad.ttc",
+ "name": "Baghdad",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/ITFDevanagari.ttc",
+ "name": "ITF Devanagari",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Copperplate.ttc",
+ "name": "Copperplate",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/ADTNumeric.ttc",
+ "name": ".SF Numeric",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/PartyLET-plain.ttf",
+ "name": "Party LET",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/SFNSMono.ttf",
+ "name": ".SF NS Mono",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 295,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/BigCaslon.ttf",
+ "name": "Big Caslon",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 500,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Tamil MN.ttc",
+ "name": "Tamil MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSDZNerdFont-Bold.ttf",
+ "name": "MesloLGSDZ Nerd Font",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/SFArmenian.ttf",
+ "name": ".SF Armenian",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansPhagsPa-Regular.ttf",
+ "name": "Noto Sans PhagsPa",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Keyboard.ttf",
+ "name": ".Keyboard",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 100,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Al Nile.ttc",
+ "name": "Al Nile",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Al Tarikh.ttc",
+ "name": "Al Tarikh",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/AquaKana.ttc",
+ "name": ".Aqua Kana",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 300,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/SignPainter.ttc",
+ "name": "SignPainter",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Avenir Next Condensed.ttc",
+ "name": "Avenir Next Condensed",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "condensed",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSDZNerdFont-BoldItalic.ttf",
+ "name": "MesloLGSDZ Nerd Font",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Apple Braille Outline 8 Dot.ttf",
+ "name": "Apple Braille",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMNerdFontPropo-Bold.ttf",
+ "name": "MesloLGM Nerd Font Propo",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Didot.ttc",
+ "name": "Didot",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/DIN Condensed Bold.ttf",
+ "name": "DIN Condensed",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "condensed",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/NotoSansOriya.ttc",
+ "name": "Noto Sans Oriya",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/AnonymiceProNerdFontPropo-Italic.ttf",
+ "name": "AnonymicePro Nerd Font Propo",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansKhojki-Regular.ttf",
+ "name": "Noto Sans Khojki",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXIntUpDReg.otf",
+ "name": "STIXIntegralsUpD",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/NotoSansMyanmar.ttc",
+ "name": "Noto Sans Myanmar",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 900,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMNerdFontMono-Bold.ttf",
+ "name": "MesloLGM Nerd Font Mono",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Charter.ttc",
+ "name": "Charter",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansLimbu-Regular.ttf",
+ "name": "Noto Sans Limbu",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/SukhumvitSet.ttc",
+ "name": "Sukhumvit Set",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 250,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Library/Fonts/Arial Unicode.ttf",
+ "name": "Arial Unicode MS",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMDZNerdFont-Bold.ttf",
+ "name": "MesloLGMDZ Nerd Font",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansMultani-Regular.ttf",
+ "name": "Noto Sans Multani",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansBhaiksuki-Regular.ttf",
+ "name": "Noto Sans Bhaiksuki",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Zapfino.ttf",
+ "name": "Zapfino",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMNerdFont-BoldItalic.ttf",
+ "name": "MesloLGM Nerd Font",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansCanadianAboriginal-Regular.otf",
+ "name": "Noto Sans Canadian Aboriginal",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Bangla Sangam MN.ttc",
+ "name": "Bangla Sangam MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Sathu.ttf",
+ "name": "Sathu",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/KohinoorTelugu.ttc",
+ "name": "Kohinoor Telugu",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLDZNerdFont-Bold.ttf",
+ "name": "MesloLGLDZ Nerd Font",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansDuployan-Regular.ttf",
+ "name": "Noto Sans Duployan",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/InaiMathi-MN.ttc",
+ "name": "InaiMathi",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansMro-Regular.ttf",
+ "name": "Noto Sans Mro",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansWarangCiti-Regular.ttf",
+ "name": "Noto Sans Warang Citi",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/\u30d2\u30e9\u30ad\u3099\u30ce\u89d2\u30b3\u3099\u30b7\u30c3\u30af W3.ttc",
+ "name": "Hiragino Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 300,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansCoptic-Regular.ttf",
+ "name": "Noto Sans Coptic",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Muna.ttc",
+ "name": "Muna",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/SuperClarendon.ttc",
+ "name": "Superclarendon",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLNerdFontMono-BoldItalic.ttf",
+ "name": "MesloLGL Nerd Font Mono",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansTaiTham-Regular.ttf",
+ "name": "Noto Sans Tai Tham",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Wingdings.ttf",
+ "name": "Wingdings",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/STHeiti Light.ttc",
+ "name": "Heiti TC",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 300,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/SFCompactRounded.ttf",
+ "name": ".SF Compact Rounded",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansNKo-Regular.ttf",
+ "name": "Noto Sans NKo",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXSizFiveSymReg.otf",
+ "name": "STIXSizeFiveSym",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Kailasa.ttc",
+ "name": "Kailasa",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansOlChiki-Regular.ttf",
+ "name": "Noto Sans Ol Chiki",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Trebuchet MS.ttf",
+ "name": "Trebuchet MS",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Bodoni 72 OS.ttc",
+ "name": "Bodoni 72 Oldstyle",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSNerdFontMono-Regular.ttf",
+ "name": "MesloLGS Nerd Font Mono",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMNerdFontPropo-Italic.ttf",
+ "name": "MesloLGM Nerd Font Propo",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansBamum-Regular.ttf",
+ "name": "Noto Sans Bamum",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXSizThreeSymReg.otf",
+ "name": "STIXSizeThreeSym",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/DecoTypeNastaleeqUrdu.ttc",
+ "name": ".DecoType Nastaleeq Urdu UI",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansChakma-Regular.ttf",
+ "name": "Noto Sans Chakma",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Menlo.ttc",
+ "name": "Menlo",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Sinhala MN.ttc",
+ "name": "Sinhala MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Telugu Sangam MN.ttc",
+ "name": "Telugu Sangam MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/KohinoorGujarati.ttc",
+ "name": "Kohinoor Gujarati",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Monaco.ttf",
+ "name": "Monaco",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Khmer MN.ttc",
+ "name": "Khmer MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansBatak-Regular.ttf",
+ "name": "Noto Sans Batak",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Hiragino Sans GB.ttc",
+ "name": "Hiragino Sans GB",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 300,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXGeneralBol.otf",
+ "name": "STIXGeneral",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Oriya Sangam MN.ttc",
+ "name": "Oriya Sangam MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Luminari.ttf",
+ "name": "Luminari",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLNerdFontPropo-Italic.ttf",
+ "name": "MesloLGL Nerd Font Propo",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Phosphate.ttc",
+ "name": "Phosphate",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansCuneiform-Regular.ttf",
+ "name": "Noto Sans Cuneiform",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansMarchen-Regular.ttf",
+ "name": "Noto Sans Marchen",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Arial Italic.ttf",
+ "name": "Arial",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/STHeiti Medium.ttc",
+ "name": "Heiti TC",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Sinhala Sangam MN.ttc",
+ "name": "Sinhala Sangam MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMDZNerdFontPropo-Bold.ttf",
+ "name": "MesloLGMDZ Nerd Font Propo",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansKhudawadi-Regular.ttf",
+ "name": "Noto Sans Khudawadi",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/NotoSansKannada.ttc",
+ "name": "Noto Sans Kannada",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 100,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/AnonymiceProNerdFontPropo-Bold.ttf",
+ "name": "AnonymicePro Nerd Font Propo",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Farah.ttc",
+ "name": "Farah",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Wingdings 2.ttf",
+ "name": "Wingdings 2",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLDZNerdFontPropo-BoldItalic.ttf",
+ "name": "MesloLGLDZ Nerd Font Propo",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/AppleGothic.ttf",
+ "name": "AppleGothic",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Krungthep.ttf",
+ "name": "Krungthep",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/SFCamera.ttf",
+ "name": ".SF Camera",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLDZNerdFontMono-BoldItalic.ttf",
+ "name": "MesloLGLDZ Nerd Font Mono",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSNerdFontMono-BoldItalic.ttf",
+ "name": "MesloLGS Nerd Font Mono",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSerifYezidi-Regular.otf",
+ "name": "Noto Serif Yezidi",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Raanana.ttc",
+ "name": "Raanana",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansNewa-Regular.ttf",
+ "name": "Noto Sans Newa",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansSharada-Regular.ttf",
+ "name": "Noto Sans Sharada",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Noteworthy.ttc",
+ "name": "Noteworthy",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 300,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansInscriptionalPahlavi-Regular.ttf",
+ "name": "Noto Sans Inscriptional Pahlavi",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/DecoTypeNaskh.ttc",
+ "name": "DecoType Naskh",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Galvji.ttc",
+ "name": "Galvji",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLDZNerdFontPropo-Regular.ttf",
+ "name": "MesloLGLDZ Nerd Font Propo",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansTagalog-Regular.ttf",
+ "name": "Noto Sans Tagalog",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Times.ttc",
+ "name": "Times",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLDZNerdFontMono-Italic.ttf",
+ "name": "MesloLGLDZ Nerd Font Mono",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Times New Roman Bold Italic.ttf",
+ "name": "Times New Roman",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Lao Sangam MN.ttf",
+ "name": "Lao Sangam MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansBrahmi-Regular.ttf",
+ "name": "Noto Sans Brahmi",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansAvestan-Regular.ttf",
+ "name": "Noto Sans Avestan",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLNerdFont-Italic.ttf",
+ "name": "MesloLGL Nerd Font",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/PlantagenetCherokee.ttf",
+ "name": "Plantagenet Cherokee",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/GeezaPro.ttc",
+ "name": "Geeza Pro",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSDZNerdFont-Regular.ttf",
+ "name": "MesloLGSDZ Nerd Font",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Arial Black.ttf",
+ "name": "Arial Black",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 900,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXNonUni.otf",
+ "name": "STIXNonUnicode",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Bangla MN.ttc",
+ "name": "Bangla MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansWancho-Regular.ttf",
+ "name": "Noto Sans Wancho",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Arial Narrow Italic.ttf",
+ "name": "Arial Narrow",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "condensed",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSDZNerdFontPropo-BoldItalic.ttf",
+ "name": "MesloLGSDZ Nerd Font Propo",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXNonUniBolIta.otf",
+ "name": "STIXNonUnicode",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Chalkduster.ttf",
+ "name": "Chalkduster",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXIntUpDBol.otf",
+ "name": "STIXIntegralsUpD",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansGlagolitic-Regular.ttf",
+ "name": "Noto Sans Glagolitic",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansSaurashtra-Regular.ttf",
+ "name": "Noto Sans Saurashtra",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansTagbanwa-Regular.ttf",
+ "name": "Noto Sans Tagbanwa",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/\u30d2\u30e9\u30ad\u3099\u30ce\u89d2\u30b3\u3099\u30b7\u30c3\u30af W9.ttc",
+ "name": "Hiragino Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 900,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/NewYorkItalic.ttf",
+ "name": ".New York",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLDZNerdFontPropo-Italic.ttf",
+ "name": "MesloLGLDZ Nerd Font Propo",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansLepcha-Regular.ttf",
+ "name": "Noto Sans Lepcha",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Arial Narrow.ttf",
+ "name": "Arial Narrow",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "condensed",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/AnonymiceProNerdFontMono-Regular.ttf",
+ "name": "AnonymicePro Nerd Font Mono",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Symbol.ttf",
+ "name": "Symbol",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansPsalterPahlavi-Regular.ttf",
+ "name": "Noto Sans Psalter Pahlavi",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansBuginese-Regular.ttf",
+ "name": "Noto Sans Buginese",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Comic Sans MS Bold.ttf",
+ "name": "Comic Sans MS",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansKharoshthi-Regular.ttf",
+ "name": "Noto Sans Kharoshthi",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLNerdFontPropo-BoldItalic.ttf",
+ "name": "MesloLGL Nerd Font Propo",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Webdings.ttf",
+ "name": "Webdings",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXTwoText.ttf",
+ "name": "STIX Two Text",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXIntSmReg.otf",
+ "name": "STIXIntegralsSm",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Farisi.ttf",
+ "name": "Farisi",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Myanmar Sangam MN.ttc",
+ "name": "Myanmar Sangam MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSerifNyiakengPuachueHmong-Regular.ttf",
+ "name": "Noto Serif Hmong Nyiakeng",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Beirut.ttc",
+ "name": "Beirut",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansOldNorthArabian-Regular.ttf",
+ "name": "Noto Sans Old North Arabian",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/AmericanTypewriter.ttc",
+ "name": "American Typewriter",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Trebuchet MS Bold.ttf",
+ "name": "Trebuchet MS",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Lao MN.ttc",
+ "name": "Lao MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/PTSans.ttc",
+ "name": "PT Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Ayuthaya.ttf",
+ "name": "Ayuthaya",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMDZNerdFontPropo-BoldItalic.ttf",
+ "name": "MesloLGMDZ Nerd Font Propo",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Avenir.ttc",
+ "name": "Avenir",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/AlBayan.ttc",
+ "name": "Al Bayan",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/\u30d2\u30e9\u30ad\u3099\u30ce\u660e\u671d ProN.ttc",
+ "name": "Hiragino Mincho ProN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 300,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/AnonymiceProNerdFont-Italic.ttf",
+ "name": "AnonymicePro Nerd Font",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansSyriac-Regular.ttf",
+ "name": "Noto Sans Syriac",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Trebuchet MS Italic.ttf",
+ "name": "Trebuchet MS",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Bodoni Ornaments.ttf",
+ "name": "Bodoni Ornaments",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansTaiLe-Regular.ttf",
+ "name": "Noto Sans Tai Le",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Apple Symbols.ttf",
+ "name": "Apple Symbols",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSDZNerdFontMono-BoldItalic.ttf",
+ "name": "MesloLGSDZ Nerd Font Mono",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/AnonymiceProNerdFontMono-BoldItalic.ttf",
+ "name": "AnonymicePro Nerd Font Mono",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Mishafi Gold.ttf",
+ "name": "Mishafi Gold",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/NotoSerifMyanmar.ttc",
+ "name": "Noto Serif Myanmar",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 900,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Times New Roman Bold.ttf",
+ "name": "Times New Roman",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/AnonymiceProNerdFont-Bold.ttf",
+ "name": "AnonymicePro Nerd Font",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/ChalkboardSE.ttc",
+ "name": "Chalkboard SE",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXSizOneSymReg.otf",
+ "name": "STIXSizeOneSym",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansLydian-Regular.ttf",
+ "name": "Noto Sans Lydian",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSNerdFontPropo-BoldItalic.ttf",
+ "name": "MesloLGS Nerd Font Propo",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMDZNerdFontPropo-Regular.ttf",
+ "name": "MesloLGMDZ Nerd Font Propo",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/AnonymiceProNerdFontPropo-BoldItalic.ttf",
+ "name": "AnonymicePro Nerd Font Propo",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXVarBol.otf",
+ "name": "STIXVariants",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Tahoma Bold.ttf",
+ "name": "Tahoma",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSDZNerdFontPropo-Regular.ttf",
+ "name": "MesloLGSDZ Nerd Font Propo",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXTwoText-Italic.ttf",
+ "name": "STIX Two Text",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Malayalam MN.ttc",
+ "name": "Malayalam MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXIntDReg.otf",
+ "name": "STIXIntegralsD",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/HelveticaNeue.ttc",
+ "name": "Helvetica Neue",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/GujaratiMT.ttc",
+ "name": "Gujarati MT",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Courier New Italic.ttf",
+ "name": "Courier New",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Khmer Sangam MN.ttf",
+ "name": "Khmer Sangam MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Optima.ttc",
+ "name": "Optima",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Mshtakan.ttc",
+ "name": "Mshtakan",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXIntSmBol.otf",
+ "name": "STIXIntegralsSm",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Rockwell.ttc",
+ "name": "Rockwell",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansHatran-Regular.ttf",
+ "name": "Noto Sans Hatran",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXGeneral.otf",
+ "name": "STIXGeneral",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansMongolian-Regular.ttf",
+ "name": "Noto Sans Mongolian",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/SFNS.ttf",
+ "name": "System Font",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Apple Braille.ttf",
+ "name": "Apple Braille",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansTakri-Regular.ttf",
+ "name": "Noto Sans Takri",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Arial Bold Italic.ttf",
+ "name": "Arial",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Trattatello.ttf",
+ "name": "Trattatello",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/ZapfDingbats.ttf",
+ "name": "Zapf Dingbats",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Kannada Sangam MN.ttc",
+ "name": "Kannada Sangam MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansLisu-Regular.ttf",
+ "name": "Noto Sans Lisu",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/\u30d2\u30e9\u30ad\u3099\u30ce\u4e38\u30b3\u3099 ProN W4.ttc",
+ "name": "Hiragino Maru Gothic Pro",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Sana.ttc",
+ "name": "Sana",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Bodoni 72 Smallcaps Book.ttf",
+ "name": "Bodoni 72 Smallcaps",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansMeroitic-Regular.ttf",
+ "name": "Noto Sans Meroitic",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSDZNerdFont-Italic.ttf",
+ "name": "MesloLGSDZ Nerd Font",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMDZNerdFont-Italic.ttf",
+ "name": "MesloLGMDZ Nerd Font",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Hoefler Text.ttc",
+ "name": "Hoefler Text",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansElbasan-Regular.ttf",
+ "name": "Noto Sans Elbasan",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansPahawhHmong-Regular.ttf",
+ "name": "Noto Sans Pahawh Hmong",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXTwoMath.otf",
+ "name": "STIX Two Math",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/NewYork.ttf",
+ "name": ".New York",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Times New Roman Italic.ttf",
+ "name": "Times New Roman",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLNerdFontMono-Bold.ttf",
+ "name": "MesloLGL Nerd Font Mono",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansNabataean-Regular.ttf",
+ "name": "Noto Sans Nabataean",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Savoye LET.ttc",
+ "name": "Savoye LET",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansOldItalic-Regular.ttf",
+ "name": "Noto Sans Old Italic",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXNonUniBol.otf",
+ "name": "STIXNonUnicode",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/\u30d2\u30e9\u30ad\u3099\u30ce\u89d2\u30b3\u3099\u30b7\u30c3\u30af W4.ttc",
+ "name": "Hiragino Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansThaana-Regular.ttf",
+ "name": "Noto Sans Thaana",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLNerdFontPropo-Regular.ttf",
+ "name": "MesloLGL Nerd Font Propo",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/SFArabic.ttf",
+ "name": ".SF Arabic",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Corsiva.ttc",
+ "name": "Corsiva Hebrew",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansUgaritic-Regular.ttf",
+ "name": "Noto Sans Ugaritic",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Verdana Italic.ttf",
+ "name": "Verdana",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Avenir Next.ttc",
+ "name": "Avenir Next",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXGeneralItalic.otf",
+ "name": "STIXGeneral",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Verdana.ttf",
+ "name": "Verdana",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/CJKSymbolsFallback.ttc",
+ "name": ".CJK Symbols Fallback HK",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 542,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/SFNSMonoItalic.ttf",
+ "name": ".SF NS Mono",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 295,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLDZNerdFont-Regular.ttf",
+ "name": "MesloLGLDZ Nerd Font",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Malayalam Sangam MN.ttc",
+ "name": "Malayalam Sangam MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Arial Narrow Bold.ttf",
+ "name": "Arial Narrow",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "condensed",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansManichaean-Regular.ttf",
+ "name": "Noto Sans Manichaean",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/LucidaGrande.ttc",
+ "name": "Lucida Grande",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 500,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Herculanum.ttf",
+ "name": "Herculanum",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMNerdFontPropo-BoldItalic.ttf",
+ "name": "MesloLGM Nerd Font Propo",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Diwan Kufi.ttc",
+ "name": "Diwan Kufi",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXIntDBol.otf",
+ "name": "STIXIntegralsD",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/\u30d2\u30e9\u30ad\u3099\u30ce\u89d2\u30b3\u3099\u30b7\u30c3\u30af W2.ttc",
+ "name": "Hiragino Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 250,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMNerdFont-Regular.ttf",
+ "name": "MesloLGM Nerd Font",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMNerdFontMono-BoldItalic.ttf",
+ "name": "MesloLGM Nerd Font Mono",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Apple Braille Outline 6 Dot.ttf",
+ "name": "Apple Braille",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/MarkerFelt.ttc",
+ "name": "Marker Felt",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLDZNerdFontMono-Bold.ttf",
+ "name": "MesloLGLDZ Nerd Font Mono",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansSylotiNagri-Regular.ttf",
+ "name": "Noto Sans Syloti Nagri",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansOsmanya-Regular.ttf",
+ "name": "Noto Sans Osmanya",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansMandaic-Regular.ttf",
+ "name": "Noto Sans Mandaic",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXIntUpReg.otf",
+ "name": "STIXIntegralsUp",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMDZNerdFontMono-BoldItalic.ttf",
+ "name": "MesloLGMDZ Nerd Font Mono",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/AnonymiceProNerdFont-BoldItalic.ttf",
+ "name": "AnonymicePro Nerd Font",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Arial Bold.ttf",
+ "name": "Arial",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXIntUpBol.otf",
+ "name": "STIXIntegralsUp",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Papyrus.ttc",
+ "name": "Papyrus",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "condensed",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/DIN Alternate Bold.ttf",
+ "name": "DIN Alternate",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLDZNerdFontMono-Regular.ttf",
+ "name": "MesloLGLDZ Nerd Font Mono",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLNerdFontPropo-Bold.ttf",
+ "name": "MesloLGL Nerd Font Propo",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/\u30d2\u30e9\u30ad\u3099\u30ce\u89d2\u30b3\u3099\u30b7\u30c3\u30af W1.ttc",
+ "name": "Hiragino Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 200,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLDZNerdFontPropo-Bold.ttf",
+ "name": "MesloLGLDZ Nerd Font Propo",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansPauCinHau-Regular.ttf",
+ "name": "Noto Sans Pau Cin Hau",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/KufiStandardGK.ttc",
+ "name": "KufiStandardGK",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXSizFourSymReg.otf",
+ "name": "STIXSizeFourSym",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Telugu MN.ttc",
+ "name": "Telugu MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLNerdFont-Regular.ttf",
+ "name": "MesloLGL Nerd Font",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXVar.otf",
+ "name": "STIXVariants",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMDZNerdFont-BoldItalic.ttf",
+ "name": "MesloLGMDZ Nerd Font",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/ArialHB.ttc",
+ "name": "Arial Hebrew",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/PTMono.ttc",
+ "name": "PT Mono",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/NotoSansArmenian.ttc",
+ "name": "Noto Sans Armenian",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 900,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Devanagari Sangam MN.ttc",
+ "name": "Devanagari Sangam MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Gurmukhi Sangam MN.ttc",
+ "name": "Gurmukhi Sangam MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Courier New.ttf",
+ "name": "Courier New",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Courier New Bold Italic.ttf",
+ "name": "Courier New",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Microsoft Sans Serif.ttf",
+ "name": "Microsoft Sans Serif",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMNerdFontMono-Italic.ttf",
+ "name": "MesloLGM Nerd Font Mono",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansInscriptionalParthian-Regular.ttf",
+ "name": "Noto Sans Inscriptional Parthian",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMNerdFontMono-Regular.ttf",
+ "name": "MesloLGM Nerd Font Mono",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Songti.ttc",
+ "name": "Songti SC",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 900,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSNerdFontPropo-Regular.ttf",
+ "name": "MesloLGS Nerd Font Propo",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/\u30d2\u30e9\u30ad\u3099\u30ce\u89d2\u30b3\u3099\u30b7\u30c3\u30af W5.ttc",
+ "name": "Hiragino Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 500,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Futura.ttc",
+ "name": "Futura",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 500,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSerifAhom-Regular.ttf",
+ "name": "Noto Serif Ahom",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansNewTaiLue-Regular.ttf",
+ "name": "Noto Sans New Tai Lue",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Athelas.ttc",
+ "name": "Athelas",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Helvetica.ttc",
+ "name": "Helvetica",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Kokonor.ttf",
+ "name": "Kokonor",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansHanifiRohingya-Regular.ttf",
+ "name": "Noto Sans Hanifi Rohingya",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/AppleSDGothicNeo.ttc",
+ "name": "Apple SD Gothic Neo",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Chalkboard.ttc",
+ "name": "Chalkboard",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Comic Sans MS.ttf",
+ "name": "Comic Sans MS",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSNerdFont-Italic.ttf",
+ "name": "MesloLGS Nerd Font",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansBuhid-Regular.ttf",
+ "name": "Noto Sans Buhid",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLNerdFont-BoldItalic.ttf",
+ "name": "MesloLGL Nerd Font",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMDZNerdFontPropo-Italic.ttf",
+ "name": "MesloLGMDZ Nerd Font Propo",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Andale Mono.ttf",
+ "name": "Andale Mono",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Georgia Bold Italic.ttf",
+ "name": "Georgia",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansTirhuta-Regular.ttf",
+ "name": "Noto Sans Tirhuta",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansHanunoo-Regular.ttf",
+ "name": "Noto Sans Hanunoo",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSDZNerdFontMono-Regular.ttf",
+ "name": "MesloLGSDZ Nerd Font Mono",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/SnellRoundhand.ttc",
+ "name": "Snell Roundhand",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 500,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/SFCompact.ttf",
+ "name": ".SF Compact",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 1000,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansGunjalaGondi-Regular.otf",
+ "name": "Noto Sans Gunjala Gondi",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSNerdFont-Bold.ttf",
+ "name": "MesloLGS Nerd Font",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/\u30d2\u30e9\u30ad\u3099\u30ce\u89d2\u30b3\u3099\u30b7\u30c3\u30af W0.ttc",
+ "name": "Hiragino Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 100,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Trebuchet MS Bold Italic.ttf",
+ "name": "Trebuchet MS",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Brush Script.ttf",
+ "name": "Brush Script MT",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/PTSerif.ttc",
+ "name": "PT Serif",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSNerdFontPropo-Italic.ttf",
+ "name": "MesloLGS Nerd Font Propo",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMNerdFont-Italic.ttf",
+ "name": "MesloLGM Nerd Font",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Georgia Bold.ttf",
+ "name": "Georgia",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Waseem.ttc",
+ "name": "Waseem",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/KohinoorBangla.ttc",
+ "name": "Kohinoor Bangla",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Apple Braille Pinpoint 8 Dot.ttf",
+ "name": "Apple Braille",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/SFGeorgian.ttf",
+ "name": ".SF Georgian",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Myanmar MN.ttc",
+ "name": "Myanmar MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Tamil Sangam MN.ttc",
+ "name": "Tamil Sangam MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Hoefler Text Ornaments.ttf",
+ "name": "Hoefler Text",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLNerdFont-Bold.ttf",
+ "name": "MesloLGL Nerd Font",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansMendeKikakui-Regular.ttf",
+ "name": "Noto Sans Mende Kikakui",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansImperialAramaic-Regular.ttf",
+ "name": "Noto Sans Imperial Aramaic",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansMahajani-Regular.ttf",
+ "name": "Noto Sans Mahajani",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansSoraSompeng-Regular.ttf",
+ "name": "Noto Sans Sora Sompeng",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Geneva.ttf",
+ "name": "Geneva",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSNerdFontMono-Bold.ttf",
+ "name": "MesloLGS Nerd Font Mono",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansGothic-Regular.ttf",
+ "name": "Noto Sans Gothic",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansCaucasianAlbanian-Regular.ttf",
+ "name": "Noto Sans Caucasian Albanian",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/\u30d2\u30e9\u30ad\u3099\u30ce\u89d2\u30b3\u3099\u30b7\u30c3\u30af W6.ttc",
+ "name": "Hiragino Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 600,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Gurmukhi MN.ttc",
+ "name": "Gurmukhi MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Georgia.ttf",
+ "name": "Georgia",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/SFCompactItalic.ttf",
+ "name": ".SF Compact",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 1000,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Georgia Italic.ttf",
+ "name": "Georgia",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansPalmyrene-Regular.ttf",
+ "name": "Noto Sans Palmyrene",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/SFArmenianRounded.ttf",
+ "name": ".SF Armenian Rounded",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/SFHebrewRounded.ttf",
+ "name": ".SF Hebrew Rounded",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/SFHebrew.ttf",
+ "name": ".SF Hebrew",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXSizTwoSymReg.otf",
+ "name": "STIXSizeTwoSym",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Impact.ttf",
+ "name": "Impact",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Gurmukhi.ttf",
+ "name": "Gurmukhi MT",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 500,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMDZNerdFontMono-Bold.ttf",
+ "name": "MesloLGMDZ Nerd Font Mono",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Times New Roman.ttf",
+ "name": "Times New Roman",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXIntUpSmReg.otf",
+ "name": "STIXIntegralsUpSm",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/AppleMyungjo.ttf",
+ "name": "AppleMyungjo",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/SymbolsNerdFont-Regular.ttf",
+ "name": "Symbols Nerd Font",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLDZNerdFont-BoldItalic.ttf",
+ "name": "MesloLGLDZ Nerd Font",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Nadeem.ttc",
+ "name": "Nadeem",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Arial Rounded Bold.ttf",
+ "name": "Arial Rounded MT Bold",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Apple Braille Pinpoint 6 Dot.ttf",
+ "name": "Apple Braille",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/\u30d2\u30e9\u30ad\u3099\u30ce\u89d2\u30b3\u3099\u30b7\u30c3\u30af W8.ttc",
+ "name": "Hiragino Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 800,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXSizOneSymBol.otf",
+ "name": "STIXSizeOneSym",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/AnonymiceProNerdFontMono-Bold.ttf",
+ "name": "AnonymicePro Nerd Font Mono",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/SymbolsNerdFontMono-Regular.ttf",
+ "name": "Symbols Nerd Font Mono",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXSizThreeSymBol.otf",
+ "name": "STIXSizeThreeSym",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansModi-Regular.ttf",
+ "name": "Noto Sans Modi",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansBassaVah-Regular.ttf",
+ "name": "Noto Sans Bassa Vah",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Courier New Bold.ttf",
+ "name": "Courier New",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/SFIndia.ttc",
+ "name": ".SF Bangla",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Tahoma.ttf",
+ "name": "Tahoma",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansKayahLi-Regular.ttf",
+ "name": "Noto Sans Kayah Li",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansJavanese-Regular.otf",
+ "name": "Noto Sans Javanese",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXSizFourSymBol.otf",
+ "name": "STIXSizeFourSym",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLDZNerdFont-Italic.ttf",
+ "name": "MesloLGLDZ Nerd Font",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansOldPersian-Regular.ttf",
+ "name": "Noto Sans Old Persian",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/NotoNastaliq.ttc",
+ "name": "Noto Nastaliq Urdu",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Arial.ttf",
+ "name": "Arial",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMNerdFontPropo-Regular.ttf",
+ "name": "MesloLGM Nerd Font Propo",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXSizTwoSymBol.otf",
+ "name": "STIXSizeTwoSym",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMDZNerdFontMono-Regular.ttf",
+ "name": "MesloLGMDZ Nerd Font Mono",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Apple Chancery.ttf",
+ "name": "Apple Chancery",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 0,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansOldSouthArabian-Regular.ttf",
+ "name": "Noto Sans Old South Arabian",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Skia.ttf",
+ "name": "Skia",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 5,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSNerdFont-BoldItalic.ttf",
+ "name": "MesloLGS Nerd Font",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Wingdings 3.ttf",
+ "name": "Wingdings 3",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/STIXGeneralBolIta.otf",
+ "name": "STIXGeneral",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansLinearB-Regular.ttf",
+ "name": "Noto Sans Linear B",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Oriya MN.ttc",
+ "name": "Oriya MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Bradley Hand Bold.ttf",
+ "name": "Bradley Hand",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansOldTurkic-Regular.ttf",
+ "name": "Noto Sans Old Turkic",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Courier.ttc",
+ "name": "Courier",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Gujarati Sangam MN.ttc",
+ "name": "Gujarati Sangam MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSDZNerdFontMono-Bold.ttf",
+ "name": "MesloLGSDZ Nerd Font Mono",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansEgyptianHieroglyphs-Regular.ttf",
+ "name": "Noto Sans Egyptian Hieroglyphs",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansMiao-Regular.ttf",
+ "name": "Noto Sans Miao",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/SFGeorgianRounded.ttf",
+ "name": ".SF Georgian Rounded",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansLinearA-Regular.ttf",
+ "name": "Noto Sans Linear A",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSDZNerdFontPropo-Italic.ttf",
+ "name": "MesloLGSDZ Nerd Font Propo",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Kannada MN.ttc",
+ "name": "Kannada MN",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansLycian-Regular.ttf",
+ "name": "Noto Sans Lycian",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Diwan Thuluth.ttf",
+ "name": "Diwan Thuluth",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Arial Unicode.ttf",
+ "name": "Arial Unicode MS",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/AnonymiceProNerdFontMono-Italic.ttf",
+ "name": "AnonymicePro Nerd Font Mono",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansPhoenician-Regular.ttf",
+ "name": "Noto Sans Phoenician",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/AnonymiceProNerdFontPropo-Regular.ttf",
+ "name": "AnonymicePro Nerd Font Propo",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Verdana Bold Italic.ttf",
+ "name": "Verdana",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/AnonymiceProNerdFont-Regular.ttf",
+ "name": "AnonymicePro Nerd Font",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansOldHungarian-Regular.ttf",
+ "name": "Noto Sans Old Hungarian",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Silom.ttf",
+ "name": "Silom",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGMDZNerdFont-Regular.ttf",
+ "name": "MesloLGMDZ Nerd Font",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansSundanese-Regular.ttf",
+ "name": "Noto Sans Sundanese",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansOldPermic-Regular.ttf",
+ "name": "Noto Sans Old Permic",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGLNerdFontMono-Regular.ttf",
+ "name": "MesloLGL Nerd Font Mono",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/NotoSansYi-Regular.ttf",
+ "name": "Noto Sans Yi",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Library/Fonts/MesloLGSNerdFontPropo-Bold.ttf",
+ "name": "MesloLGS Nerd Font Propo",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/System/Library/Fonts/Supplemental/Cochin.ttc",
+ "name": "Cochin",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 500,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyreheros-italic.ttf",
+ "name": "TeX Gyre Heros",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraSans-MediumItalic.ttf",
+ "name": "Fira Sans",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 500,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/Ubuntu-Medium.ttf",
+ "name": "Ubuntu",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 500,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraSans-Bold.ttf",
+ "name": "Fira Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSansPro-Black.ttf",
+ "name": "Source Sans Pro",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 900,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSansPro-Bold.ttf",
+ "name": "Source Sans Pro",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraMath-ExtraLight.ttf",
+ "name": "Fira Math",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 200,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyreschola-bold.ttf",
+ "name": "TeX Gyre Schola",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraMath-Light.ttf",
+ "name": "Fira Math",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 200,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSerifPro-ExtraLightItalic.ttf",
+ "name": "Source Serif Pro",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 200,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/Roboto-BlackItalic.ttf",
+ "name": "Roboto",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 900,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyreadventor-italic.ttf",
+ "name": "TeX Gyre Adventor",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyrebonum-regular.ttf",
+ "name": "TeX Gyre Bonum",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/Roboto-Regular.ttf",
+ "name": "Roboto",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraMath-Medium.ttf",
+ "name": "Fira Math",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 500,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSerifPro-Regular.ttf",
+ "name": "Source Serif Pro",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraSans-SemiBold.ttf",
+ "name": "Fira Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 600,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraSans-BlackItalic.ttf",
+ "name": "Fira Sans",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 900,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraSans-ExtraLightItalic.ttf",
+ "name": "Fira Sans",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 275,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/Ubuntu-MediumItalic.ttf",
+ "name": "Ubuntu",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 500,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyrecursor-bolditalic.ttf",
+ "name": "TeX Gyre Cursor",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyrebonum-italic.ttf",
+ "name": "TeX Gyre Bonum",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraSans-ExtraBoldItalic.ttf",
+ "name": "Fira Sans",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 800,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/OpenSans-Regular.ttf",
+ "name": "Open Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyreschola-bolditalic.ttf",
+ "name": "TeX Gyre Schola",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/Roboto-Black.ttf",
+ "name": "Roboto",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 900,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSerifPro-BoldItalic.ttf",
+ "name": "Source Serif Pro",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyreheros-regular.ttf",
+ "name": "TeX Gyre Heros",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSansPro-ExtraLightItalic.ttf",
+ "name": "Source Sans Pro",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 275,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyreschola-regular.ttf",
+ "name": "TeX Gyre Schola",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/Ubuntu-Bold.ttf",
+ "name": "Ubuntu",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyreheros-bolditalic.ttf",
+ "name": "TeX Gyre Heros",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/OpenSans-Bold.ttf",
+ "name": "Open Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/Roboto-LightItalic.ttf",
+ "name": "Roboto",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 300,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSerifPro-Light.ttf",
+ "name": "Source Serif Pro",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 300,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/NotoSans-Bold.ttf",
+ "name": "Noto Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyrepagella-bold.ttf",
+ "name": "TeX Gyre Pagella",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyreadventor-bolditalic.ttf",
+ "name": "TeX Gyre Adventor",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyretermes-bold.ttf",
+ "name": "TeX Gyre Termes",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/NotoSerif-Italic.ttf",
+ "name": "Noto Serif",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyrechorus-mediumitalic.ttf",
+ "name": "TeX Gyre Chorus",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 500,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraSans-SemiBoldItalic.ttf",
+ "name": "Fira Sans",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 600,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraMath-Heavy.ttf",
+ "name": "Fira Math",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 800,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/NotoSans-BoldItalic.ttf",
+ "name": "Noto Sans",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraMath-UltraLight.ttf",
+ "name": "Fira Math",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 200,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSerifPro-SemiBoldItalic.ttf",
+ "name": "Source Serif Pro",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 600,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/OpenSans-Italic.ttf",
+ "name": "Open Sans",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/Roboto-Medium.ttf",
+ "name": "Roboto",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 500,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraSans-ExtraLight.ttf",
+ "name": "Fira Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 275,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSansPro-Italic.ttf",
+ "name": "Source Sans Pro",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/OpenSans-Semibold.ttf",
+ "name": "Open Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 600,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyrecursor-italic.ttf",
+ "name": "TeX Gyre Cursor",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSerifPro-SemiBold.ttf",
+ "name": "Source Serif Pro",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 600,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyreschola-italic.ttf",
+ "name": "TeX Gyre Schola",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyretermes-italic.ttf",
+ "name": "TeX Gyre Termes",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyretermes-regular.ttf",
+ "name": "TeX Gyre Termes",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraSans-BoldItalic.ttf",
+ "name": "Fira Sans",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/NotoSerif-Bold.ttf",
+ "name": "Noto Serif",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/Ubuntu-Italic.ttf",
+ "name": "Ubuntu",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSansPro-SemiBoldItalic.ttf",
+ "name": "Source Sans Pro",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 600,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/Roboto-Italic.ttf",
+ "name": "Roboto",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSerifPro-BlackItalic.ttf",
+ "name": "Source Serif Pro",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 900,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSansPro-BoldItalic.ttf",
+ "name": "Source Sans Pro",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSansPro-BlackItalic.ttf",
+ "name": "Source Sans Pro",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 900,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraMath-SemiBold.ttf",
+ "name": "Fira Math",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 600,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/OpenSans-BoldItalic.ttf",
+ "name": "Open Sans",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/Ubuntu-LightItalic.ttf",
+ "name": "Ubuntu",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 300,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyreadventor-regular.ttf",
+ "name": "TeX Gyre Adventor",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/NotoSerif-BoldItalic.ttf",
+ "name": "Noto Serif",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyrebonum-bolditalic.ttf",
+ "name": "TeX Gyre Bonum",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/Ubuntu-Light.ttf",
+ "name": "Ubuntu",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 300,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/NotoSerif-Regular.ttf",
+ "name": "Noto Serif",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/NotoSans-Italic.ttf",
+ "name": "Noto Sans",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraSans-LightItalic.ttf",
+ "name": "Fira Sans",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 300,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraSans-ExtraBold.ttf",
+ "name": "Fira Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 800,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSansPro-ExtraLight.ttf",
+ "name": "Source Sans Pro",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 275,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraSans-Light.ttf",
+ "name": "Fira Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 300,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraSans-Medium.ttf",
+ "name": "Fira Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 500,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyrecursor-regular.ttf",
+ "name": "TeX Gyre Cursor",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraMath-Regular.ttf",
+ "name": "Fira Math",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSansPro-LightItalic.ttf",
+ "name": "Source Sans Pro",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 300,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSansPro-SemiBold.ttf",
+ "name": "Source Sans Pro",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 600,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraMath-Bold.ttf",
+ "name": "Fira Math",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraSans-Black.ttf",
+ "name": "Fira Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 900,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyreadventor-bold.ttf",
+ "name": "TeX Gyre Adventor",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraSans-Regular.ttf",
+ "name": "Fira Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/Roboto-BoldItalic.ttf",
+ "name": "Roboto",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyreheros-bold.ttf",
+ "name": "TeX Gyre Heros",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyrecursor-bold.ttf",
+ "name": "TeX Gyre Cursor",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyrebonum-bold.ttf",
+ "name": "TeX Gyre Bonum",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSerifPro-LightItalic.ttf",
+ "name": "Source Serif Pro",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 300,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyrepagella-italic.ttf",
+ "name": "TeX Gyre Pagella",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSansPro-Regular.ttf",
+ "name": "Source Sans Pro",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSansPro-Light.ttf",
+ "name": "Source Sans Pro",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 300,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/Ubuntu-BoldItalic.ttf",
+ "name": "Ubuntu",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyrepagella-bolditalic.ttf",
+ "name": "TeX Gyre Pagella",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyretermes-bolditalic.ttf",
+ "name": "TeX Gyre Termes",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/FiraSans-Italic.ttf",
+ "name": "Fira Sans",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSerifPro-Italic.ttf",
+ "name": "Source Serif Pro",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/NotoSans-Regular.ttf",
+ "name": "Noto Sans",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/Roboto-MediumItalic.ttf",
+ "name": "Roboto",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 500,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/Roboto-Bold.ttf",
+ "name": "Roboto",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/texgyrepagella-regular.ttf",
+ "name": "TeX Gyre Pagella",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSerifPro-Bold.ttf",
+ "name": "Source Serif Pro",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 700,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSerifPro-ExtraLight.ttf",
+ "name": "Source Serif Pro",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 200,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/SourceSerifPro-Black.ttf",
+ "name": "Source Serif Pro",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 900,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/Ubuntu-Regular.ttf",
+ "name": "Ubuntu",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 400,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/OpenSans-SemiboldItalic.ttf",
+ "name": "Open Sans",
+ "style": "italic",
+ "variant": "normal",
+ "weight": 600,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ },
+ {
+ "fname": "/Users/vanelter@qut.edu.au/Documents/UltraPlot/ultraplot/fonts/Roboto-Light.ttf",
+ "name": "Roboto",
+ "style": "normal",
+ "variant": "normal",
+ "weight": 300,
+ "stretch": "normal",
+ "size": "scalable",
+ "__class__": "FontEntry"
+ }
+ ],
+ "__class__": "FontManager"
+}
\ No newline at end of file
diff --git a/.rules b/.rules
new file mode 100644
index 000000000..2b9a31a90
--- /dev/null
+++ b/.rules
@@ -0,0 +1,8 @@
+# Project Environment Instructions
+
+1. ENVIRONMENT: We are using `micromamba` with the environment `ultraplot-dev`.
+ - ALWAYS assume `micromamba run -n ultraplot-dev` for any shell commands.
+ - Do NOT suggest pip or conda unless explicitly asked.
+
+2. LIBRARIES:
+ - Use `ultraplot` for plotting (not standard matplotlib).
diff --git a/0668eeb253c4ff894fc717543ee2109bad67851d b/0668eeb253c4ff894fc717543ee2109bad67851d
new file mode 100644
index 000000000..e69de29bb
diff --git a/2c9393c50542e26bee6a767d2013afc9a23ea6cf b/2c9393c50542e26bee6a767d2013afc9a23ea6cf
new file mode 100644
index 000000000..e69de29bb
diff --git a/6bcea81c528fbbe599e4833a520330d41bbe1486 b/6bcea81c528fbbe599e4833a520330d41bbe1486
new file mode 100644
index 000000000..e69de29bb
diff --git a/AGENTS.md b/AGENTS.md
new file mode 100644
index 000000000..8aebd54c8
--- /dev/null
+++ b/AGENTS.md
@@ -0,0 +1,162 @@
+# AGENTS.md
+## Instructions for AI Agents and Automated Assistants
+
+This repository is actively maintained and may be worked on by AI agents
+(e.g. Codex, Copilot, Claude, Gemini, ChatGPT).
+If you are an AI agent, **read and follow this document before making changes**.
+
+Use micromamba env ultraplot-dev
+
+---
+
+## 1. Role and Expectations
+
+You are assisting as a **senior research-software collaborator**, not a novice.
+
+Your goals:
+- Produce **clean, maintainable, performant** code
+- Preserve **API stability** unless explicitly asked to break it
+- Match the project’s existing **style and abstractions**
+- Prefer **clarity and correctness** over cleverness
+
+Assume the human maintainer:
+- Is technically advanced
+- Understands mathematics, statistics, and software design
+- Prefers direct, precise communication
+
+---
+
+## 2. Defaults
+
+Unless stated otherwise:
+
+- **Language**: Python
+- **Style**: explicit, readable, minimal magic
+- **Audience**: research-grade users and maintainers
+- **Environment**: modern Python (type hints welcome, but not mandatory)
+- **Visualization**: publication-quality, not exploratory throwaways
+
+Avoid:
+- Over-explaining basics
+- Unnecessary abstraction layers
+- Silent behavioral changes
+
+---
+
+## 3. Code Quality Rules
+
+### Structure
+- Follow existing module and file layout
+- Reuse internal utilities instead of duplicating logic
+- Prefer small, composable functions over large scripts
+
+### APIs
+- Do not change public APIs without explicit instruction
+- If an API change is beneficial, **propose it first**
+- Preserve backwards compatibility where feasible
+
+### Performance
+- Avoid unnecessary copies and allocations
+- Prefer vectorized / batched operations when appropriate
+- Be mindful of large datasets and plotting performance
+
+---
+
+
+## 4. Plotting & Visualization Philosophy
+
+This project prefers **UltraPlot** for plotting whenever possible.
+
+Guidelines:
+- **Use `ultraplot` instead of raw Matplotlib** when it is available and appropriate
+- Follow UltraPlot conventions for:
+ - layout
+ - sizing
+ - axis sharing
+ - colorbars
+- Fall back to Matplotlib only if UltraPlot cannot reasonably support the use case
+
+Plots should be:
+- Reproducible
+- Visually clean
+- Suitable for papers and presentations
+
+Additional rules:
+- Avoid default Matplotlib aesthetics unless styled intentionally
+- Axes, labels, and legends must be meaningful
+- Layout matters (spacing, aspect ratios, shared axes)
+
+If suggesting new plot types or visual features:
+- Explain *why* they add value
+- Note tradeoffs and limitations
+- Consider how they would integrate with UltraPlot’s API
+
+---
+
+## 5. Testing & Validation
+
+- Add tests for new functionality when reasonable
+- Prefer minimal, focused tests over broad integration tests
+- Do not break existing tests
+- If behavior changes, document it clearly
+
+---
+
+## 6. Documentation & Comments
+
+- Document **why**, not just **what**
+- Public functions/classes should have docstrings
+- Keep comments concise and relevant
+- Avoid redundant or obvious comments
+
+---
+
+## 7. Communication Style
+
+When responding to the maintainer:
+
+- Be concise but precise
+- Flag edge cases and assumptions
+- Suggest improvements rather than asserting them
+- If something is ambiguous, propose a reasonable default and explain it
+
+Use phrases like:
+- “I’d suggest…”
+- “One tradeoff here is…”
+- “If backward compatibility matters, then…”
+
+Avoid:
+- Apologetic tone
+- Marketing language
+- Overconfident claims without justification
+
+---
+
+## 8. When Unsure
+
+If instructions are unclear:
+1. State your interpretation
+2. Proceed with a reasonable assumption
+3. Clearly mark it as such
+
+Do **not** stall or ask trivial clarification questions unless necessary.
+
+---
+
+## 9. Scope Control
+
+You should:
+- Stay within the requested scope
+- Avoid refactoring unrelated code
+- Avoid stylistic churn
+
+Large refactors require explicit approval.
+
+---
+
+## 10. Summary (for fast-reading agents)
+
+- You are a **collaborator**, not a tutorial bot
+- Prioritize **clean APIs, correctness, and clarity**
+- Respect existing design choices
+- Assume a technically strong human reviewer
diff --git a/a80b00286c178bcdb8e6d77c15ee7f085beeedeb b/a80b00286c178bcdb8e6d77c15ee7f085beeedeb
new file mode 100644
index 000000000..e69de29bb
diff --git a/c80b83d232b737972e1d3b9c04d493df1b6269ed b/c80b83d232b737972e1d3b9c04d493df1b6269ed
new file mode 100644
index 000000000..e69de29bb
diff --git a/docs/.doc_cache/doctree_cache.json b/docs/.doc_cache/doctree_cache.json
new file mode 100644
index 000000000..9e26dfeeb
--- /dev/null
+++ b/docs/.doc_cache/doctree_cache.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/docs/.doc_cache/file_hashes.json b/docs/.doc_cache/file_hashes.json
new file mode 100644
index 000000000..c3a0f83f7
--- /dev/null
+++ b/docs/.doc_cache/file_hashes.json
@@ -0,0 +1,3 @@
+{
+ "source_hash": "d6508c8cb366e42853a7d45da39d6ab907541fa845b229bde6b27cc274f686a8"
+}
\ No newline at end of file
diff --git a/docs/.doc_cache/notebook_cache.json b/docs/.doc_cache/notebook_cache.json
new file mode 100644
index 000000000..9e26dfeeb
--- /dev/null
+++ b/docs/.doc_cache/notebook_cache.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/docs/INTEGRATION_GUIDE.md b/docs/INTEGRATION_GUIDE.md
new file mode 100644
index 000000000..d880b3b38
--- /dev/null
+++ b/docs/INTEGRATION_GUIDE.md
@@ -0,0 +1,265 @@
+# Documentation Caching System Integration Guide
+
+This guide explains how the new documentation caching system integrates with UltraPlot's existing infrastructure.
+
+## Overview
+
+The caching system has been designed to work seamlessly with:
+
+1. **Existing build processes**: Compatible with current `jcache` notebook caching
+2. **GitHub Actions**: Optimized for CI/CD environments using micromamba
+3. **ReadTheDocs**: Complements the existing ReadTheDocs configuration
+4. **Local development**: Provides fast incremental builds during development
+
+## Files Added/Modified
+
+### New Files
+
+1. **`docs/cache_docs.py`**
+ - Main cache management utility
+ - Handles file hashing, change detection, and cache operations
+ - Provides command-line interface for cache management
+
+2. **`docs/build_docs_cached.sh`**
+ - Drop-in replacement for `build_docs.sh`
+ - Checks if rebuild is needed before starting
+ - Only executes changed notebooks
+ - Uses parallel Sphinx builds
+
+3. **`docs/CACHING.md`**
+ - Comprehensive documentation of the caching system
+ - Usage examples and troubleshooting guide
+ - Performance benchmarks and integration details
+
+4. **`docs/test_github_actions.py`**
+ - Test script for GitHub Actions environment
+ - Verifies cache system functionality without full build
+ - Ensures compatibility with CI/CD environment
+
+5. **`.github/workflows/docs-cache.yml`**
+ - GitHub Actions workflow for documentation caching
+ - Automatic cache detection and selective rebuilding
+ - Cache verification and validation
+
+6. **`.github/workflows/README-docs-cache.md`**
+ - Documentation for the GitHub Actions workflow
+ - Setup instructions and customization options
+ - Troubleshooting guide
+
+7. **`docs/INTEGRATION_GUIDE.md`** (this file)
+ - Integration guide for the caching system
+ - Migration instructions and best practices
+
+### Modified Files
+
+1. **`docs/build_docs.sh`**
+ - Added parallel build support (`-j auto`)
+ - Maintained compatibility with existing `jcache` system
+
+2. **`docs/conf.py`**
+ - Added caching optimizations
+ - Enabled parallel builds
+ - Disabled smart quotes for better caching
+
+3. **`environment.yml`**
+ - Added `jcache` package to dependencies
+ - Ensures notebook caching works in all environments
+
+## Integration Points
+
+### 1. Build Process Integration
+
+The caching system integrates at multiple levels:
+
+```mermaid
+graph TD
+ A[Source Files] -->|Hashing| B[Cache Manager]
+ B -->|Change Detection| C{Rebuild Needed?}
+ C -->|No| D[Use Cached Results]
+ C -->|Yes| E[Selective Execution]
+ E -->|Changed Notebooks| F[jcache notebook execute]
+ E -->|All Files| G[Sphinx Build]
+ G -->|Parallel| H[Doctree Generation]
+ H -->|Cache| B
+```
+
+### 2. GitHub Actions Integration
+
+The workflow integrates with existing CI/CD:
+
+```yaml
+# Existing workflows continue to work
+- name: Existing tests
+ run: pytest ultraplot/tests
+
+# New caching workflow runs separately
+- name: Documentation Cache
+ uses: ./.github/workflows/docs-cache.yml
+```
+
+### 3. ReadTheDocs Integration
+
+The system complements ReadTheDocs:
+
+```
+Local Development → GitHub Actions Cache → ReadTheDocs Production
+ (Fast iteration) (Verification) (Official builds)
+```
+
+## Migration Guide
+
+### For Developers
+
+1. **Install dependencies**:
+ ```bash
+ conda env update -f environment.yml
+ ```
+
+2. **Use cached builds**:
+ ```bash
+ cd docs
+ ./build_docs_cached.sh # Instead of build_docs.sh
+ ```
+
+3. **Check cache status**:
+ ```bash
+ python cache_docs.py check
+ python cache_docs.py info
+ ```
+
+### For CI/CD
+
+1. **No changes required**: Existing workflows continue to work
+2. **Optional enhancement**: Add cache workflow for faster builds
+3. **Monitor performance**: Track build time improvements
+
+### For ReadTheDocs
+
+1. **No changes required**: ReadTheDocs configuration unchanged
+2. **Benefits**: Faster local testing before pushing to ReadTheDocs
+3. **Verification**: Use GitHub Actions to test builds before ReadTheDocs
+
+## Compatibility
+
+### Backward Compatibility
+
+- **Existing scripts**: `build_docs.sh` still works (now with parallel builds)
+- **Existing workflows**: No breaking changes to CI/CD
+- **Existing documentation**: No changes to content or structure
+
+### Forward Compatibility
+
+- **Future Sphinx versions**: Uses standard Sphinx APIs
+- **Future Python versions**: Uses standard library features
+- **Future caching systems**: Modular design allows easy replacement
+
+## Performance Optimization
+
+### Build Time Comparison
+
+| Scenario | Before | After | Improvement |
+|----------|--------|-------|-------------|
+| No changes | 5-15 min | 30 sec - 2 min | 75-95% faster |
+| Minor changes | 5-15 min | 1-3 min | 60-80% faster |
+| Major changes | 5-15 min | 2-5 min | 50-70% faster |
+
+### Resource Usage
+
+- **CPU**: Parallel builds utilize multiple cores
+- **Memory**: Cache files are small (< 10MB typically)
+- **Storage**: Minimal overhead for cache files
+
+## Best Practices
+
+### Development Workflow
+
+1. **Check cache before building**:
+ ```bash
+ python cache_docs.py check
+ ```
+
+2. **Clear cache when needed**:
+ ```bash
+ python cache_docs.py clear
+ ```
+
+3. **Use cached builds by default**:
+ ```bash
+ ./build_docs_cached.sh
+ ```
+
+### CI/CD Workflow
+
+1. **Let GitHub Actions handle caching**: No manual intervention needed
+2. **Monitor cache hit/miss ratios**: Check workflow logs
+3. **Periodically clear cache**: Prevent stale data accumulation
+
+### ReadTheDocs Workflow
+
+1. **Test locally first**: Use cached builds for fast iteration
+2. **Verify in GitHub Actions**: Ensure builds work before pushing
+3. **Push to ReadTheDocs**: Confident that builds will succeed
+
+## Troubleshooting
+
+### Common Issues
+
+1. **Cache not working**:
+ - Check cache directory permissions
+ - Verify cache files are being created
+ - Run `python cache_docs.py info` for debugging
+
+2. **False rebuilds**:
+ - Check file timestamps and hashes
+ - Verify cache key stability
+ - Clear cache and rebuild
+
+3. **Missing dependencies**:
+ - Ensure `jcache` is installed (`conda install jcache`)
+ - Check environment.yml for all dependencies
+
+### Debugging Commands
+
+```bash
+# Check cache status
+python cache_docs.py info
+
+# Force clear cache
+python cache_docs.py clear
+
+# Test cache system
+python test_github_actions.py
+
+# Manual cache operations
+python cache_docs.py cache_doctrees _build/doctrees
+```
+
+## Future Enhancements
+
+The system is designed for extensibility:
+
+1. **Distributed caching**: Share cache between developers
+2. **Fine-grained caching**: Cache individual documentation pages
+3. **Dependency tracking**: Track inter-page dependencies
+4. **Cache analytics**: Collect usage statistics
+5. **Automatic cache cleanup**: Schedule regular cache maintenance
+
+## Support
+
+For issues with the caching system:
+
+1. **Check documentation**: `docs/CACHING.md`
+2. **Run tests**: `python test_github_actions.py`
+3. **Review logs**: GitHub Actions workflow logs
+4. **Open issue**: GitHub issue tracker with details
+
+## Conclusion
+
+The documentation caching system provides significant performance improvements while maintaining full compatibility with existing workflows. It integrates seamlessly with:
+
+- **Local development**: Fast incremental builds
+- **GitHub Actions**: Automatic caching in CI/CD
+- **ReadTheDocs**: Complementary to production builds
+- **Existing processes**: No breaking changes
+
+Developers can adopt the system gradually, starting with local usage and expanding to CI/CD as needed.
\ No newline at end of file
diff --git a/docs/_templates/gallery_sidebar.html b/docs/_templates/gallery_sidebar.html
new file mode 100644
index 000000000..73461fbbc
--- /dev/null
+++ b/docs/_templates/gallery_sidebar.html
@@ -0,0 +1,8 @@
+{# Custom sidebar for gallery page - empty to avoid TOC #}
+
+
+
diff --git a/docs/examples/plot_types/07_sankey.py b/docs/examples/plot_types/07_sankey.py
new file mode 100644
index 000000000..c9aee7c57
--- /dev/null
+++ b/docs/examples/plot_types/07_sankey.py
@@ -0,0 +1,42 @@
+"""
+Layered Sankey diagram
+======================
+
+An example of UltraPlot's layered Sankey renderer for publication-ready
+flow diagrams.
+
+Why UltraPlot here?
+-------------------
+``sankey`` in layered mode handles node ordering, flow styling, and
+label placement without manual geometry.
+
+Key function: :py:meth:`ultraplot.axes.PlotAxes.sankey`.
+
+See also
+--------
+* :doc:`2D plot types 2dplots>`
+"""
+
+import ultraplot as uplt
+
+nodes = ["Budget", "Operations", "R&D", "Marketing", "Support", "Infra"]
+flows = [
+ ("Budget", "Operations", 5.0, "Ops"),
+ ("Budget", "R&D", 3.0, "R&D"),
+ ("Budget", "Marketing", 2.0, "Mkt"),
+ ("Operations", "Support", 1.5, "Support"),
+ ("Operations", "Infra", 2.0, "Infra"),
+]
+
+fig, ax = uplt.subplots(refwidth=3.6)
+ax.sankey(
+ nodes=nodes,
+ flows=flows,
+ style="budget",
+ flow_labels=True,
+ value_format="{:.1f}",
+ node_label_box=True,
+ flow_label_pos=0.5,
+)
+ax.format(title="Budget allocation")
+fig.show()
diff --git a/docs/sg_execution_times.rst b/docs/sg_execution_times.rst
new file mode 100644
index 000000000..170e3a4ae
--- /dev/null
+++ b/docs/sg_execution_times.rst
@@ -0,0 +1,82 @@
+
+:orphan:
+
+.. _sphx_glr_sg_execution_times:
+
+
+Computation times
+=================
+**00:06.688** total execution time for 16 files **from all galleries**:
+
+.. container::
+
+ .. raw:: html
+
+
+
+
+
+
+
+ .. list-table::
+ :header-rows: 1
+ :class: table table-striped sg-datatable
+
+ * - Example
+ - Time
+ - Mem (MB)
+ * - :ref:`sphx_glr_gallery_geo_03_projections_features.py` (``examples/geo/03_projections_features.py``)
+ - 00:04.404
+ - 0.0
+ * - :ref:`sphx_glr_gallery_layouts_03_spanning_labels.py` (``examples/layouts/03_spanning_labels.py``)
+ - 00:01.484
+ - 0.0
+ * - :ref:`sphx_glr_gallery_geo_01_robin_tracks.py` (``examples/geo/01_robin_tracks.py``)
+ - 00:00.800
+ - 0.0
+ * - :ref:`sphx_glr_gallery_colors_01_cycle_colormap.py` (``examples/colors/01_cycle_colormap.py``)
+ - 00:00.000
+ - 0.0
+ * - :ref:`sphx_glr_gallery_colors_02_diverging_colormap.py` (``examples/colors/02_diverging_colormap.py``)
+ - 00:00.000
+ - 0.0
+ * - :ref:`sphx_glr_gallery_geo_02_orthographic_views.py` (``examples/geo/02_orthographic_views.py``)
+ - 00:00.000
+ - 0.0
+ * - :ref:`sphx_glr_gallery_layouts_01_shared_axes_abc.py` (``examples/layouts/01_shared_axes_abc.py``)
+ - 00:00.000
+ - 0.0
+ * - :ref:`sphx_glr_gallery_layouts_02_complex_layout_insets.py` (``examples/layouts/02_complex_layout_insets.py``)
+ - 00:00.000
+ - 0.0
+ * - :ref:`sphx_glr_gallery_legends_colorbars_01_multi_colorbars.py` (``examples/legends_colorbars/01_multi_colorbars.py``)
+ - 00:00.000
+ - 0.0
+ * - :ref:`sphx_glr_gallery_legends_colorbars_02_legend_inset_colorbar.py` (``examples/legends_colorbars/02_legend_inset_colorbar.py``)
+ - 00:00.000
+ - 0.0
+ * - :ref:`sphx_glr_gallery_plot_types_01_curved_quiver.py` (``examples/plot_types/01_curved_quiver.py``)
+ - 00:00.000
+ - 0.0
+ * - :ref:`sphx_glr_gallery_plot_types_02_network_graph.py` (``examples/plot_types/02_network_graph.py``)
+ - 00:00.000
+ - 0.0
+ * - :ref:`sphx_glr_gallery_plot_types_03_lollipop.py` (``examples/plot_types/03_lollipop.py``)
+ - 00:00.000
+ - 0.0
+ * - :ref:`sphx_glr_gallery_plot_types_04_datetime_series.py` (``examples/plot_types/04_datetime_series.py``)
+ - 00:00.000
+ - 0.0
+ * - :ref:`sphx_glr_gallery_plot_types_05_box_violin.py` (``examples/plot_types/05_box_violin.py``)
+ - 00:00.000
+ - 0.0
+ * - :ref:`sphx_glr_gallery_plot_types_06_ridge_plot.py` (``examples/plot_types/06_ridge_plot.py``)
+ - 00:00.000
+ - 0.0
diff --git a/docs/simple_test.py b/docs/simple_test.py
new file mode 100644
index 000000000..0c58a1566
--- /dev/null
+++ b/docs/simple_test.py
@@ -0,0 +1,34 @@
+#!/usr/bin/env python3
+
+import hashlib
+import json
+from pathlib import Path
+
+# Test basic functionality
+print("Testing basic hash functionality...")
+
+# Test file hashing
+test_file = Path("simple_test.py")
+if test_file.exists():
+ hash_obj = hashlib.sha256()
+ with open(test_file, "rb") as f:
+ hash_obj.update(f.read())
+ file_hash = hash_obj.hexdigest()
+ print(f"✓ File hash calculated: {file_hash[:16]}...")
+else:
+ print("✗ Test file not found")
+
+# Test JSON operations
+cache_data = {"test": "value", "hash": file_hash}
+with open(".test_cache.json", "w") as f:
+ json.dump(cache_data, f)
+print("✓ JSON cache file created")
+
+# Read it back
+with open(".test_cache.json", "r") as f:
+ loaded_data = json.load(f)
+print(f"✓ JSON cache file read: {loaded_data['test']}")
+
+# Clean up
+Path(".test_cache.json").unlink()
+print("✓ Test completed successfully!")
diff --git a/docs/whats_new.rst b/docs/whats_new.rst
new file mode 100644
index 000000000..375d3b0c7
--- /dev/null
+++ b/docs/whats_new.rst
@@ -0,0 +1,1160 @@
+.. _whats_new:
+
+What's new?
+===========
+
+v1.70.0: 🚀 UltraPlot v1.70.0: Smart Layouts, Better Maps, and Scientific Publishing Support (2026-01-04)
+--------------------------------------------------------------------------------------------------------
+
+.. role:: raw-html-m2r(raw)
+ :format: html
+
+
+**High-Level Overview:** This release focuses on intelligent layout management, geographic plotting enhancements, and publication-ready features. Geographic plots receive improved boundary label handling and rotation capabilities, while new Copernicus Publications standard widths support scientific publishing workflows. Various bug fixes and documentation improvements round out this release.
+
+Major Changes:
+""""""""""""""
+
+1. **Geographic Plot Enhancements**
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+:raw-html-m2r:`
`
+
+.. code-block:: python
+
+ # Improved boundary labels and rotation
+ fig, ax = uplt.subplots(projection="cyl")
+ ax.format(
+ lonlim=(-180, 180),
+ latlim=(-90, 90),
+ lonlabelrotation=45, # new parameter
+ labels=True,
+ land=True,
+ )
+ # Boundary labels now remain visible and can be rotated
+
+2. **Copernicus Publications Support**
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. code-block:: python
+
+ # New standard figure widths for scientific publishing
+ fig = uplt.figure(journal = "cop1")
+ # Automatically sets appropriate width for Copernicus Publications
+
+3. **Legend Placement Improvements**
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+:raw-html-m2r:`
`
+
+.. code-block:: python
+
+ import numpy as np
+
+ import ultraplot as uplt
+
+ np.random.seed(0)
+ fig, ax = uplt.subplots(ncols=2, nrows=2)
+ handles = []
+ for idx, axi in enumerate(ax):
+ noise = np.random.randn(100) * idx
+ angle = np.random.rand() * 2 * np.pi
+ t = np.linspace(0, 2 * np.pi, noise.size)
+ y = np.sin(t * angle) + noise[1]
+ (h,) = axi.plot(t, y, label=f"$f_{idx}$")
+ handles.append(h)
+
+ # New: spanning legends
+ fig.legend(handles=handles, ax=ax[0, :], span=(1, 2), loc="b")
+ fig.show()
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* Bump actions/checkout from 5 to 6 in the github-actions group by @dependabot[bot] in https://github.com/Ultraplot/UltraPlot/pull/415
+* [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in https://github.com/Ultraplot/UltraPlot/pull/416
+* Add placement of legend to axes within a figure (https://github.com/Ultraplot/UltraPlot/pull/418)
+* There's a typo about zerotrim in doc. (https://github.com/Ultraplot/UltraPlot/pull/420)
+* Fix references in documentation for clarity (https://github.com/Ultraplot/UltraPlot/pull/421)
+* fix links to apply_norm (https://github.com/Ultraplot/UltraPlot/pull/423)
+* [Feature] add lon lat labelrotation (https://github.com/Ultraplot/UltraPlot/pull/426)
+* Fix: Boundary labels now visible when setting lonlim/latlim (https://github.com/Ultraplot/UltraPlot/pull/429)
+* Add Copernicus Publications figure standard widths (https://github.com/Ultraplot/UltraPlot/pull/433)
+* Fix 2D indexing for gridpec (https://github.com/Ultraplot/UltraPlot/pull/435)
+* Fix GeoAxes panel alignment with aspect-constrained projections (https://github.com/Ultraplot/UltraPlot/pull/432)
+* Bump the github-actions group with 2 updates by @dependabot[bot] in https://github.com/Ultraplot/UltraPlot/pull/444
+* Fix dualx alignment on log axes (https://github.com/Ultraplot/UltraPlot/pull/443)
+* Subset label sharing and implicit slice labels for axis groups (https://github.com/Ultraplot/UltraPlot/pull/440)
+* Preserve log formatter when setting log scales (https://github.com/Ultraplot/UltraPlot/pull/437)
+* Feature: added inference of labels for spanning legends (https://github.com/Ultraplot/UltraPlot/pull/447)
+
+New Contributors
+~~~~~~~~~~~~~~~~
+
+
+* @gepcel made their first contribution in https://github.com/Ultraplot/UltraPlot/pull/420
+* @Holmgren825 made their first contribution in https://github.com/Ultraplot/UltraPlot/pull/433
+
+**Full Changelog**\ : https://github.com/Ultraplot/UltraPlot/compare/v1.66.0...v1.70.0
+
+v1.66.0: New feature: External Contexts, and bug splats 🐛 (2025-11-22)
+----------------------------------------------------------------------
+
+Release Notes
+-------------
+
+This release introduces two key improvements to enhance compatibility and consistency.
+
+External Contexts
+~~~~~~~~~~~~~~~~~
+
+UltraPlot provides sensible defaults by controlling matplotlib's internal mechanics and applying overrides when needed. While this approach works well in isolation, it can create conflicts when integrating with external libraries.
+
+We've introduced a new ``external`` context that disables UltraPlot-specific features when working with third-party libraries. Currently, this context prevents conflicts with internally generated labels in Seaborn plots. We plan to extend this functionality to support broader library compatibility in future releases.
+
+**Example usage with Seaborn:**
+
+.. code-block:: python
+
+ import seaborn as sns
+ import ultraplot as uplt
+
+ # Load example dataset
+ tips = sns.load_dataset("tips")
+
+ # Use external context to avoid label conflicts
+ fig, ax = uplt.subplots()
+ with ax.external():
+ sns.lineplot(data=tips, x="size", y="total_bill", hue="day", ax = ax)
+
+Standardized Binning Functions
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+We've standardized the default aggregation function across all binning operations to use ``sum``. This change affects ``hexbin``\ , which previously defaulted to averaging values. All binning functions now consistently use ``sum`` as the default, though you can specify any custom aggregation function via the ``reduce_C_function`` parameter.
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* Hotfix: unsharing causes excessive draw in jupyter (https://github.com/Ultraplot/UltraPlot/pull/411)
+* Hotfix: bar labels cause limit to reset for unaffected axis. (https://github.com/Ultraplot/UltraPlot/pull/413)
+* fix: change default ``reduce_C_function`` to ``np.sum`` for ``hexbin`` (https://github.com/Ultraplot/UltraPlot/pull/408)
+* Add external context mode for axes (https://github.com/Ultraplot/UltraPlot/pull/406)
+
+**Full Changelog**\ : https://github.com/Ultraplot/UltraPlot/compare/v1.65.1...v1.66.0
+
+v1.65.1: Hot-fix: add minor issue where boxpct was not parsed properly (2025-11-02)
+-----------------------------------------------------------------------------------
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* Bump the github-actions group with 2 updates by @dependabot[bot] in https://github.com/Ultraplot/UltraPlot/pull/398
+* Fix missing s on input parsing for boxpercentiles (https://github.com/Ultraplot/UltraPlot/pull/400)
+
+**Full Changelog**\ : https://github.com/Ultraplot/UltraPlot/compare/v1.65.0...v1.65.1
+
+v1.65.0: Enhanced Grid Layouts and Multi-Span Colorbars (2025-10-31)
+--------------------------------------------------------------------
+
+.. role:: raw-html-m2r(raw)
+ :format: html
+
+
+:art: UltraPlot v1.65 release notes
+-----------------------------------
+
+This release introduces substantial improvements to subplot layout flexibility and configuration management for scientific visualization.
+
+Key Features
+~~~~~~~~~~~~
+
+**Non-Rectangular Grid Layouts with Side Labels** (\ `#376 `_\ )\ :raw-html-m2r:`
`
+Asymmetric subplot arrangements now support proper axis labeling, enabling complex multi-panel figures without manual positioning workarounds.
+
+**Multi-Span Colorbars** (\ `#394 `_\ )\ :raw-html-m2r:`
`
+Colorbars can span multiple subplots, eliminating redundant color scales in comparative visualizations.
+
+**RC-Configurable Color Cycles** (\ `#378 `_\ )\ :raw-html-m2r:`
`
+Cycle objects can be set via rc configuration, enabling consistent color schemes across figures and projects.
+
+**Improved Label Sharing** (\ `#372 `_\ , `#387 `_\ )\ :raw-html-m2r:`
`
+Enhanced logic for axis label sharing in complex grid configurations with expanded test coverage.
+
+Infrastructure
+~~~~~~~~~~~~~~
+
+
+* Automatic version checking (\ `#377 `_\ ). Users can now get informed when a new version is available by setting ``uplt.rc["ultraplot.check_for_latest_version"] = True`` which will drop a warning if a newer version is available.
+* Demo gallery unit tests (\ `#386 `_\ )
+* Optimized CI/CD workflow (\ `#388 `_\ , `#389 `_\ , `#390 `_\ , `#391 `_\ )
+
+Impact
+~~~~~~
+
+These changes address common pain points in creating publication-quality multi-panel figures, particularly for comparative analyses requiring consistent styling and efficient use of figure space.
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* Allow non-rectangular grids to use side labels (https://github.com/Ultraplot/UltraPlot/pull/376)
+* Test/update label sharing tests (https://github.com/Ultraplot/UltraPlot/pull/372)
+* Add version checker for UltraPlot (https://github.com/Ultraplot/UltraPlot/pull/377)
+* Feature: allow cycle objects to be set on rc (https://github.com/Ultraplot/UltraPlot/pull/378)
+* Add unittest for demos (https://github.com/Ultraplot/UltraPlot/pull/386)
+* Increase timeout on GHA (https://github.com/Ultraplot/UltraPlot/pull/388)
+* bump to 60 minutes (https://github.com/Ultraplot/UltraPlot/pull/389)
+* Skip test_demos on gha (https://github.com/Ultraplot/UltraPlot/pull/391)
+* Hotfix: minor update in sharing logic (https://github.com/Ultraplot/UltraPlot/pull/387)
+* Housekeeping for ``ultraplot-build.yml`` (https://github.com/Ultraplot/UltraPlot/pull/390)
+* Feature: Allow multi-span colorbars (https://github.com/Ultraplot/UltraPlot/pull/394)
+
+**Full Changelog**\ : https://github.com/Ultraplot/UltraPlot/compare/v1.63.0...v1.65.0
+
+v1.63.0: 🌀 New Feature: Curved Quiver (2025-10-14)
+---------------------------------------------------
+
+.. role:: raw-html-m2r(raw)
+ :format: html
+
+
+This release introduces ``curved_quiver``\ , a new plotting primitive that renders compact, curved arrows following the local direction of a vector field. It’s designed to bridge the gap between ``quiver`` (straight, local glyphs) and ``streamplot`` (continuous, global trajectories): you retain the discrete arrow semantics of ``quiver``\ , but you gain local curvature that more faithfully communicates directional change.
+
+:raw-html-m2r:`
`
+
+What it does
+------------
+
+Under the hood, the implementation follows the same robust foundations as ``matplotlib``\ ’s streamplot, adapted to generate short, curved arrow segments instead of full streamlines. As such it can be seen as in between ``streamplot`` and ``quiver`` plots, see figure below and above.
+
+:raw-html-m2r:`
`
+
+The core types live in ``ultraplot/axes/plot_types/curved_quiver.py`` and are centered on ``CurvedQuiverSolver``\ , which coordinates grid/coordinate mapping, seed point generation, trajectory integration, and spacing control:
+
+
+*
+ ``_CurvedQuiverGrid`` validates and models the input grid. It ensures the x grid is rectilinear with equal rows and the y grid with equal columns, computes ``dx``\ /\ ``dy``\ , and exposes grid shape and extent. This means ``curved_quiver`` is designed for rectilinear grids where rows/columns of ``x``\ /\ ``y`` are consistent, matching the expectations of stream/line-based vector plotting.
+
+*
+ ``_DomainMap`` maintains transformations among data-, grid-, and mask-coordinates. Velocity components are rescaled into grid-coordinates for integration, and speed is normalized to axes-coordinates so that step sizes and error metrics align with the visual output (this is important for smooth curves at different figure sizes and grid densities). It also owns bookkeeping for the spacing mask.
+
+*
+ ``_StreamMask`` enforces spacing between trajectories at a coarse mask resolution, much like ``streamplot`` spacing. As a trajectory advances, the mask is filled where the curve passes, preventing new trajectories from entering already-occupied cells. This avoids over-plotting and stabilizes density in a way that feels consistent with ``streamplot`` output while still generating discrete arrows.
+
+*
+ Integration is handled by a second-order *Runge–Kutta* method with adaptive step sizing, implemented in ``CurvedQuiverSolver.integrate_rk12``. This “improved Euler” approach is chosen for a balance of speed and visual smoothness. It uses an error metric in axes-coordinates to adapt the step size ``ds``. A maximum step (\ ``maxds``\ ) is also enforced to prevent skipping mask cells. The integration proceeds forward from each seed point, terminating when any of the following hold: the curve exits the domain, an intermediate integration step would go out of bounds (in which case a single Euler step to the boundary is taken for neatness), a local zero-speed region is detected, or the path reaches the target arc length set by the visual resolution. Internally, that arc length is bounded by a threshold proportional to the mean of the sampled magnitudes along the curve, which is how ``scale`` effectively maps to a “how far to bend” control in physical units.
+
+*
+ Seed points are generated uniformly over the data extent via ``CurvedQuiverSolver.gen_starting_points``\ , using ``grains × grains`` positions. Increasing ``grains`` increases the number of potential arrow locations and produces smoother paths because more micro-steps are used to sample curvature. During integration, the solver marks the mask progressively via ``_DomainMap.update_trajectory``\ , and very short trajectories are rejected with ``_DomainMap.undo_trajectory()`` to avoid clutter.
+
+*
+ The final artist returned to you is a ``CurvedQuiverSet`` (a small dataclass aligned with ``matplotlib.streamplot.StreamplotSet``\ ) exposing ``lines`` (the curved paths) and ``arrows`` (the arrowheads). This mirrors familiar ``streamplot`` ergonomics. For example, you can attach a colorbar to ``.lines``\ , as shown in the figures.
+
+From a user perspective, you call ``ax.curved_quiver(X, Y, U, V, ...)`` just as you would ``quiver``\ , optionally passing ``color`` as a scalar field to map magnitude, ``cmap`` for color mapping, ``arrow_at_end=True`` and ``arrowsize`` to emphasize direction, and the two most impactful shape controls: ``grains`` and ``scale``. Use ``curved_quiver`` when you want to reveal local turning behavior—vortices, shear zones, near saddles, or flow deflection around obstacles—without committing to global streamlines. If your field is highly curved in localized pockets where straight arrows are misleading but ``streamplot`` feels too continuous or dense, ``curved_quiver`` is the right middle ground.
+
+Performance
+-----------
+
+Performance-wise, runtime scales with the number of glyphs and the micro-steps (\ ``grains``\ ). The default values are a good balance for most grids; for very dense fields, you can either reduce ``grains`` or down-sample the input grid. The API is fully additive and doesn’t introduce any breaking changes, and it integrates with existing colorbar and colormap workflows.
+
+Parameters
+----------
+
+There are two main parameters that affect the plots visually. The ``grains``\ parameters controls the density of the grid by interpolating between the input grid. Setting a higher grid will fill the space with more streams. See for a full function description the `documentation `_.
+
+:raw-html-m2r:`
`
+
+The ``size`` parameter will multiply the magnitude of the stream. Setting this value higher will make it look more similar to ``streamplot``.
+
+:raw-html-m2r:`
`
+
+Acknowledgements
+----------------
+
+Special thanks to @veenstrajelmer for his implementation (https://github.com/Deltares/dfm_tools) and @Yefee for his suggestion to add this to UltraPlot! And as always @beckermr for his review.
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* Add ``curved_quiver`` — Curved Vector Field Arrows for 2D Plots (https://github.com/Ultraplot/UltraPlot/pull/361)
+* Add Colormap parsing to curved-quiver (https://github.com/Ultraplot/UltraPlot/pull/369)
+
+Suggestions or feedback
+-----------------------
+
+Do you have suggestion or feedback? Checkout our `discussion `_ on this release.
+
+**Full Changelog**\ : https://github.com/Ultraplot/UltraPlot/compare/v1.62.0...v1.63.0
+
+v1.62.0: 🚀 New Release: Configurator Handler Registration (2025-10-13)
+----------------------------------------------------------------------
+
+.. role:: raw-html-m2r(raw)
+ :format: html
+
+
+This release introduces a powerful **extension point** to the configuration system — ``Configurator.register_handler()`` — enabling dynamic responses to configuration changes.
+
+✨ New Feature: ``register_handler``
+""""""""""""""""""""""""""""""""""""""""
+
+You can now register custom handlers that execute automatically when specific settings are modified.\ :raw-html-m2r:`
`
+This is particularly useful for settings that require **derived logic or side-effects**\ , such as updating related Matplotlib parameters.
+
+.. code-block:: python
+
+ register_handler(name: str, func: Callable[[Any], Dict[str, Any]]) -> None
+ `
+
+**Example (enabled by default):**
+
+.. code-block:: python
+
+ def _cycle_handler(value):
+ # Custom logic to create a cycler object from the value
+ return {'axes.prop_cycle': new_cycler}
+
+ rc.register_handler('cycle', _cycle_handler)
+
+Each handler function receives the **new value** of the setting and must return a **dictionary** mapping valid Matplotlib rc keys to their corresponding values. These updates are applied automatically to the runtime configuration.
+
+----
+
+🧩 Why It Matters
+"""""""""""""""""
+
+This addition:
+
+
+* Fixes an issue where ``cycle:`` entries in ``ultraplotrc`` were not properly applied.
+* Decouples configuration logic from Matplotlib internals.
+* Provides a clean mechanism for extending the configuration system with custom logic — without circular imports or hard-coded dependencies.
+
+----
+
+🔧 Internal Improvements
+""""""""""""""""""""""""
+
+
+* Refactored configuration update flow to support handler callbacks.
+* Simplified ``rc`` management by delegating side-effectful updates to registered handlers.
+
+----
+
+💡 Developer Note
+"""""""""""""""""
+
+This API is designed to be extensible. Future handlers may include dynamic color normalization, font synchronization, or interactive theme updates — all powered through the same mechanism.
+
+v1.61.1: 🚀 Release: CFTime Support and Integration (2025-10-08)
+---------------------------------------------------------------
+
+.. role:: raw-html-m2r(raw)
+ :format: html
+
+
+Highlights
+""""""""""
+
+**CFTime Axis Support:**\ :raw-html-m2r:`
`
+We’ve added robust support for CFTime objects throughout ``ultraplot``. This enables accurate plotting and formatting of time axes using non-standard calendars (e.g., ``noleap``\ , ``gregorian``\ , ``standard``\ ), which are common in climate and geoscience datasets.
+
+**Automatic Formatter and Locator Selection:**\ :raw-html-m2r:`
`
+``ultraplot`` now automatically detects CFTime axes and applies the appropriate formatters and locators, ensuring correct tick placement and labeling for all supported calendar types.
+
+**Seamless Integration with xarray:**\ :raw-html-m2r:`
`
+These features are designed for direct use with ``xarray`` datasets and dataarrays. When plotting data with CFTime indexes, ``ultraplot`` will handle all time axis formatting and tick generation automatically—no manual configuration required.
+
+----
+
+Intended Use
+""""""""""""
+
+This release is aimed at users working with climate, weather, and geoscience data, where time coordinates may use non-standard calendars. The new CFTime functionality ensures that plots generated from ``xarray`` and other scientific libraries display time axes correctly, regardless of calendar type.
+
+----
+
+Example Usage
+"""""""""""""
+
+.. code-block:: python
+
+ import xarray as xr
+ import numpy as np
+ import cftime
+ import ultraplot as uplt
+
+ # Create a sample xarray DataArray with CFTime index
+ times = [cftime.DatetimeNoLeap(2001, 1, i+1) for i in range(10)]
+ data = xr.DataArray(np.random.rand(10), coords=[times], dims=["time"])
+
+ fig, ax = uplt.subplots()
+ data.plot(ax=ax)
+
+ # CFTime axes are automatically formatted and labeled
+ ax.set_title("CFTime-aware plotting with ultraplot")
+ uplt.show()
+
+----
+
+Migration and Compatibility
+"""""""""""""""""""""""""""
+
+
+* No changes are required for existing code using standard datetime axes.
+* For datasets with CFTime indexes (e.g., from ``xarray``\ ), simply plot as usual—\ ``ultraplot`` will handle the rest.
+
+----
+
+**We welcome feedback and bug reports as you explore these new capabilities!**
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* Fix edgecolor not set on scatter plots with single-row DataFrame data (https://github.com/Ultraplot/UltraPlot/pull/325)
+* Add suptitle_kw alignment support to UltraPlot (https://github.com/Ultraplot/UltraPlot/pull/327)
+* Update Documentation for ``abc`` Parameter in Subplots and Format Command (https://github.com/Ultraplot/UltraPlot/pull/328)
+* Fix subplots docs (https://github.com/Ultraplot/UltraPlot/pull/330)
+* Add members to api (https://github.com/Ultraplot/UltraPlot/pull/332)
+* rm show from tests (https://github.com/Ultraplot/UltraPlot/pull/335)
+* Revert "Fix edge case where vcenter is not properly set for diverging norms" (https://github.com/Ultraplot/UltraPlot/pull/337)
+* Bump the github-actions group with 2 updates by @dependabot[bot] in https://github.com/Ultraplot/UltraPlot/pull/339
+* Extra tests for geobackends (https://github.com/Ultraplot/UltraPlot/pull/334)
+* Fix some links for docs (https://github.com/Ultraplot/UltraPlot/pull/341)
+* Fix links docs (https://github.com/Ultraplot/UltraPlot/pull/342)
+* Lazy loading colormaps (https://github.com/Ultraplot/UltraPlot/pull/343)
+* Set warning level for mpl to error (https://github.com/Ultraplot/UltraPlot/pull/350)
+* Sanitize pad and len formatters on Cartesian Axes (https://github.com/Ultraplot/UltraPlot/pull/346)
+* Fix order of label transfer (https://github.com/Ultraplot/UltraPlot/pull/353)
+* Bump the github-actions group with 2 updates by @dependabot[bot] in https://github.com/Ultraplot/UltraPlot/pull/354
+* Add cftime support for non-standard calendars (https://github.com/Ultraplot/UltraPlot/pull/344)
+
+New Contributors
+~~~~~~~~~~~~~~~~
+
+
+* @Copilot made their first contribution in https://github.com/Ultraplot/UltraPlot/pull/325
+
+**Full Changelog**\ : https://github.com/Ultraplot/UltraPlot/compare/v1.60.2...v1.61.0
+
+Note: v1.61.0 is yanked from pypi as it contained a debug statement. This merely removes the debug.
+
+v1.60.2: Hotfix: double depth decorator that affected geoplots (2025-08-18)
+---------------------------------------------------------------------------
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* Handle non homogeneous arrays (https://github.com/Ultraplot/UltraPlot/pull/318)
+* Update Cartopy references (https://github.com/Ultraplot/UltraPlot/pull/322)
+* Fix inhomogeneous violin test (https://github.com/Ultraplot/UltraPlot/pull/323)
+* Fix issue where double decorator does not parse function name (https://github.com/Ultraplot/UltraPlot/pull/320)
+
+New Contributors
+~~~~~~~~~~~~~~~~
+
+
+* @rcomer made their first contribution in https://github.com/Ultraplot/UltraPlot/pull/322
+
+**Full Changelog**\ : https://github.com/Ultraplot/UltraPlot/compare/v1.60.1...v1.60.2
+
+v1.60.1: Hotfixes for colors and colormaps (2025-08-08)
+-------------------------------------------------------
+
+Minor bug fixes
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* Fix edge case where vcenter is not properly set for diverging norms (https://github.com/Ultraplot/UltraPlot/pull/314)
+* Fix color parsing when color is not string (https://github.com/Ultraplot/UltraPlot/pull/315)
+
+**Full Changelog**\ : https://github.com/Ultraplot/UltraPlot/compare/v1.60.0...v1.60.1
+
+v1.60.0: It's better to share! (2025-08-05)
+-------------------------------------------
+
+.. role:: raw-html-m2r(raw)
+ :format: html
+
+
+UltraPlot extends its sharing capabilities by redefining how sharing works. As of this release, sharing will operate by looking at the subplotgrid and extending label sharing when plots are adjacent. Labels will be turned on for those subplots that
+
+
+* Face and edge of the plot
+* or face an empty plot space
+
+In the past, sharing top and right labels would erroneously be turned off and could only be managed by turning the sharing feature off.
+
+For example, consider a simple 2x2 layout. Turning on the top and right labels now looks like:
+:raw-html-m2r:`
`
+
+Similarly for more complex layouts the plots facing an edge will turn on their labels. Note that the limits are still shared for these subplots:
+
+:raw-html-m2r:`
`
+
+Vertical inset colorbars
+------------------------
+
+UltraPlot now also supports vertical inset colorbars such as
+
+:raw-html-m2r:`
`
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* Feat vert inset cbars (https://github.com/Ultraplot/UltraPlot/pull/301)
+* Refactor colorbar loc handling (https://github.com/Ultraplot/UltraPlot/pull/304)
+* Sync ``_legend_dict`` on legend location change (https://github.com/Ultraplot/UltraPlot/pull/310)
+* fix color being parsed for none (https://github.com/Ultraplot/UltraPlot/pull/312)
+* feat: advanced axis sharing refactor + enhancements (https://github.com/Ultraplot/UltraPlot/pull/256)
+
+**Full Changelog**\ : https://github.com/Ultraplot/UltraPlot/compare/v1.57.2...v1.60.0
+
+v1.57.2: Bug fixes for Geo dms coordinates and reverse colors/colormaps (2025-07-02)
+------------------------------------------------------------------------------------
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* Add citation metadata (CITATION.cff, .zenodo.json) to support scholarly use (https://github.com/Ultraplot/UltraPlot/pull/284)
+* Update CITATON.cff (https://github.com/Ultraplot/UltraPlot/pull/286)
+* Add citation links to README. (https://github.com/Ultraplot/UltraPlot/pull/287)
+* Mv dynamic function to the subplotgrid (https://github.com/Ultraplot/UltraPlot/pull/281)
+* add downloads badge (https://github.com/Ultraplot/UltraPlot/pull/290)
+* replace color to orange (https://github.com/Ultraplot/UltraPlot/pull/291)
+* Hotfix add all locations to colorbar label (https://github.com/Ultraplot/UltraPlot/pull/295)
+* Fix DMS not set on some projections (https://github.com/Ultraplot/UltraPlot/pull/293)
+* Bump mamba-org/setup-micromamba from 2.0.4 to 2.0.5 in the github-actions group (https://github.com/Ultraplot/UltraPlot/pull/299)
+* fix late binding and proper reversal for funcs (https://github.com/Ultraplot/UltraPlot/pull/296)
+
+**Full Changelog**\ : https://github.com/Ultraplot/UltraPlot/compare/v1.57.1...v1.57.2
+
+v1.57.1: Zenodo release (2025-06-24)
+------------------------------------
+
+This PR integrates Zenodo with the UltraPlot repository to enable citation via DOI.
+
+From now on, every GitHub release will be archived by Zenodo and assigned a unique DOI, allowing researchers and users to cite UltraPlot in a standardized, persistent way.
+
+We’ve also added a citation file and BibTeX entry for convenience. Please refer to the GitHub “Cite this repository” section or use the provided BibTeX in your work.
+
+This marks an important step in making UltraPlot more visible and citable in academic and scientific publications.
+
+🔗 DOI: `https://doi.org/10.5281/zenodo.15733565 `_
+
+Cite as
+
+.. code-block:: bibtex
+
+ @software{vanElteren2025,
+ author = {Casper van Elteren and Matthew R. Becker},
+ title = {UltraPlot: A succinct wrapper for Matplotlib},
+ year = {2025},
+ version = {1.57.1},
+ publisher = {GitHub},
+ url = {https://github.com/Ultraplot/UltraPlot}
+ }
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* Fix a few tests (https://github.com/Ultraplot/UltraPlot/pull/267)
+* set rng per test (https://github.com/Ultraplot/UltraPlot/pull/268)
+* Add xdist to image compare (https://github.com/Ultraplot/UltraPlot/pull/266)
+* Fix issue where view is reset on setting ticklen (https://github.com/Ultraplot/UltraPlot/pull/272)
+* Racing condition xdist fix (https://github.com/Ultraplot/UltraPlot/pull/273)
+* Replace spring with forceatlas2 (https://github.com/Ultraplot/UltraPlot/pull/275)
+* Revert xdist addition (https://github.com/Ultraplot/UltraPlot/pull/277)
+* fix: pass layout_kw in network test function (https://github.com/Ultraplot/UltraPlot/pull/278)
+* fix: this one needs a seed too (https://github.com/Ultraplot/UltraPlot/pull/279)
+* rm paren (https://github.com/Ultraplot/UltraPlot/pull/280)
+
+**Full Changelog**\ : https://github.com/Ultraplot/UltraPlot/compare/v1.57...v1.57.1
+
+v1.57: Support matplotlib 3.10 and python 3.13 (2025-06-16)
+-----------------------------------------------------------
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* Fix unused parameters being passed to pie chart (https://github.com/Ultraplot/UltraPlot/pull/260)
+* Update return requirements pytest 8.4.0 (https://github.com/Ultraplot/UltraPlot/pull/265)
+* Bump python to 3.13 (https://github.com/Ultraplot/UltraPlot/pull/264)
+* Update matplotlib to mpl 3.10 (https://github.com/Ultraplot/UltraPlot/pull/263)
+
+**Full Changelog**\ : https://github.com/Ultraplot/UltraPlot/compare/v1.56...v1.57
+
+v1.56: Feature addition: Beeswarm plot (2025-06-13)
+---------------------------------------------------
+
+We are introducing a new plot type with this release: a beeswarm plot. A beeswarm plot is a data visualization technique that displays individual data points in a way that prevents overlap while maintaining their relationship to categorical groups, creating a distinctive "swarm" pattern that resembles bees clustering around a hive.
+
+Unlike traditional box plots or violin plots that aggregate data, beeswarm plots show every individual observation, making them ideal for datasets with moderate sample sizes where you want to see both individual points and overall distribution patterns, identify outliers clearly, and compare distributions across multiple categories without losing any information through statistical summaries.
+
+This plot mimics the beeswarm from ``SHAP`` library, but lacks the more sophisticated patterns they apply such as inline group clustering. UltraPlot does not aim to add these features but instead provide an interface that is simpler that users can tweak to their hearts desires.
+
+
+.. image:: https://github.com/user-attachments/assets/98623e13-b0ab-4e15-87b1-64dfcd22ad57
+ :target: https://github.com/user-attachments/assets/98623e13-b0ab-4e15-87b1-64dfcd22ad57
+ :alt: tmp
+
+
+
+.. raw:: html
+
+ snippet
+
+
+ ```python
+ import ultraplot as uplt, numpy as np
+
+ # Create mock data
+ n_points, n_features = 50, 4
+ features = np.arange(n_features)
+ data = np.empty((n_points, n_features))
+ feature_values = np.repeat(
+ features,
+ n_points,
+ ).reshape(data.shape)
+
+ for feature in features:
+ data[:, feature] = np.random.normal(feature * 1.5, 0.6, n_points)
+
+ cmap = uplt.Colormap(uplt.rc["cmap.diverging"])
+
+ # Create plot and style
+ fig, (left, right) = uplt.subplots(ncols=2, share=0)
+ left.beeswarm(
+ data,
+ orientation="vertical",
+ alpha=0.7,
+ cmap=cmap,
+ )
+ left.format(
+ title="Traditional Beeswarm Plot",
+ xlabel="Category",
+ ylabel="Value",
+ xticks=features,
+ xticklabels=["Group A", "Group B", "Group C", "Group D"],
+ )
+ right.beeswarm(
+ data,
+ feature_values=feature_values,
+ cmap=cmap,
+ colorbar="right",
+ )
+ right.format(
+ title="Feature Value Beeswarm Plot",
+ xlabel="SHAP Value",
+ yticks=features,
+ yticklabels=["A", "B", "C", "D"],
+ ylabel="Feature",
+ )
+ uplt.show(block=1)
+ ```
+
+
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* Hotfix GeoAxes indicate zoom. (https://github.com/Ultraplot/UltraPlot/pull/249)
+* Feature: Beeswarm plot (https://github.com/Ultraplot/UltraPlot/pull/251)
+* GeoTicks not responsive (https://github.com/Ultraplot/UltraPlot/pull/253)
+* add top level ignores for local testing (https://github.com/Ultraplot/UltraPlot/pull/255)
+* Update .gitignore (https://github.com/Ultraplot/UltraPlot/pull/257)
+* Refactor beeswarm (https://github.com/Ultraplot/UltraPlot/pull/254)
+
+**Full Changelog**\ : https://github.com/Ultraplot/UltraPlot/compare/V1.55...v1.56
+
+v1.55: V1.55. Bug fixes. (2025-06-04)
+--------------------------------------
+
+This release continues our ongoing mission to squash pesky bugs and make your plotting experience smoother and more intuitive.
+
+✨ New Features
+---------------
+
+
+*
+ Centered Labels for pcolormesh
+ You can now enable center_labels when using pcolormesh, making it easier to annotate discrete diverging colormaps—especially when including zero among the label values. Ideal for visualizing data with meaningful central thresholds.
+
+*
+ Direct Bar Labels for bar and hbar
+ Bar labels can now be added directly via the bar and hbar commands. No more extra steps—just call the method and get your labeled bars out of the box.
+
+🐞 Bug Fixes
+------------
+
+Various internal improvements and minor bug fixes aimed at ensuring a more robust and predictable plotting experience.
+
+As always, thank you for using UltraPlot! Feedback, issues, and contributions are welcome.
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* Cartesian docs links fixed (https://github.com/Ultraplot/ultraplot/pull/226)
+* minor fix for mpl3.10 (https://github.com/Ultraplot/ultraplot/pull/229)
+* Adjust the ticks to center on 'nice' values (https://github.com/Ultraplot/ultraplot/pull/228)
+* rm unnecessary show (https://github.com/Ultraplot/ultraplot/pull/241)
+* Feat bar labels (https://github.com/Ultraplot/ultraplot/pull/240)
+* Fix links for 1d plots in docs (https://github.com/Ultraplot/ultraplot/pull/242)
+* Deprecate basemap (https://github.com/Ultraplot/ultraplot/pull/243)
+* Hotfix get_border_axes (https://github.com/Ultraplot/ultraplot/pull/236)
+* Hotfix panel (https://github.com/Ultraplot/ultraplot/pull/238)
+* Hot fix twinned y labels (https://github.com/Ultraplot/ultraplot/pull/246)
+
+**Full Changelog**\ : https://github.com/Ultraplot/ultraplot/compare/v1.50.2...V1.55
+
+v1.50.2 (2025-05-20)
+--------------------
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* perf: run comparison tests at the same time as the main tests (https://github.com/Ultraplot/ultraplot/pull/213)
+* fix cycler setting to 1 when only 1 column is parsed (https://github.com/Ultraplot/ultraplot/pull/218)
+* Skip sharing logic when colorbar is added to GeoPlots. (https://github.com/Ultraplot/ultraplot/pull/219)
+* Restore redirection for tricontourf for GeoPlotting (https://github.com/Ultraplot/ultraplot/pull/222)
+* Fix numerous geo docs visuals (https://github.com/Ultraplot/ultraplot/pull/223)
+* Allow rasterization on GeoFeatures. (https://github.com/Ultraplot/ultraplot/pull/220)
+* more fixes (https://github.com/Ultraplot/ultraplot/pull/224)
+* Docs fix3 (https://github.com/Ultraplot/ultraplot/pull/225)
+
+**Full Changelog**\ : https://github.com/Ultraplot/ultraplot/compare/v1.50.1...v1.50.2
+
+v1.50.1 (2025-05-12)
+--------------------
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* fix: specify import exception type and add typing-extensions to deps (https://github.com/Ultraplot/ultraplot/pull/212)
+
+**Full Changelog**\ : https://github.com/Ultraplot/ultraplot/compare/v1.50...v1.50.1
+
+v1.50: Networks, lollipops and sharing (2025-05-11)
+---------------------------------------------------
+
+.. role:: raw-html-m2r(raw)
+ :format: html
+
+
+
+.. raw:: html
+
+ UltraPlot v1.50
+
+
+
+.. raw:: html
+
+
+ Version v1.50 is a major milestone for UltraPlot. As we become more familiar with the codebase, we’ve opened the door to new features—balancing innovation with continuous backend improvements and bug fixes.
+
+
+
+
+.. raw:: html
+
+
+
+
+
+:raw-html-m2r:`🌍 GeoAxes Sharing
`
+
+
+.. raw:: html
+
+
+
+ |
+
+ You can now share axes between subplots using GeoAxes, as long as they use the same rectilinear projection. This enables cleaner, more consistent layouts when working with geographical data.
+
+ |
+
+
+ |
+
+
+
+
+
+.. raw:: html
+
+
+
+
+
+:raw-html-m2r:`🕸️ Network Graphs
`
+
+
+.. raw:: html
+
+
+
+ |
+
+ UltraPlot now supports network visualizations out of the box. With smart defaults and simple customization options, creating beautiful network plots is easier than ever.
+
+ |
+
+
+ |
+
+
+
+
+
+.. raw:: html
+
+
+ Network plotting code
+
+ ```python
+ import networkx as nx, ultraplot as uplt
+ n = 100
+ g = nx.random_geometric_graph(n, radius=0.2)
+ c = uplt.colormaps.get_cmap("viko")
+ c = c(np.linspace(0, 1, n))
+ node = dict(
+ node_size=np.random.rand(n) * 100,
+ node_color=c,
+ )
+ fig, ax = uplt.subplots()
+ ax.graph(g, layout="kamada_kawai", node_kw=node)
+ fig.show()
+ ```
+
+
+
+
+:raw-html-m2r:`🍭 Lollipop Graphs
`
+
+
+.. raw:: html
+
+
+
+ |
+
+ A sleek alternative to bar charts, lollipop graphs are now available directly through UltraPlot.
+ They shine when visualizing datasets with many bars, reducing visual clutter while retaining clarity.
+
+ |
+
+
+ |
+
+
+
+
+
+.. raw:: html
+
+
+ Lollipop example code
+
+ ```python
+ import ultraplot as uplt, pandas as pd, numpy as np
+ data = np.random.rand(5, 5).cumsum(axis=0).cumsum(axis=1)[:, ::-1]
+ data = pd.DataFrame(
+ data,
+ columns=pd.Index(np.arange(1, 6), name="column"),
+ index=pd.Index(["a", "b", "c", "d", "e"], name="row idx"),
+ )
+ fig, ax = uplt.subplots(ncols=2, share=0)
+ ax[0].lollipop(
+ data,
+ stemcolor="green",
+ stemwidth=2,
+ marker="d",
+ edgecolor="k",
+ )
+ ax[1].lollipoph(data, linestyle="solid")
+ ```
+
+
+
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* separate logger for ultraplot and matplotlib (https://github.com/Ultraplot/ultraplot/pull/178)
+* Capture warning (https://github.com/Ultraplot/ultraplot/pull/180)
+* tmp turning of test (https://github.com/Ultraplot/ultraplot/pull/183)
+* Skip missing tests if added in PR (https://github.com/Ultraplot/ultraplot/pull/175)
+* Revert "Skip missing tests if added in PR" (https://github.com/Ultraplot/ultraplot/pull/184)
+* rm conftest from codecov (https://github.com/Ultraplot/ultraplot/pull/187)
+* skip tests properly (https://github.com/Ultraplot/ultraplot/pull/186)
+* Fix colorbar loc (https://github.com/Ultraplot/ultraplot/pull/182)
+* Fix bar alpha (https://github.com/Ultraplot/ultraplot/pull/192)
+* make import uplt to be consistent with rest of repo (https://github.com/Ultraplot/ultraplot/pull/195)
+* Ensure that shared labels are consistently updated. (https://github.com/Ultraplot/ultraplot/pull/177)
+* sensible defaults and unittest (https://github.com/Ultraplot/ultraplot/pull/189)
+* Deprecation fix mpl 3.10 and beyond (https://github.com/Ultraplot/ultraplot/pull/69)
+* Add network plotting to UltraPlot (https://github.com/Ultraplot/ultraplot/pull/169)
+* Hotfix test (https://github.com/Ultraplot/ultraplot/pull/196)
+* Discrete colors for quiver (https://github.com/Ultraplot/ultraplot/pull/198)
+* correct url for basemap objects (https://github.com/Ultraplot/ultraplot/pull/202)
+* override logx/y/log with updated docstring (https://github.com/Ultraplot/ultraplot/pull/203)
+* Add lollipop graph (https://github.com/Ultraplot/ultraplot/pull/194)
+* Fix network linking in docs and api refs (https://github.com/Ultraplot/ultraplot/pull/205)
+* Avoid getting edges and setting centers for some shaders (https://github.com/Ultraplot/ultraplot/pull/208)
+* Fix some references in inset docs (https://github.com/Ultraplot/ultraplot/pull/209)
+* rm dep warning (https://github.com/Ultraplot/ultraplot/pull/210)
+* [Feature add] Share Axes in GeoPlot + bug fixes (https://github.com/Ultraplot/ultraplot/pull/159)
+
+**Full Changelog**\ : https://github.com/Ultraplot/ultraplot/compare/v1.11...v1.5
+
+v1.11: Various bug fixes (2025-04-25)
+-------------------------------------
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* Update intersphinx links (https://github.com/Ultraplot/ultraplot/pull/128)
+* Update geo doc (https://github.com/Ultraplot/ultraplot/pull/129)
+* Hotfix update geo doc (https://github.com/Ultraplot/ultraplot/pull/130)
+* New site, who dis? (https://github.com/Ultraplot/ultraplot/pull/132)
+* Add about page (https://github.com/Ultraplot/ultraplot/pull/133)
+* Make it mobile friendly (https://github.com/Ultraplot/ultraplot/pull/134)
+* Add gallery to github page (https://github.com/Ultraplot/ultraplot/pull/140)
+* Fix readme (https://github.com/Ultraplot/ultraplot/pull/142)
+* Fix readme fixed sizes (https://github.com/Ultraplot/ultraplot/pull/143)
+* added page for errors (https://github.com/Ultraplot/ultraplot/pull/141)
+* Bump dawidd6/action-download-artifact from 2 to 6 in /.github/workflows (https://github.com/Ultraplot/ultraplot/pull/144)
+* fix: checkout from correct fork (https://github.com/Ultraplot/ultraplot/pull/145)
+* Set seed prior to test to ensure fidelity (https://github.com/Ultraplot/ultraplot/pull/148)
+* Move warning inside pytest config (https://github.com/Ultraplot/ultraplot/pull/151)
+* Fix scaler parsing (https://github.com/Ultraplot/ultraplot/pull/153)
+* Update site logo (https://github.com/Ultraplot/ultraplot/pull/154)
+* Fix minor grid showing on cbar (https://github.com/Ultraplot/ultraplot/pull/150)
+* Add option to place abc indicator outside the axis bbox (https://github.com/Ultraplot/ultraplot/pull/139)
+* Add unitests for ultraplot.internals.fonts (https://github.com/Ultraplot/ultraplot/pull/156)
+* Minor refactor of unittests (https://github.com/Ultraplot/ultraplot/pull/157)
+* Make anchor_mode default (https://github.com/Ultraplot/ultraplot/pull/161)
+* Ipy rc kernel reset (https://github.com/Ultraplot/ultraplot/pull/164)
+* allow subfigure formatting (https://github.com/Ultraplot/ultraplot/pull/167)
+* make cbar labelloc possible for all direction (https://github.com/Ultraplot/ultraplot/pull/165)
+* Add pyarrow to rm pandas error (https://github.com/Ultraplot/ultraplot/pull/171)
+* Center figures in docs (https://github.com/Ultraplot/ultraplot/pull/170)
+* mv toc to left (https://github.com/Ultraplot/ultraplot/pull/172)
+* surpress warnings on action (https://github.com/Ultraplot/ultraplot/pull/174)
+
+**Full Changelog**\ : https://github.com/Ultraplot/ultraplot/compare/v1.10.0...v1.11
+
+v1.10.0: Ticks for Geoaxes (2025-03-20)
+---------------------------------------
+
+This release marks a newly added feature: ticks on GeoAxes
+
+.. image:: https://github.com/user-attachments/assets/92670ef4-5cb1-49fe-9b23-8d69a80e80cf
+ :target: https://github.com/user-attachments/assets/92670ef4-5cb1-49fe-9b23-8d69a80e80cf
+ :alt: image
+
+This allows for users to set ticks for the x and or y axis. These can be controlled by ``lonticklen``\ , ``latticklen`` or ``ticklen`` for controlling the ``x``\ , ``y`` or both axis at the same time. This works independently to the major and minor gridlines allow for optimal control over the look and feel of your plots.
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* prod: add me to maintainers (https://github.com/Ultraplot/ultraplot/pull/117)
+* prod: only use readthedocs for PR tests (https://github.com/Ultraplot/ultraplot/pull/118)
+* feat: enable test coverage with codecov (https://github.com/Ultraplot/ultraplot/pull/121)
+* dynamically build what's new (https://github.com/Ultraplot/ultraplot/pull/122)
+* rm extra == line (https://github.com/Ultraplot/ultraplot/pull/123)
+* bugfix for Axes.legend when certain keywords are set to str (https://github.com/Ultraplot/ultraplot/pull/124)
+* reduce verbosity of extension (https://github.com/Ultraplot/ultraplot/pull/127)
+* allow ticks for geoaxes (https://github.com/Ultraplot/ultraplot/pull/126)
+
+New Contributors
+~~~~~~~~~~~~~~~~
+
+
+* @syrte made their first contribution in https://github.com/Ultraplot/ultraplot/pull/124
+
+**Full Changelog**\ : https://github.com/Ultraplot/ultraplot/compare/v1.0.9...v1.10.0
+
+v1.0.9: IPython 9.0.0 compatibility and numerous backend fixes. (2025-03-05)
+----------------------------------------------------------------------------
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* filter out property if not set (https://github.com/Ultraplot/ultraplot/pull/99)
+* Add texgyre to docs (https://github.com/Ultraplot/ultraplot/pull/101)
+* Texgyre fix (https://github.com/Ultraplot/ultraplot/pull/102)
+* rm warnings when downloading data inside env (https://github.com/Ultraplot/ultraplot/pull/104)
+* prod: only build ultraplot when ultraplot src changes (https://github.com/Ultraplot/ultraplot/pull/106)
+* Gitignore baseline (https://github.com/Ultraplot/ultraplot/pull/109)
+* Fix colorbar ticks (https://github.com/Ultraplot/ultraplot/pull/108)
+* Attempt fix workflow docs build (https://github.com/Ultraplot/ultraplot/pull/114)
+* rm ref semver (https://github.com/Ultraplot/ultraplot/pull/112)
+* Only store failed tests mpl-pytest (https://github.com/Ultraplot/ultraplot/pull/113)
+* fix: matrix test for no changes is running when it should not be (https://github.com/Ultraplot/ultraplot/pull/115)
+
+**Full Changelog**\ : https://github.com/Ultraplot/ultraplot/compare/v1.0.8...v1.0.9
+
+v1.0.8-2: Hotfix cycling properties (2025-02-27)
+------------------------------------------------
+
+Hot fix for cycle not recognizing color argument
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* filter out property if not set (https://github.com/Ultraplot/ultraplot/pull/99)
+
+**Full Changelog**\ : https://github.com/Ultraplot/ultraplot/compare/v1.0.8...v1.0.8-2
+
+v1.0.8: Minor bug fixes (2025-02-23)
+------------------------------------
+
+Fixes an issue where ticks were not properly set when giving levels and ticks in ``pcolormesh`` and related functions in the colorbar. See more of the changes below.
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* fix: remove race condition for pushes of tags (https://github.com/Ultraplot/ultraplot/pull/78)
+* use seed for reproducibility (https://github.com/Ultraplot/ultraplot/pull/79)
+* Fix demo function not extracting colormaps (https://github.com/Ultraplot/ultraplot/pull/83)
+* allows cycle to be a tuple (https://github.com/Ultraplot/ultraplot/pull/87)
+* Fixes heatmap not showing labels. (https://github.com/Ultraplot/ultraplot/pull/91)
+* Doc link fix (https://github.com/Ultraplot/ultraplot/pull/92)
+* explicitly override minor locator if given (https://github.com/Ultraplot/ultraplot/pull/96)
+
+**Full Changelog**\ : https://github.com/Ultraplot/ultraplot/compare/v1.0.7...v1.0.8
+
+v1.0.7: Dev update. (2025-02-15)
+--------------------------------
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* added path explicitly on publish (https://github.com/Ultraplot/ultraplot/pull/77)
+
+**Full Changelog**\ : https://github.com/Ultraplot/ultraplot/compare/v1.0.6...v1.0.7
+
+v1.0.6: Ensure norm fix (2025-02-15)
+------------------------------------
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* add case where cycler is already a cycle (https://github.com/Ultraplot/ultraplot/pull/65)
+* fix: make sure PRs do not mess with releases (https://github.com/Ultraplot/ultraplot/pull/67)
+* fix: ensure pypi readme works ok (https://github.com/Ultraplot/ultraplot/pull/70)
+* feat: deduplicate pypi publish workflow (https://github.com/Ultraplot/ultraplot/pull/71)
+* [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/Ultraplot/ultraplot/pull/73
+* use norm explicitly (https://github.com/Ultraplot/ultraplot/pull/76)
+
+New Contributors
+~~~~~~~~~~~~~~~~
+
+
+* @pre-commit-ci made their first contribution in https://github.com/Ultraplot/ultraplot/pull/73
+
+**Full Changelog**\ : https://github.com/Ultraplot/ultraplot/compare/v1.0.5...v1.0.6
+
+v1.0.5 (2025-02-02)
+-------------------
+
+What's Changed
+~~~~~~~~~~~~~~
+
+
+* test: adjust test matrix to use one locale and add matrix dimension over MPL versions (https://github.com/Ultraplot/ultraplot/pull/51)
+* Dep build (https://github.com/Ultraplot/ultraplot/pull/57)
+* Second dep on build still being skipped (https://github.com/Ultraplot/ultraplot/pull/58)
+* another attempt to fix publish (https://github.com/Ultraplot/ultraplot/pull/59)
+* fix: remove custom classifier for MPL (https://github.com/Ultraplot/ultraplot/pull/62)
+* fix: correct chain of logic for publish workflow (https://github.com/Ultraplot/ultraplot/pull/63)
+* fix: get pypi publish working (https://github.com/Ultraplot/ultraplot/pull/64)
+
+**Full Changelog**\ : https://github.com/Ultraplot/ultraplot/compare/v1.0.4...v1.0.5
+
+v1.0.4: Fixing Margins (2025-01-31)
+-----------------------------------
+
+A major change for this release is that the margins were not properly being set with the latest mpl. This reverts the margins back to the behavior where they are tighter as is expected from UltraPlot!
+
+v1.0.3: Minor bug fixes (2025-01-27)
+------------------------------------
+
+We are still experiencing some growing pains with proplot -> ultraplot conversion, however it is looking good. Some bugs were fixed regarding compatibility with mpl3.10 and we are moving towards fidelity checks. Please update when you can to this latest release.
+
+This release is to ensure that the latest version is on pypi and conda.
+
+**Full Changelog**\ : https://github.com/Ultraplot/ultraplot/compare/v1.0.2...v1.0.3
+
+v1.0: Big Compatibility Release! Matplotlib >= 3.8. (2025-01-11)
+----------------------------------------------------------------
+
+* 78367da2 (HEAD -> main, tag: v1.0, uplt/main) Matplotlib 3.10 - Compatability
+* 4e15fde2 Merge pull request #16 from cvanelteren/linter-workflow
+* 54837966 (origin/linter-workflow, linter-workflow) make repo - black compatible
+* 7aa82a2c added linter workflow
+* 97f14082 point readme badge to correct workflow
+* fb762c5b (origin/main) Merge pull request #13 from - cvanelteren/triangulation-fix
+* afa14caf (origin/triangulation-fix) removed pandas reference
+* 2d66e46b added data dict to unittest test and made - preprocessing compatible
+* 465688e7 add decorator to other trifunctions
+* ad83bfb0 ensure backwards compatibility
+* 23f65bb9 added df to unittest
+* d239bfc3 added unittest for triangulaions
+* 5bb8ac14 use mpl triangulation parser
+* 5dc8b44b move logic to internals and update input parsing - functions for tri
+* f213d870 tripoint also added
+* 9eeda2db small typo
+* a1c8894b Merge branch 'main' into triangulation-fix
+* 83973941 allow triangulation object in tricountour(f)
+* 6b8223a8 Merge pull request #4 from cvanelteren/conda
+* fa1f2fcc (origin/conda) removed conda recipe
+* defb219e separate build and test
+* 4cf2c940 # This is a combination of 2 commits. # This is the - 1st commit message:
+* 9c75035c separate build and test
+* 0089fe04 license revert
+* adac1c9a Merge pull request #10 from Ultraplot/revert-6-main
+* e31afe64 (uplt/revert-6-main) Revert "license update"
+* 35204ef4 renamed yml to ensure consistency
+* b243afe7 Merge pull request #8 from cvanelteren/main
+* 0c4bc1f8 replaced pplt -> uplt
+* 656a7464 Merge pull request #5 from cvanelteren/logo_square
+* 89c59cf5 Merge pull request #7 from cvanelteren/main
+* 8d01cf33 typo in readme shield
+* 7e0ec000 Merge pull request #6 from cvanelteren/main
+* 70157b33 license update
+* e6d8eca9 (origin/logo_square, logo_square) capitalization to - UltraPlot in docs
+* e99be782 square logos
+* c2a96554 separated workflows
+* 5609372c conda and pypi publish workflow
+* d04ea9d9 small changes in workflow
+* 5432bdbe add workflow for conda-forge
+
diff --git a/mpltern b/mpltern
new file mode 160000
index 000000000..d2cc1be21
--- /dev/null
+++ b/mpltern
@@ -0,0 +1 @@
+Subproject commit d2cc1be216ae2055a7a9fc1be4b3afaa92c2c736
diff --git a/result_images/test_constrainedlayout/constrained_layout1-expected.pdf b/result_images/test_constrainedlayout/constrained_layout1-expected.pdf
new file mode 120000
index 000000000..97a135302
--- /dev/null
+++ b/result_images/test_constrainedlayout/constrained_layout1-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_constrainedlayout/constrained_layout1.pdf
\ No newline at end of file
diff --git a/result_images/test_constrainedlayout/constrained_layout1-expected_pdf.png b/result_images/test_constrainedlayout/constrained_layout1-expected_pdf.png
new file mode 100644
index 000000000..226744c78
Binary files /dev/null and b/result_images/test_constrainedlayout/constrained_layout1-expected_pdf.png differ
diff --git a/result_images/test_constrainedlayout/constrained_layout1.pdf b/result_images/test_constrainedlayout/constrained_layout1.pdf
new file mode 100644
index 000000000..06519b5ff
Binary files /dev/null and b/result_images/test_constrainedlayout/constrained_layout1.pdf differ
diff --git a/result_images/test_constrainedlayout/constrained_layout1_pdf-failed-diff.png b/result_images/test_constrainedlayout/constrained_layout1_pdf-failed-diff.png
new file mode 100644
index 000000000..a992f1d5b
Binary files /dev/null and b/result_images/test_constrainedlayout/constrained_layout1_pdf-failed-diff.png differ
diff --git a/result_images/test_constrainedlayout/constrained_layout1_pdf.png b/result_images/test_constrainedlayout/constrained_layout1_pdf.png
new file mode 100644
index 000000000..fc0d8f91e
Binary files /dev/null and b/result_images/test_constrainedlayout/constrained_layout1_pdf.png differ
diff --git a/result_images/test_data_keyword.png b/result_images/test_data_keyword.png
new file mode 100644
index 000000000..448a3b5df
Binary files /dev/null and b/result_images/test_data_keyword.png differ
diff --git a/result_images/test_given_triangles/given_triangles_axis_0-expected.pdf b/result_images/test_given_triangles/given_triangles_axis_0-expected.pdf
new file mode 120000
index 000000000..f09b65231
--- /dev/null
+++ b/result_images/test_given_triangles/given_triangles_axis_0-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_given_triangles/given_triangles_axis_0.pdf
\ No newline at end of file
diff --git a/result_images/test_given_triangles/given_triangles_axis_0-expected_pdf.png b/result_images/test_given_triangles/given_triangles_axis_0-expected_pdf.png
new file mode 100644
index 000000000..691a087ba
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_axis_0-expected_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_axis_0.pdf b/result_images/test_given_triangles/given_triangles_axis_0.pdf
new file mode 100644
index 000000000..3b9b5ea74
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_axis_0.pdf differ
diff --git a/result_images/test_given_triangles/given_triangles_axis_0_pdf-failed-diff.png b/result_images/test_given_triangles/given_triangles_axis_0_pdf-failed-diff.png
new file mode 100644
index 000000000..df0955736
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_axis_0_pdf-failed-diff.png differ
diff --git a/result_images/test_given_triangles/given_triangles_axis_0_pdf.png b/result_images/test_given_triangles/given_triangles_axis_0_pdf.png
new file mode 100644
index 000000000..2fb857709
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_axis_0_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_axis_180-expected.pdf b/result_images/test_given_triangles/given_triangles_axis_180-expected.pdf
new file mode 120000
index 000000000..c8e8bcd7f
--- /dev/null
+++ b/result_images/test_given_triangles/given_triangles_axis_180-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_given_triangles/given_triangles_axis_180.pdf
\ No newline at end of file
diff --git a/result_images/test_given_triangles/given_triangles_axis_180-expected_pdf.png b/result_images/test_given_triangles/given_triangles_axis_180-expected_pdf.png
new file mode 100644
index 000000000..3d9024043
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_axis_180-expected_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_axis_180.pdf b/result_images/test_given_triangles/given_triangles_axis_180.pdf
new file mode 100644
index 000000000..bfb08e71b
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_axis_180.pdf differ
diff --git a/result_images/test_given_triangles/given_triangles_axis_180_pdf-failed-diff.png b/result_images/test_given_triangles/given_triangles_axis_180_pdf-failed-diff.png
new file mode 100644
index 000000000..59b27213a
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_axis_180_pdf-failed-diff.png differ
diff --git a/result_images/test_given_triangles/given_triangles_axis_180_pdf.png b/result_images/test_given_triangles/given_triangles_axis_180_pdf.png
new file mode 100644
index 000000000..df6f169a9
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_axis_180_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_axis_270-expected.pdf b/result_images/test_given_triangles/given_triangles_axis_270-expected.pdf
new file mode 120000
index 000000000..6fa502af3
--- /dev/null
+++ b/result_images/test_given_triangles/given_triangles_axis_270-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_given_triangles/given_triangles_axis_270.pdf
\ No newline at end of file
diff --git a/result_images/test_given_triangles/given_triangles_axis_270-expected_pdf.png b/result_images/test_given_triangles/given_triangles_axis_270-expected_pdf.png
new file mode 100644
index 000000000..ee6b6cd48
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_axis_270-expected_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_axis_270.pdf b/result_images/test_given_triangles/given_triangles_axis_270.pdf
new file mode 100644
index 000000000..f2e941c60
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_axis_270.pdf differ
diff --git a/result_images/test_given_triangles/given_triangles_axis_270_pdf-failed-diff.png b/result_images/test_given_triangles/given_triangles_axis_270_pdf-failed-diff.png
new file mode 100644
index 000000000..e09e7522a
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_axis_270_pdf-failed-diff.png differ
diff --git a/result_images/test_given_triangles/given_triangles_axis_270_pdf.png b/result_images/test_given_triangles/given_triangles_axis_270_pdf.png
new file mode 100644
index 000000000..ce0874262
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_axis_270_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_axis_90-expected.pdf b/result_images/test_given_triangles/given_triangles_axis_90-expected.pdf
new file mode 120000
index 000000000..bc64678bd
--- /dev/null
+++ b/result_images/test_given_triangles/given_triangles_axis_90-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_given_triangles/given_triangles_axis_90.pdf
\ No newline at end of file
diff --git a/result_images/test_given_triangles/given_triangles_axis_90-expected_pdf.png b/result_images/test_given_triangles/given_triangles_axis_90-expected_pdf.png
new file mode 100644
index 000000000..530818f0d
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_axis_90-expected_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_axis_90.pdf b/result_images/test_given_triangles/given_triangles_axis_90.pdf
new file mode 100644
index 000000000..3729310d0
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_axis_90.pdf differ
diff --git a/result_images/test_given_triangles/given_triangles_axis_90_pdf-failed-diff.png b/result_images/test_given_triangles/given_triangles_axis_90_pdf-failed-diff.png
new file mode 100644
index 000000000..8a55bec7e
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_axis_90_pdf-failed-diff.png differ
diff --git a/result_images/test_given_triangles/given_triangles_axis_90_pdf.png b/result_images/test_given_triangles/given_triangles_axis_90_pdf.png
new file mode 100644
index 000000000..9feefc971
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_axis_90_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_horizontal_0-expected.pdf b/result_images/test_given_triangles/given_triangles_horizontal_0-expected.pdf
new file mode 120000
index 000000000..1bd65ae43
--- /dev/null
+++ b/result_images/test_given_triangles/given_triangles_horizontal_0-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_given_triangles/given_triangles_horizontal_0.pdf
\ No newline at end of file
diff --git a/result_images/test_given_triangles/given_triangles_horizontal_0-expected_pdf.png b/result_images/test_given_triangles/given_triangles_horizontal_0-expected_pdf.png
new file mode 100644
index 000000000..13b124b3a
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_horizontal_0-expected_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_horizontal_0.pdf b/result_images/test_given_triangles/given_triangles_horizontal_0.pdf
new file mode 100644
index 000000000..013359c64
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_horizontal_0.pdf differ
diff --git a/result_images/test_given_triangles/given_triangles_horizontal_0_pdf-failed-diff.png b/result_images/test_given_triangles/given_triangles_horizontal_0_pdf-failed-diff.png
new file mode 100644
index 000000000..d727b0648
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_horizontal_0_pdf-failed-diff.png differ
diff --git a/result_images/test_given_triangles/given_triangles_horizontal_0_pdf.png b/result_images/test_given_triangles/given_triangles_horizontal_0_pdf.png
new file mode 100644
index 000000000..aea5e6c0d
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_horizontal_0_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_horizontal_180-expected.pdf b/result_images/test_given_triangles/given_triangles_horizontal_180-expected.pdf
new file mode 120000
index 000000000..aaebf2424
--- /dev/null
+++ b/result_images/test_given_triangles/given_triangles_horizontal_180-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_given_triangles/given_triangles_horizontal_180.pdf
\ No newline at end of file
diff --git a/result_images/test_given_triangles/given_triangles_horizontal_180-expected_pdf.png b/result_images/test_given_triangles/given_triangles_horizontal_180-expected_pdf.png
new file mode 100644
index 000000000..83022881a
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_horizontal_180-expected_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_horizontal_180.pdf b/result_images/test_given_triangles/given_triangles_horizontal_180.pdf
new file mode 100644
index 000000000..b48b6f313
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_horizontal_180.pdf differ
diff --git a/result_images/test_given_triangles/given_triangles_horizontal_180_pdf-failed-diff.png b/result_images/test_given_triangles/given_triangles_horizontal_180_pdf-failed-diff.png
new file mode 100644
index 000000000..f1ad4f9af
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_horizontal_180_pdf-failed-diff.png differ
diff --git a/result_images/test_given_triangles/given_triangles_horizontal_180_pdf.png b/result_images/test_given_triangles/given_triangles_horizontal_180_pdf.png
new file mode 100644
index 000000000..17edc5e1d
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_horizontal_180_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_horizontal_270-expected.pdf b/result_images/test_given_triangles/given_triangles_horizontal_270-expected.pdf
new file mode 120000
index 000000000..616c88ccc
--- /dev/null
+++ b/result_images/test_given_triangles/given_triangles_horizontal_270-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_given_triangles/given_triangles_horizontal_270.pdf
\ No newline at end of file
diff --git a/result_images/test_given_triangles/given_triangles_horizontal_270-expected_pdf.png b/result_images/test_given_triangles/given_triangles_horizontal_270-expected_pdf.png
new file mode 100644
index 000000000..16714e61e
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_horizontal_270-expected_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_horizontal_270.pdf b/result_images/test_given_triangles/given_triangles_horizontal_270.pdf
new file mode 100644
index 000000000..542486991
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_horizontal_270.pdf differ
diff --git a/result_images/test_given_triangles/given_triangles_horizontal_270_pdf-failed-diff.png b/result_images/test_given_triangles/given_triangles_horizontal_270_pdf-failed-diff.png
new file mode 100644
index 000000000..1dc11ac8b
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_horizontal_270_pdf-failed-diff.png differ
diff --git a/result_images/test_given_triangles/given_triangles_horizontal_270_pdf.png b/result_images/test_given_triangles/given_triangles_horizontal_270_pdf.png
new file mode 100644
index 000000000..21c12b87d
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_horizontal_270_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_horizontal_90-expected.pdf b/result_images/test_given_triangles/given_triangles_horizontal_90-expected.pdf
new file mode 120000
index 000000000..c1a2198c5
--- /dev/null
+++ b/result_images/test_given_triangles/given_triangles_horizontal_90-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_given_triangles/given_triangles_horizontal_90.pdf
\ No newline at end of file
diff --git a/result_images/test_given_triangles/given_triangles_horizontal_90-expected_pdf.png b/result_images/test_given_triangles/given_triangles_horizontal_90-expected_pdf.png
new file mode 100644
index 000000000..6244680ae
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_horizontal_90-expected_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_horizontal_90.pdf b/result_images/test_given_triangles/given_triangles_horizontal_90.pdf
new file mode 100644
index 000000000..dc63ed2e3
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_horizontal_90.pdf differ
diff --git a/result_images/test_given_triangles/given_triangles_horizontal_90_pdf-failed-diff.png b/result_images/test_given_triangles/given_triangles_horizontal_90_pdf-failed-diff.png
new file mode 100644
index 000000000..a957ce31e
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_horizontal_90_pdf-failed-diff.png differ
diff --git a/result_images/test_given_triangles/given_triangles_horizontal_90_pdf.png b/result_images/test_given_triangles/given_triangles_horizontal_90_pdf.png
new file mode 100644
index 000000000..adbb1dd41
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_horizontal_90_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_tick_0-expected.pdf b/result_images/test_given_triangles/given_triangles_tick_0-expected.pdf
new file mode 120000
index 000000000..6f4cc8439
--- /dev/null
+++ b/result_images/test_given_triangles/given_triangles_tick_0-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_given_triangles/given_triangles_tick_0.pdf
\ No newline at end of file
diff --git a/result_images/test_given_triangles/given_triangles_tick_0-expected_pdf.png b/result_images/test_given_triangles/given_triangles_tick_0-expected_pdf.png
new file mode 100644
index 000000000..ae073a44e
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_tick_0-expected_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_tick_0.pdf b/result_images/test_given_triangles/given_triangles_tick_0.pdf
new file mode 100644
index 000000000..2eaf6e4b5
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_tick_0.pdf differ
diff --git a/result_images/test_given_triangles/given_triangles_tick_0_pdf-failed-diff.png b/result_images/test_given_triangles/given_triangles_tick_0_pdf-failed-diff.png
new file mode 100644
index 000000000..2077448d4
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_tick_0_pdf-failed-diff.png differ
diff --git a/result_images/test_given_triangles/given_triangles_tick_0_pdf.png b/result_images/test_given_triangles/given_triangles_tick_0_pdf.png
new file mode 100644
index 000000000..2ebf99bff
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_tick_0_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_tick_180-expected.pdf b/result_images/test_given_triangles/given_triangles_tick_180-expected.pdf
new file mode 120000
index 000000000..ebb29c17e
--- /dev/null
+++ b/result_images/test_given_triangles/given_triangles_tick_180-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_given_triangles/given_triangles_tick_180.pdf
\ No newline at end of file
diff --git a/result_images/test_given_triangles/given_triangles_tick_180-expected_pdf.png b/result_images/test_given_triangles/given_triangles_tick_180-expected_pdf.png
new file mode 100644
index 000000000..cd37e5ca7
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_tick_180-expected_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_tick_180.pdf b/result_images/test_given_triangles/given_triangles_tick_180.pdf
new file mode 100644
index 000000000..d1c9bacf3
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_tick_180.pdf differ
diff --git a/result_images/test_given_triangles/given_triangles_tick_180_pdf-failed-diff.png b/result_images/test_given_triangles/given_triangles_tick_180_pdf-failed-diff.png
new file mode 100644
index 000000000..29e1c5fc6
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_tick_180_pdf-failed-diff.png differ
diff --git a/result_images/test_given_triangles/given_triangles_tick_180_pdf.png b/result_images/test_given_triangles/given_triangles_tick_180_pdf.png
new file mode 100644
index 000000000..bca98cf68
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_tick_180_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_tick_270-expected.pdf b/result_images/test_given_triangles/given_triangles_tick_270-expected.pdf
new file mode 120000
index 000000000..90b847a2a
--- /dev/null
+++ b/result_images/test_given_triangles/given_triangles_tick_270-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_given_triangles/given_triangles_tick_270.pdf
\ No newline at end of file
diff --git a/result_images/test_given_triangles/given_triangles_tick_270-expected_pdf.png b/result_images/test_given_triangles/given_triangles_tick_270-expected_pdf.png
new file mode 100644
index 000000000..e9936b984
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_tick_270-expected_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_tick_270.pdf b/result_images/test_given_triangles/given_triangles_tick_270.pdf
new file mode 100644
index 000000000..381f70a4f
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_tick_270.pdf differ
diff --git a/result_images/test_given_triangles/given_triangles_tick_270_pdf-failed-diff.png b/result_images/test_given_triangles/given_triangles_tick_270_pdf-failed-diff.png
new file mode 100644
index 000000000..1e1d8004b
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_tick_270_pdf-failed-diff.png differ
diff --git a/result_images/test_given_triangles/given_triangles_tick_270_pdf.png b/result_images/test_given_triangles/given_triangles_tick_270_pdf.png
new file mode 100644
index 000000000..45e925a22
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_tick_270_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_tick_90-expected.pdf b/result_images/test_given_triangles/given_triangles_tick_90-expected.pdf
new file mode 120000
index 000000000..0d749fad6
--- /dev/null
+++ b/result_images/test_given_triangles/given_triangles_tick_90-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_given_triangles/given_triangles_tick_90.pdf
\ No newline at end of file
diff --git a/result_images/test_given_triangles/given_triangles_tick_90-expected_pdf.png b/result_images/test_given_triangles/given_triangles_tick_90-expected_pdf.png
new file mode 100644
index 000000000..f54c14e3d
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_tick_90-expected_pdf.png differ
diff --git a/result_images/test_given_triangles/given_triangles_tick_90.pdf b/result_images/test_given_triangles/given_triangles_tick_90.pdf
new file mode 100644
index 000000000..1a10596f7
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_tick_90.pdf differ
diff --git a/result_images/test_given_triangles/given_triangles_tick_90_pdf-failed-diff.png b/result_images/test_given_triangles/given_triangles_tick_90_pdf-failed-diff.png
new file mode 100644
index 000000000..ca683d60e
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_tick_90_pdf-failed-diff.png differ
diff --git a/result_images/test_given_triangles/given_triangles_tick_90_pdf.png b/result_images/test_given_triangles/given_triangles_tick_90_pdf.png
new file mode 100644
index 000000000..8e2699b4f
Binary files /dev/null and b/result_images/test_given_triangles/given_triangles_tick_90_pdf.png differ
diff --git a/result_images/test_hexbin/base-expected.pdf b/result_images/test_hexbin/base-expected.pdf
new file mode 120000
index 000000000..6d587a44f
--- /dev/null
+++ b/result_images/test_hexbin/base-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_hexbin/base.pdf
\ No newline at end of file
diff --git a/result_images/test_hexbin/base-expected_pdf.png b/result_images/test_hexbin/base-expected_pdf.png
new file mode 100644
index 000000000..f6e2cd7fa
Binary files /dev/null and b/result_images/test_hexbin/base-expected_pdf.png differ
diff --git a/result_images/test_hexbin/base.pdf b/result_images/test_hexbin/base.pdf
new file mode 100644
index 000000000..341317ea3
Binary files /dev/null and b/result_images/test_hexbin/base.pdf differ
diff --git a/result_images/test_hexbin/base_pdf-failed-diff.png b/result_images/test_hexbin/base_pdf-failed-diff.png
new file mode 100644
index 000000000..10cb6cbf1
Binary files /dev/null and b/result_images/test_hexbin/base_pdf-failed-diff.png differ
diff --git a/result_images/test_hexbin/base_pdf.png b/result_images/test_hexbin/base_pdf.png
new file mode 100644
index 000000000..08288da82
Binary files /dev/null and b/result_images/test_hexbin/base_pdf.png differ
diff --git a/result_images/test_hexbin/extent-expected.pdf b/result_images/test_hexbin/extent-expected.pdf
new file mode 120000
index 000000000..9091ef064
--- /dev/null
+++ b/result_images/test_hexbin/extent-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_hexbin/extent.pdf
\ No newline at end of file
diff --git a/result_images/test_hexbin/extent-expected_pdf.png b/result_images/test_hexbin/extent-expected_pdf.png
new file mode 100644
index 000000000..f3a6831a6
Binary files /dev/null and b/result_images/test_hexbin/extent-expected_pdf.png differ
diff --git a/result_images/test_hexbin/extent.pdf b/result_images/test_hexbin/extent.pdf
new file mode 100644
index 000000000..6dfdd5480
Binary files /dev/null and b/result_images/test_hexbin/extent.pdf differ
diff --git a/result_images/test_hexbin/extent_pdf-failed-diff.png b/result_images/test_hexbin/extent_pdf-failed-diff.png
new file mode 100644
index 000000000..95c21f290
Binary files /dev/null and b/result_images/test_hexbin/extent_pdf-failed-diff.png differ
diff --git a/result_images/test_hexbin/extent_pdf.png b/result_images/test_hexbin/extent_pdf.png
new file mode 100644
index 000000000..c6f4868c8
Binary files /dev/null and b/result_images/test_hexbin/extent_pdf.png differ
diff --git a/result_images/test_hexbin/given_triangles-expected.pdf b/result_images/test_hexbin/given_triangles-expected.pdf
new file mode 120000
index 000000000..0c52bcf42
--- /dev/null
+++ b/result_images/test_hexbin/given_triangles-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_hexbin/given_triangles.pdf
\ No newline at end of file
diff --git a/result_images/test_hexbin/given_triangles-expected_pdf.png b/result_images/test_hexbin/given_triangles-expected_pdf.png
new file mode 100644
index 000000000..0be7527cd
Binary files /dev/null and b/result_images/test_hexbin/given_triangles-expected_pdf.png differ
diff --git a/result_images/test_hexbin/given_triangles.pdf b/result_images/test_hexbin/given_triangles.pdf
new file mode 100644
index 000000000..579a4f553
Binary files /dev/null and b/result_images/test_hexbin/given_triangles.pdf differ
diff --git a/result_images/test_hexbin/given_triangles_pdf-failed-diff.png b/result_images/test_hexbin/given_triangles_pdf-failed-diff.png
new file mode 100644
index 000000000..d120125f1
Binary files /dev/null and b/result_images/test_hexbin/given_triangles_pdf-failed-diff.png differ
diff --git a/result_images/test_hexbin/given_triangles_pdf.png b/result_images/test_hexbin/given_triangles_pdf.png
new file mode 100644
index 000000000..d0bcf4091
Binary files /dev/null and b/result_images/test_hexbin/given_triangles_pdf.png differ
diff --git a/result_images/test_hexbin/ternary_lim-expected.pdf b/result_images/test_hexbin/ternary_lim-expected.pdf
new file mode 120000
index 000000000..5197d330c
--- /dev/null
+++ b/result_images/test_hexbin/ternary_lim-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_hexbin/ternary_lim.pdf
\ No newline at end of file
diff --git a/result_images/test_hexbin/ternary_lim-expected_pdf.png b/result_images/test_hexbin/ternary_lim-expected_pdf.png
new file mode 100644
index 000000000..e11c9a360
Binary files /dev/null and b/result_images/test_hexbin/ternary_lim-expected_pdf.png differ
diff --git a/result_images/test_hexbin/ternary_lim.pdf b/result_images/test_hexbin/ternary_lim.pdf
new file mode 100644
index 000000000..a7189ebb8
Binary files /dev/null and b/result_images/test_hexbin/ternary_lim.pdf differ
diff --git a/result_images/test_hexbin/ternary_lim_pdf-failed-diff.png b/result_images/test_hexbin/ternary_lim_pdf-failed-diff.png
new file mode 100644
index 000000000..78f42339c
Binary files /dev/null and b/result_images/test_hexbin/ternary_lim_pdf-failed-diff.png differ
diff --git a/result_images/test_hexbin/ternary_lim_pdf.png b/result_images/test_hexbin/ternary_lim_pdf.png
new file mode 100644
index 000000000..61e59367b
Binary files /dev/null and b/result_images/test_hexbin/ternary_lim_pdf.png differ
diff --git a/result_images/test_hexbin/test_bins_and_norm[pdf]-expected.pdf b/result_images/test_hexbin/test_bins_and_norm[pdf]-expected.pdf
new file mode 100644
index 000000000..ffcd7d3f9
Binary files /dev/null and b/result_images/test_hexbin/test_bins_and_norm[pdf]-expected.pdf differ
diff --git a/result_images/test_hexbin/test_bins_and_norm[pdf]-expected_pdf.png b/result_images/test_hexbin/test_bins_and_norm[pdf]-expected_pdf.png
new file mode 100644
index 000000000..61820efaf
Binary files /dev/null and b/result_images/test_hexbin/test_bins_and_norm[pdf]-expected_pdf.png differ
diff --git a/result_images/test_hexbin/test_bins_and_norm[pdf].pdf b/result_images/test_hexbin/test_bins_and_norm[pdf].pdf
new file mode 100644
index 000000000..e129e780a
Binary files /dev/null and b/result_images/test_hexbin/test_bins_and_norm[pdf].pdf differ
diff --git a/result_images/test_hexbin/test_bins_and_norm[pdf]_pdf.png b/result_images/test_hexbin/test_bins_and_norm[pdf]_pdf.png
new file mode 100644
index 000000000..61820efaf
Binary files /dev/null and b/result_images/test_hexbin/test_bins_and_norm[pdf]_pdf.png differ
diff --git a/result_images/test_hexbin/test_ternary_normalization[pdf]-expected.pdf b/result_images/test_hexbin/test_ternary_normalization[pdf]-expected.pdf
new file mode 100644
index 000000000..fada074ff
Binary files /dev/null and b/result_images/test_hexbin/test_ternary_normalization[pdf]-expected.pdf differ
diff --git a/result_images/test_hexbin/test_ternary_normalization[pdf]-expected_pdf.png b/result_images/test_hexbin/test_ternary_normalization[pdf]-expected_pdf.png
new file mode 100644
index 000000000..361c69891
Binary files /dev/null and b/result_images/test_hexbin/test_ternary_normalization[pdf]-expected_pdf.png differ
diff --git a/result_images/test_hexbin/test_ternary_normalization[pdf].pdf b/result_images/test_hexbin/test_ternary_normalization[pdf].pdf
new file mode 100644
index 000000000..fada074ff
Binary files /dev/null and b/result_images/test_hexbin/test_ternary_normalization[pdf].pdf differ
diff --git a/result_images/test_hexbin/test_ternary_normalization[pdf]_pdf.png b/result_images/test_hexbin/test_ternary_normalization[pdf]_pdf.png
new file mode 100644
index 000000000..361c69891
Binary files /dev/null and b/result_images/test_hexbin/test_ternary_normalization[pdf]_pdf.png differ
diff --git a/result_images/test_hexbin/test_weights[pdf]-expected.pdf b/result_images/test_hexbin/test_weights[pdf]-expected.pdf
new file mode 100644
index 000000000..331ab3e7a
Binary files /dev/null and b/result_images/test_hexbin/test_weights[pdf]-expected.pdf differ
diff --git a/result_images/test_hexbin/test_weights[pdf]-expected_pdf.png b/result_images/test_hexbin/test_weights[pdf]-expected_pdf.png
new file mode 100644
index 000000000..f3c39d224
Binary files /dev/null and b/result_images/test_hexbin/test_weights[pdf]-expected_pdf.png differ
diff --git a/result_images/test_hexbin/test_weights[pdf].pdf b/result_images/test_hexbin/test_weights[pdf].pdf
new file mode 100644
index 000000000..331ab3e7a
Binary files /dev/null and b/result_images/test_hexbin/test_weights[pdf].pdf differ
diff --git a/result_images/test_hexbin/test_weights[pdf]_pdf.png b/result_images/test_hexbin/test_weights[pdf]_pdf.png
new file mode 100644
index 000000000..f3c39d224
Binary files /dev/null and b/result_images/test_hexbin/test_weights[pdf]_pdf.png differ
diff --git a/result_images/test_keep_guide_labels.png b/result_images/test_keep_guide_labels.png
new file mode 100644
index 000000000..667e4a1c4
Binary files /dev/null and b/result_images/test_keep_guide_labels.png differ
diff --git a/result_images/test_pint_quantities.png b/result_images/test_pint_quantities.png
new file mode 100644
index 000000000..591462f0d
Binary files /dev/null and b/result_images/test_pint_quantities.png differ
diff --git a/result_images/test_seaborn_heatmap.png b/result_images/test_seaborn_heatmap.png
new file mode 100644
index 000000000..514d31094
Binary files /dev/null and b/result_images/test_seaborn_heatmap.png differ
diff --git a/result_images/test_seaborn_hist.png b/result_images/test_seaborn_hist.png
new file mode 100644
index 000000000..83a2cf43d
Binary files /dev/null and b/result_images/test_seaborn_hist.png differ
diff --git a/result_images/test_seaborn_relational.png b/result_images/test_seaborn_relational.png
new file mode 100644
index 000000000..c8884506e
Binary files /dev/null and b/result_images/test_seaborn_relational.png differ
diff --git a/result_images/test_seaborn_swarmplot.png b/result_images/test_seaborn_swarmplot.png
new file mode 100644
index 000000000..28e86c099
Binary files /dev/null and b/result_images/test_seaborn_swarmplot.png differ
diff --git a/result_images/test_ternary/arguments_6-expected.pdf b/result_images/test_ternary/arguments_6-expected.pdf
new file mode 120000
index 000000000..0de3b17ee
--- /dev/null
+++ b/result_images/test_ternary/arguments_6-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/arguments_6.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/arguments_6-expected_pdf.png b/result_images/test_ternary/arguments_6-expected_pdf.png
new file mode 100644
index 000000000..9942a11f4
Binary files /dev/null and b/result_images/test_ternary/arguments_6-expected_pdf.png differ
diff --git a/result_images/test_ternary/arguments_6.pdf b/result_images/test_ternary/arguments_6.pdf
new file mode 100644
index 000000000..faab1b28f
Binary files /dev/null and b/result_images/test_ternary/arguments_6.pdf differ
diff --git a/result_images/test_ternary/arguments_6_pdf-failed-diff.png b/result_images/test_ternary/arguments_6_pdf-failed-diff.png
new file mode 100644
index 000000000..95c21f290
Binary files /dev/null and b/result_images/test_ternary/arguments_6_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/arguments_6_pdf.png b/result_images/test_ternary/arguments_6_pdf.png
new file mode 100644
index 000000000..0cbceb6e0
Binary files /dev/null and b/result_images/test_ternary/arguments_6_pdf.png differ
diff --git a/result_images/test_ternary/arguments_7-expected.pdf b/result_images/test_ternary/arguments_7-expected.pdf
new file mode 120000
index 000000000..429417a50
--- /dev/null
+++ b/result_images/test_ternary/arguments_7-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/arguments_7.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/arguments_7-expected_pdf.png b/result_images/test_ternary/arguments_7-expected_pdf.png
new file mode 100644
index 000000000..99d2396d9
Binary files /dev/null and b/result_images/test_ternary/arguments_7-expected_pdf.png differ
diff --git a/result_images/test_ternary/arguments_7.pdf b/result_images/test_ternary/arguments_7.pdf
new file mode 100644
index 000000000..9b3a59859
Binary files /dev/null and b/result_images/test_ternary/arguments_7.pdf differ
diff --git a/result_images/test_ternary/arguments_7_pdf-failed-diff.png b/result_images/test_ternary/arguments_7_pdf-failed-diff.png
new file mode 100644
index 000000000..95c21f290
Binary files /dev/null and b/result_images/test_ternary/arguments_7_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/arguments_7_pdf.png b/result_images/test_ternary/arguments_7_pdf.png
new file mode 100644
index 000000000..2d85549fa
Binary files /dev/null and b/result_images/test_ternary/arguments_7_pdf.png differ
diff --git a/result_images/test_ternary/arrow_axes-expected.pdf b/result_images/test_ternary/arrow_axes-expected.pdf
new file mode 120000
index 000000000..70e1cfa51
--- /dev/null
+++ b/result_images/test_ternary/arrow_axes-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/arrow_axes.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/arrow_axes-expected_pdf.png b/result_images/test_ternary/arrow_axes-expected_pdf.png
new file mode 100644
index 000000000..42d370841
Binary files /dev/null and b/result_images/test_ternary/arrow_axes-expected_pdf.png differ
diff --git a/result_images/test_ternary/arrow_axes.pdf b/result_images/test_ternary/arrow_axes.pdf
new file mode 100644
index 000000000..88e089953
Binary files /dev/null and b/result_images/test_ternary/arrow_axes.pdf differ
diff --git a/result_images/test_ternary/arrow_axes_pdf-failed-diff.png b/result_images/test_ternary/arrow_axes_pdf-failed-diff.png
new file mode 100644
index 000000000..ad7481cca
Binary files /dev/null and b/result_images/test_ternary/arrow_axes_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/arrow_axes_pdf.png b/result_images/test_ternary/arrow_axes_pdf.png
new file mode 100644
index 000000000..1b38d40e4
Binary files /dev/null and b/result_images/test_ternary/arrow_axes_pdf.png differ
diff --git a/result_images/test_ternary/arrow_data-expected.pdf b/result_images/test_ternary/arrow_data-expected.pdf
new file mode 120000
index 000000000..5566f995a
--- /dev/null
+++ b/result_images/test_ternary/arrow_data-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/arrow_data.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/arrow_data-expected_pdf.png b/result_images/test_ternary/arrow_data-expected_pdf.png
new file mode 100644
index 000000000..5f2601e43
Binary files /dev/null and b/result_images/test_ternary/arrow_data-expected_pdf.png differ
diff --git a/result_images/test_ternary/arrow_data.pdf b/result_images/test_ternary/arrow_data.pdf
new file mode 100644
index 000000000..f0a01907c
Binary files /dev/null and b/result_images/test_ternary/arrow_data.pdf differ
diff --git a/result_images/test_ternary/arrow_data_pdf-failed-diff.png b/result_images/test_ternary/arrow_data_pdf-failed-diff.png
new file mode 100644
index 000000000..ad7481cca
Binary files /dev/null and b/result_images/test_ternary/arrow_data_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/arrow_data_pdf.png b/result_images/test_ternary/arrow_data_pdf.png
new file mode 100644
index 000000000..d7802405b
Binary files /dev/null and b/result_images/test_ternary/arrow_data_pdf.png differ
diff --git a/result_images/test_ternary/arrow_xy_axes-expected.pdf b/result_images/test_ternary/arrow_xy_axes-expected.pdf
new file mode 120000
index 000000000..4a10f7f6f
--- /dev/null
+++ b/result_images/test_ternary/arrow_xy_axes-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/arrow_xy_axes.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/arrow_xy_axes-expected_pdf.png b/result_images/test_ternary/arrow_xy_axes-expected_pdf.png
new file mode 100644
index 000000000..0edaff1f5
Binary files /dev/null and b/result_images/test_ternary/arrow_xy_axes-expected_pdf.png differ
diff --git a/result_images/test_ternary/arrow_xy_axes.pdf b/result_images/test_ternary/arrow_xy_axes.pdf
new file mode 100644
index 000000000..92e7520fa
Binary files /dev/null and b/result_images/test_ternary/arrow_xy_axes.pdf differ
diff --git a/result_images/test_ternary/arrow_xy_axes_pdf-failed-diff.png b/result_images/test_ternary/arrow_xy_axes_pdf-failed-diff.png
new file mode 100644
index 000000000..ad7481cca
Binary files /dev/null and b/result_images/test_ternary/arrow_xy_axes_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/arrow_xy_axes_pdf.png b/result_images/test_ternary/arrow_xy_axes_pdf.png
new file mode 100644
index 000000000..62e02752a
Binary files /dev/null and b/result_images/test_ternary/arrow_xy_axes_pdf.png differ
diff --git a/result_images/test_ternary/arrow_xy_data-expected.pdf b/result_images/test_ternary/arrow_xy_data-expected.pdf
new file mode 120000
index 000000000..688c7187f
--- /dev/null
+++ b/result_images/test_ternary/arrow_xy_data-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/arrow_xy_data.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/arrow_xy_data-expected_pdf.png b/result_images/test_ternary/arrow_xy_data-expected_pdf.png
new file mode 100644
index 000000000..3f3632991
Binary files /dev/null and b/result_images/test_ternary/arrow_xy_data-expected_pdf.png differ
diff --git a/result_images/test_ternary/arrow_xy_data.pdf b/result_images/test_ternary/arrow_xy_data.pdf
new file mode 100644
index 000000000..e2c2d00ca
Binary files /dev/null and b/result_images/test_ternary/arrow_xy_data.pdf differ
diff --git a/result_images/test_ternary/arrow_xy_data_pdf-failed-diff.png b/result_images/test_ternary/arrow_xy_data_pdf-failed-diff.png
new file mode 100644
index 000000000..ad7481cca
Binary files /dev/null and b/result_images/test_ternary/arrow_xy_data_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/arrow_xy_data_pdf.png b/result_images/test_ternary/arrow_xy_data_pdf.png
new file mode 100644
index 000000000..5859e207a
Binary files /dev/null and b/result_images/test_ternary/arrow_xy_data_pdf.png differ
diff --git a/result_images/test_ternary/aspect-expected.pdf b/result_images/test_ternary/aspect-expected.pdf
new file mode 120000
index 000000000..5ade35b69
--- /dev/null
+++ b/result_images/test_ternary/aspect-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/aspect.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/aspect-expected_pdf.png b/result_images/test_ternary/aspect-expected_pdf.png
new file mode 100644
index 000000000..1c23b8aee
Binary files /dev/null and b/result_images/test_ternary/aspect-expected_pdf.png differ
diff --git a/result_images/test_ternary/aspect.pdf b/result_images/test_ternary/aspect.pdf
new file mode 100644
index 000000000..9fc842b73
Binary files /dev/null and b/result_images/test_ternary/aspect.pdf differ
diff --git a/result_images/test_ternary/aspect_pdf-failed-diff.png b/result_images/test_ternary/aspect_pdf-failed-diff.png
new file mode 100644
index 000000000..cd77d312c
Binary files /dev/null and b/result_images/test_ternary/aspect_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/aspect_pdf.png b/result_images/test_ternary/aspect_pdf.png
new file mode 100644
index 000000000..d5c469770
Binary files /dev/null and b/result_images/test_ternary/aspect_pdf.png differ
diff --git a/result_images/test_ternary/axis_label_corner_axis-expected.pdf b/result_images/test_ternary/axis_label_corner_axis-expected.pdf
new file mode 120000
index 000000000..35276857e
--- /dev/null
+++ b/result_images/test_ternary/axis_label_corner_axis-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/axis_label_corner_axis.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/axis_label_corner_axis-expected_pdf.png b/result_images/test_ternary/axis_label_corner_axis-expected_pdf.png
new file mode 100644
index 000000000..eca241618
Binary files /dev/null and b/result_images/test_ternary/axis_label_corner_axis-expected_pdf.png differ
diff --git a/result_images/test_ternary/axis_label_corner_axis.pdf b/result_images/test_ternary/axis_label_corner_axis.pdf
new file mode 100644
index 000000000..eecdc40e3
Binary files /dev/null and b/result_images/test_ternary/axis_label_corner_axis.pdf differ
diff --git a/result_images/test_ternary/axis_label_corner_axis_pdf-failed-diff.png b/result_images/test_ternary/axis_label_corner_axis_pdf-failed-diff.png
new file mode 100644
index 000000000..bf705af09
Binary files /dev/null and b/result_images/test_ternary/axis_label_corner_axis_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/axis_label_corner_axis_pdf.png b/result_images/test_ternary/axis_label_corner_axis_pdf.png
new file mode 100644
index 000000000..93354fd53
Binary files /dev/null and b/result_images/test_ternary/axis_label_corner_axis_pdf.png differ
diff --git a/result_images/test_ternary/axis_label_corner_horizontal-expected.pdf b/result_images/test_ternary/axis_label_corner_horizontal-expected.pdf
new file mode 120000
index 000000000..ee77ef906
--- /dev/null
+++ b/result_images/test_ternary/axis_label_corner_horizontal-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/axis_label_corner_horizontal.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/axis_label_corner_horizontal-expected_pdf.png b/result_images/test_ternary/axis_label_corner_horizontal-expected_pdf.png
new file mode 100644
index 000000000..011d1462f
Binary files /dev/null and b/result_images/test_ternary/axis_label_corner_horizontal-expected_pdf.png differ
diff --git a/result_images/test_ternary/axis_label_corner_horizontal.pdf b/result_images/test_ternary/axis_label_corner_horizontal.pdf
new file mode 100644
index 000000000..8effa65b3
Binary files /dev/null and b/result_images/test_ternary/axis_label_corner_horizontal.pdf differ
diff --git a/result_images/test_ternary/axis_label_corner_horizontal_pdf-failed-diff.png b/result_images/test_ternary/axis_label_corner_horizontal_pdf-failed-diff.png
new file mode 100644
index 000000000..ea4d16f50
Binary files /dev/null and b/result_images/test_ternary/axis_label_corner_horizontal_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/axis_label_corner_horizontal_pdf.png b/result_images/test_ternary/axis_label_corner_horizontal_pdf.png
new file mode 100644
index 000000000..d2756d33d
Binary files /dev/null and b/result_images/test_ternary/axis_label_corner_horizontal_pdf.png differ
diff --git a/result_images/test_ternary/axis_label_tick1_axis-expected.pdf b/result_images/test_ternary/axis_label_tick1_axis-expected.pdf
new file mode 120000
index 000000000..53025106b
--- /dev/null
+++ b/result_images/test_ternary/axis_label_tick1_axis-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/axis_label_tick1_axis.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/axis_label_tick1_axis-expected_pdf.png b/result_images/test_ternary/axis_label_tick1_axis-expected_pdf.png
new file mode 100644
index 000000000..d47c8af1a
Binary files /dev/null and b/result_images/test_ternary/axis_label_tick1_axis-expected_pdf.png differ
diff --git a/result_images/test_ternary/axis_label_tick1_axis.pdf b/result_images/test_ternary/axis_label_tick1_axis.pdf
new file mode 100644
index 000000000..a3cdc8f3f
Binary files /dev/null and b/result_images/test_ternary/axis_label_tick1_axis.pdf differ
diff --git a/result_images/test_ternary/axis_label_tick1_axis_pdf-failed-diff.png b/result_images/test_ternary/axis_label_tick1_axis_pdf-failed-diff.png
new file mode 100644
index 000000000..95c21f290
Binary files /dev/null and b/result_images/test_ternary/axis_label_tick1_axis_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/axis_label_tick1_axis_pdf.png b/result_images/test_ternary/axis_label_tick1_axis_pdf.png
new file mode 100644
index 000000000..c9f89ef8f
Binary files /dev/null and b/result_images/test_ternary/axis_label_tick1_axis_pdf.png differ
diff --git a/result_images/test_ternary/axis_label_tick1_horizontal-expected.pdf b/result_images/test_ternary/axis_label_tick1_horizontal-expected.pdf
new file mode 120000
index 000000000..448dcdcf5
--- /dev/null
+++ b/result_images/test_ternary/axis_label_tick1_horizontal-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/axis_label_tick1_horizontal.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/axis_label_tick1_horizontal-expected_pdf.png b/result_images/test_ternary/axis_label_tick1_horizontal-expected_pdf.png
new file mode 100644
index 000000000..e27ff69e7
Binary files /dev/null and b/result_images/test_ternary/axis_label_tick1_horizontal-expected_pdf.png differ
diff --git a/result_images/test_ternary/axis_label_tick1_horizontal.pdf b/result_images/test_ternary/axis_label_tick1_horizontal.pdf
new file mode 100644
index 000000000..f6785d2bb
Binary files /dev/null and b/result_images/test_ternary/axis_label_tick1_horizontal.pdf differ
diff --git a/result_images/test_ternary/axis_label_tick1_horizontal_pdf-failed-diff.png b/result_images/test_ternary/axis_label_tick1_horizontal_pdf-failed-diff.png
new file mode 100644
index 000000000..95c21f290
Binary files /dev/null and b/result_images/test_ternary/axis_label_tick1_horizontal_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/axis_label_tick1_horizontal_pdf.png b/result_images/test_ternary/axis_label_tick1_horizontal_pdf.png
new file mode 100644
index 000000000..b1eb5cdd9
Binary files /dev/null and b/result_images/test_ternary/axis_label_tick1_horizontal_pdf.png differ
diff --git a/result_images/test_ternary/axis_label_tick2_axis-expected.pdf b/result_images/test_ternary/axis_label_tick2_axis-expected.pdf
new file mode 120000
index 000000000..b3b6da74e
--- /dev/null
+++ b/result_images/test_ternary/axis_label_tick2_axis-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/axis_label_tick2_axis.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/axis_label_tick2_axis-expected_pdf.png b/result_images/test_ternary/axis_label_tick2_axis-expected_pdf.png
new file mode 100644
index 000000000..c58fa72a8
Binary files /dev/null and b/result_images/test_ternary/axis_label_tick2_axis-expected_pdf.png differ
diff --git a/result_images/test_ternary/axis_label_tick2_axis.pdf b/result_images/test_ternary/axis_label_tick2_axis.pdf
new file mode 100644
index 000000000..5f3d8305a
Binary files /dev/null and b/result_images/test_ternary/axis_label_tick2_axis.pdf differ
diff --git a/result_images/test_ternary/axis_label_tick2_axis_pdf-failed-diff.png b/result_images/test_ternary/axis_label_tick2_axis_pdf-failed-diff.png
new file mode 100644
index 000000000..95c21f290
Binary files /dev/null and b/result_images/test_ternary/axis_label_tick2_axis_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/axis_label_tick2_axis_pdf.png b/result_images/test_ternary/axis_label_tick2_axis_pdf.png
new file mode 100644
index 000000000..932328c2b
Binary files /dev/null and b/result_images/test_ternary/axis_label_tick2_axis_pdf.png differ
diff --git a/result_images/test_ternary/axis_label_tick2_horizontal-expected.pdf b/result_images/test_ternary/axis_label_tick2_horizontal-expected.pdf
new file mode 120000
index 000000000..678e92049
--- /dev/null
+++ b/result_images/test_ternary/axis_label_tick2_horizontal-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/axis_label_tick2_horizontal.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/axis_label_tick2_horizontal-expected_pdf.png b/result_images/test_ternary/axis_label_tick2_horizontal-expected_pdf.png
new file mode 100644
index 000000000..fa43070af
Binary files /dev/null and b/result_images/test_ternary/axis_label_tick2_horizontal-expected_pdf.png differ
diff --git a/result_images/test_ternary/axis_label_tick2_horizontal.pdf b/result_images/test_ternary/axis_label_tick2_horizontal.pdf
new file mode 100644
index 000000000..7f5262667
Binary files /dev/null and b/result_images/test_ternary/axis_label_tick2_horizontal.pdf differ
diff --git a/result_images/test_ternary/axis_label_tick2_horizontal_pdf-failed-diff.png b/result_images/test_ternary/axis_label_tick2_horizontal_pdf-failed-diff.png
new file mode 100644
index 000000000..95c21f290
Binary files /dev/null and b/result_images/test_ternary/axis_label_tick2_horizontal_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/axis_label_tick2_horizontal_pdf.png b/result_images/test_ternary/axis_label_tick2_horizontal_pdf.png
new file mode 100644
index 000000000..f6578691c
Binary files /dev/null and b/result_images/test_ternary/axis_label_tick2_horizontal_pdf.png differ
diff --git a/result_images/test_ternary/fit_none-expected.pdf b/result_images/test_ternary/fit_none-expected.pdf
new file mode 120000
index 000000000..7ad7e59f2
--- /dev/null
+++ b/result_images/test_ternary/fit_none-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/fit_none.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/fit_none-expected_pdf.png b/result_images/test_ternary/fit_none-expected_pdf.png
new file mode 100644
index 000000000..973cdd3bc
Binary files /dev/null and b/result_images/test_ternary/fit_none-expected_pdf.png differ
diff --git a/result_images/test_ternary/fit_none.pdf b/result_images/test_ternary/fit_none.pdf
new file mode 100644
index 000000000..35c120872
Binary files /dev/null and b/result_images/test_ternary/fit_none.pdf differ
diff --git a/result_images/test_ternary/fit_none_pdf.png b/result_images/test_ternary/fit_none_pdf.png
new file mode 100644
index 000000000..973cdd3bc
Binary files /dev/null and b/result_images/test_ternary/fit_none_pdf.png differ
diff --git a/result_images/test_ternary/fit_rectangle-expected.pdf b/result_images/test_ternary/fit_rectangle-expected.pdf
new file mode 120000
index 000000000..24ac757ff
--- /dev/null
+++ b/result_images/test_ternary/fit_rectangle-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/fit_rectangle.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/fit_rectangle-expected_pdf.png b/result_images/test_ternary/fit_rectangle-expected_pdf.png
new file mode 100644
index 000000000..b826c2c58
Binary files /dev/null and b/result_images/test_ternary/fit_rectangle-expected_pdf.png differ
diff --git a/result_images/test_ternary/fit_rectangle.pdf b/result_images/test_ternary/fit_rectangle.pdf
new file mode 100644
index 000000000..8ed6e1a10
Binary files /dev/null and b/result_images/test_ternary/fit_rectangle.pdf differ
diff --git a/result_images/test_ternary/fit_rectangle_pdf-failed-diff.png b/result_images/test_ternary/fit_rectangle_pdf-failed-diff.png
new file mode 100644
index 000000000..73081e1f3
Binary files /dev/null and b/result_images/test_ternary/fit_rectangle_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/fit_rectangle_pdf.png b/result_images/test_ternary/fit_rectangle_pdf.png
new file mode 100644
index 000000000..27dee96bc
Binary files /dev/null and b/result_images/test_ternary/fit_rectangle_pdf.png differ
diff --git a/result_images/test_ternary/fit_triangle-expected.pdf b/result_images/test_ternary/fit_triangle-expected.pdf
new file mode 120000
index 000000000..498ff5862
--- /dev/null
+++ b/result_images/test_ternary/fit_triangle-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/fit_triangle.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/fit_triangle-expected_pdf.png b/result_images/test_ternary/fit_triangle-expected_pdf.png
new file mode 100644
index 000000000..f674e662e
Binary files /dev/null and b/result_images/test_ternary/fit_triangle-expected_pdf.png differ
diff --git a/result_images/test_ternary/fit_triangle.pdf b/result_images/test_ternary/fit_triangle.pdf
new file mode 100644
index 000000000..32f4cf2fc
Binary files /dev/null and b/result_images/test_ternary/fit_triangle.pdf differ
diff --git a/result_images/test_ternary/fit_triangle_pdf.png b/result_images/test_ternary/fit_triangle_pdf.png
new file mode 100644
index 000000000..f674e662e
Binary files /dev/null and b/result_images/test_ternary/fit_triangle_pdf.png differ
diff --git a/result_images/test_ternary/legend-expected.pdf b/result_images/test_ternary/legend-expected.pdf
new file mode 120000
index 000000000..cfc924ade
--- /dev/null
+++ b/result_images/test_ternary/legend-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/legend.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/legend-expected_pdf.png b/result_images/test_ternary/legend-expected_pdf.png
new file mode 100644
index 000000000..228c5af0a
Binary files /dev/null and b/result_images/test_ternary/legend-expected_pdf.png differ
diff --git a/result_images/test_ternary/legend.pdf b/result_images/test_ternary/legend.pdf
new file mode 100644
index 000000000..1840239c9
Binary files /dev/null and b/result_images/test_ternary/legend.pdf differ
diff --git a/result_images/test_ternary/legend_pdf-failed-diff.png b/result_images/test_ternary/legend_pdf-failed-diff.png
new file mode 100644
index 000000000..95c21f290
Binary files /dev/null and b/result_images/test_ternary/legend_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/legend_pdf.png b/result_images/test_ternary/legend_pdf.png
new file mode 100644
index 000000000..50d23bfb9
Binary files /dev/null and b/result_images/test_ternary/legend_pdf.png differ
diff --git a/result_images/test_ternary/manual_ticklabels-expected.pdf b/result_images/test_ternary/manual_ticklabels-expected.pdf
new file mode 120000
index 000000000..78ff8062c
--- /dev/null
+++ b/result_images/test_ternary/manual_ticklabels-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/manual_ticklabels.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/manual_ticklabels-expected_pdf.png b/result_images/test_ternary/manual_ticklabels-expected_pdf.png
new file mode 100644
index 000000000..ecdee901e
Binary files /dev/null and b/result_images/test_ternary/manual_ticklabels-expected_pdf.png differ
diff --git a/result_images/test_ternary/manual_ticklabels.pdf b/result_images/test_ternary/manual_ticklabels.pdf
new file mode 100644
index 000000000..9f258576c
Binary files /dev/null and b/result_images/test_ternary/manual_ticklabels.pdf differ
diff --git a/result_images/test_ternary/manual_ticklabels_pdf.png b/result_images/test_ternary/manual_ticklabels_pdf.png
new file mode 100644
index 000000000..ecdee901e
Binary files /dev/null and b/result_images/test_ternary/manual_ticklabels_pdf.png differ
diff --git a/result_images/test_ternary/manual_ticks-expected.pdf b/result_images/test_ternary/manual_ticks-expected.pdf
new file mode 120000
index 000000000..04b381858
--- /dev/null
+++ b/result_images/test_ternary/manual_ticks-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/manual_ticks.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/manual_ticks-expected_pdf.png b/result_images/test_ternary/manual_ticks-expected_pdf.png
new file mode 100644
index 000000000..ea72a80bd
Binary files /dev/null and b/result_images/test_ternary/manual_ticks-expected_pdf.png differ
diff --git a/result_images/test_ternary/manual_ticks.pdf b/result_images/test_ternary/manual_ticks.pdf
new file mode 100644
index 000000000..ed370bfbf
Binary files /dev/null and b/result_images/test_ternary/manual_ticks.pdf differ
diff --git a/result_images/test_ternary/manual_ticks_pdf-failed-diff.png b/result_images/test_ternary/manual_ticks_pdf-failed-diff.png
new file mode 100644
index 000000000..50d04699e
Binary files /dev/null and b/result_images/test_ternary/manual_ticks_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/manual_ticks_pdf.png b/result_images/test_ternary/manual_ticks_pdf.png
new file mode 100644
index 000000000..7f69db022
Binary files /dev/null and b/result_images/test_ternary/manual_ticks_pdf.png differ
diff --git a/result_images/test_ternary/negative_ticks-expected.pdf b/result_images/test_ternary/negative_ticks-expected.pdf
new file mode 120000
index 000000000..505ea45e8
--- /dev/null
+++ b/result_images/test_ternary/negative_ticks-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/negative_ticks.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/negative_ticks-expected_pdf.png b/result_images/test_ternary/negative_ticks-expected_pdf.png
new file mode 100644
index 000000000..e81d99e06
Binary files /dev/null and b/result_images/test_ternary/negative_ticks-expected_pdf.png differ
diff --git a/result_images/test_ternary/negative_ticks.pdf b/result_images/test_ternary/negative_ticks.pdf
new file mode 100644
index 000000000..5f0362b00
Binary files /dev/null and b/result_images/test_ternary/negative_ticks.pdf differ
diff --git a/result_images/test_ternary/negative_ticks_pdf-failed-diff.png b/result_images/test_ternary/negative_ticks_pdf-failed-diff.png
new file mode 100644
index 000000000..13f6031d6
Binary files /dev/null and b/result_images/test_ternary/negative_ticks_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/negative_ticks_pdf.png b/result_images/test_ternary/negative_ticks_pdf.png
new file mode 100644
index 000000000..164a86a2f
Binary files /dev/null and b/result_images/test_ternary/negative_ticks_pdf.png differ
diff --git a/result_images/test_ternary/opposite_ticks-expected.pdf b/result_images/test_ternary/opposite_ticks-expected.pdf
new file mode 120000
index 000000000..6491ea3b8
--- /dev/null
+++ b/result_images/test_ternary/opposite_ticks-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/opposite_ticks.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/opposite_ticks-expected_pdf.png b/result_images/test_ternary/opposite_ticks-expected_pdf.png
new file mode 100644
index 000000000..9cdb452f3
Binary files /dev/null and b/result_images/test_ternary/opposite_ticks-expected_pdf.png differ
diff --git a/result_images/test_ternary/opposite_ticks.pdf b/result_images/test_ternary/opposite_ticks.pdf
new file mode 100644
index 000000000..62b578d69
Binary files /dev/null and b/result_images/test_ternary/opposite_ticks.pdf differ
diff --git a/result_images/test_ternary/opposite_ticks_pdf-failed-diff.png b/result_images/test_ternary/opposite_ticks_pdf-failed-diff.png
new file mode 100644
index 000000000..1679edf9e
Binary files /dev/null and b/result_images/test_ternary/opposite_ticks_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/opposite_ticks_pdf.png b/result_images/test_ternary/opposite_ticks_pdf.png
new file mode 100644
index 000000000..9061fe3bd
Binary files /dev/null and b/result_images/test_ternary/opposite_ticks_pdf.png differ
diff --git a/result_images/test_ternary/plot-expected.pdf b/result_images/test_ternary/plot-expected.pdf
new file mode 120000
index 000000000..5268041ab
--- /dev/null
+++ b/result_images/test_ternary/plot-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/plot.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/plot-expected_pdf.png b/result_images/test_ternary/plot-expected_pdf.png
new file mode 100644
index 000000000..8beef3615
Binary files /dev/null and b/result_images/test_ternary/plot-expected_pdf.png differ
diff --git a/result_images/test_ternary/plot.pdf b/result_images/test_ternary/plot.pdf
new file mode 100644
index 000000000..345c8abc1
Binary files /dev/null and b/result_images/test_ternary/plot.pdf differ
diff --git a/result_images/test_ternary/plot_pdf-failed-diff.png b/result_images/test_ternary/plot_pdf-failed-diff.png
new file mode 100644
index 000000000..95c21f290
Binary files /dev/null and b/result_images/test_ternary/plot_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/plot_pdf.png b/result_images/test_ternary/plot_pdf.png
new file mode 100644
index 000000000..f4fc1aa6f
Binary files /dev/null and b/result_images/test_ternary/plot_pdf.png differ
diff --git a/result_images/test_ternary/quiver-expected.pdf b/result_images/test_ternary/quiver-expected.pdf
new file mode 120000
index 000000000..bd8aee849
--- /dev/null
+++ b/result_images/test_ternary/quiver-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/quiver.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/quiver-expected_pdf.png b/result_images/test_ternary/quiver-expected_pdf.png
new file mode 100644
index 000000000..6f5afa4d0
Binary files /dev/null and b/result_images/test_ternary/quiver-expected_pdf.png differ
diff --git a/result_images/test_ternary/quiver.pdf b/result_images/test_ternary/quiver.pdf
new file mode 100644
index 000000000..89b081aff
Binary files /dev/null and b/result_images/test_ternary/quiver.pdf differ
diff --git a/result_images/test_ternary/quiver_color-expected.pdf b/result_images/test_ternary/quiver_color-expected.pdf
new file mode 120000
index 000000000..47aae554f
--- /dev/null
+++ b/result_images/test_ternary/quiver_color-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/quiver_color.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/quiver_color-expected_pdf.png b/result_images/test_ternary/quiver_color-expected_pdf.png
new file mode 100644
index 000000000..4bec05c33
Binary files /dev/null and b/result_images/test_ternary/quiver_color-expected_pdf.png differ
diff --git a/result_images/test_ternary/quiver_color.pdf b/result_images/test_ternary/quiver_color.pdf
new file mode 100644
index 000000000..d05446b87
Binary files /dev/null and b/result_images/test_ternary/quiver_color.pdf differ
diff --git a/result_images/test_ternary/quiver_color_pdf-failed-diff.png b/result_images/test_ternary/quiver_color_pdf-failed-diff.png
new file mode 100644
index 000000000..b1ca34df9
Binary files /dev/null and b/result_images/test_ternary/quiver_color_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/quiver_color_pdf.png b/result_images/test_ternary/quiver_color_pdf.png
new file mode 100644
index 000000000..956e5b8cf
Binary files /dev/null and b/result_images/test_ternary/quiver_color_pdf.png differ
diff --git a/result_images/test_ternary/quiver_pdf-failed-diff.png b/result_images/test_ternary/quiver_pdf-failed-diff.png
new file mode 100644
index 000000000..95c21f290
Binary files /dev/null and b/result_images/test_ternary/quiver_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/quiver_pdf.png b/result_images/test_ternary/quiver_pdf.png
new file mode 100644
index 000000000..7dceb308f
Binary files /dev/null and b/result_images/test_ternary/quiver_pdf.png differ
diff --git a/result_images/test_ternary/quiver_xy_axes-expected.pdf b/result_images/test_ternary/quiver_xy_axes-expected.pdf
new file mode 120000
index 000000000..a595c57b6
--- /dev/null
+++ b/result_images/test_ternary/quiver_xy_axes-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/quiver_xy_axes.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/quiver_xy_axes-expected_pdf.png b/result_images/test_ternary/quiver_xy_axes-expected_pdf.png
new file mode 100644
index 000000000..e50e8dbed
Binary files /dev/null and b/result_images/test_ternary/quiver_xy_axes-expected_pdf.png differ
diff --git a/result_images/test_ternary/quiver_xy_axes.pdf b/result_images/test_ternary/quiver_xy_axes.pdf
new file mode 100644
index 000000000..630ee4786
Binary files /dev/null and b/result_images/test_ternary/quiver_xy_axes.pdf differ
diff --git a/result_images/test_ternary/quiver_xy_axes_pdf-failed-diff.png b/result_images/test_ternary/quiver_xy_axes_pdf-failed-diff.png
new file mode 100644
index 000000000..ad7481cca
Binary files /dev/null and b/result_images/test_ternary/quiver_xy_axes_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/quiver_xy_axes_pdf.png b/result_images/test_ternary/quiver_xy_axes_pdf.png
new file mode 100644
index 000000000..5aa598d89
Binary files /dev/null and b/result_images/test_ternary/quiver_xy_axes_pdf.png differ
diff --git a/result_images/test_ternary/quiver_xy_data-expected.pdf b/result_images/test_ternary/quiver_xy_data-expected.pdf
new file mode 120000
index 000000000..1e2c4ab1e
--- /dev/null
+++ b/result_images/test_ternary/quiver_xy_data-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/quiver_xy_data.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/quiver_xy_data-expected_pdf.png b/result_images/test_ternary/quiver_xy_data-expected_pdf.png
new file mode 100644
index 000000000..60f5042ce
Binary files /dev/null and b/result_images/test_ternary/quiver_xy_data-expected_pdf.png differ
diff --git a/result_images/test_ternary/quiver_xy_data.pdf b/result_images/test_ternary/quiver_xy_data.pdf
new file mode 100644
index 000000000..3700fade2
Binary files /dev/null and b/result_images/test_ternary/quiver_xy_data.pdf differ
diff --git a/result_images/test_ternary/quiver_xy_data_pdf-failed-diff.png b/result_images/test_ternary/quiver_xy_data_pdf-failed-diff.png
new file mode 100644
index 000000000..ad7481cca
Binary files /dev/null and b/result_images/test_ternary/quiver_xy_data_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/quiver_xy_data_pdf.png b/result_images/test_ternary/quiver_xy_data_pdf.png
new file mode 100644
index 000000000..b83e291d4
Binary files /dev/null and b/result_images/test_ternary/quiver_xy_data_pdf.png differ
diff --git a/result_images/test_ternary/scatter-expected.pdf b/result_images/test_ternary/scatter-expected.pdf
new file mode 120000
index 000000000..294348814
--- /dev/null
+++ b/result_images/test_ternary/scatter-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/scatter.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/scatter-expected_pdf.png b/result_images/test_ternary/scatter-expected_pdf.png
new file mode 100644
index 000000000..23a50e399
Binary files /dev/null and b/result_images/test_ternary/scatter-expected_pdf.png differ
diff --git a/result_images/test_ternary/scatter.pdf b/result_images/test_ternary/scatter.pdf
new file mode 100644
index 000000000..bc4d1e913
Binary files /dev/null and b/result_images/test_ternary/scatter.pdf differ
diff --git a/result_images/test_ternary/scatter_color-expected.pdf b/result_images/test_ternary/scatter_color-expected.pdf
new file mode 120000
index 000000000..6d3877f36
--- /dev/null
+++ b/result_images/test_ternary/scatter_color-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/scatter_color.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/scatter_color-expected_pdf.png b/result_images/test_ternary/scatter_color-expected_pdf.png
new file mode 100644
index 000000000..a474a3507
Binary files /dev/null and b/result_images/test_ternary/scatter_color-expected_pdf.png differ
diff --git a/result_images/test_ternary/scatter_color.pdf b/result_images/test_ternary/scatter_color.pdf
new file mode 100644
index 000000000..ae4766c85
Binary files /dev/null and b/result_images/test_ternary/scatter_color.pdf differ
diff --git a/result_images/test_ternary/scatter_color_pdf-failed-diff.png b/result_images/test_ternary/scatter_color_pdf-failed-diff.png
new file mode 100644
index 000000000..b1ca34df9
Binary files /dev/null and b/result_images/test_ternary/scatter_color_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/scatter_color_pdf.png b/result_images/test_ternary/scatter_color_pdf.png
new file mode 100644
index 000000000..98fce2bcc
Binary files /dev/null and b/result_images/test_ternary/scatter_color_pdf.png differ
diff --git a/result_images/test_ternary/scatter_pdf-failed-diff.png b/result_images/test_ternary/scatter_pdf-failed-diff.png
new file mode 100644
index 000000000..95c21f290
Binary files /dev/null and b/result_images/test_ternary/scatter_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/scatter_pdf.png b/result_images/test_ternary/scatter_pdf.png
new file mode 100644
index 000000000..5bb4df148
Binary files /dev/null and b/result_images/test_ternary/scatter_pdf.png differ
diff --git a/result_images/test_ternary/spans-expected.pdf b/result_images/test_ternary/spans-expected.pdf
new file mode 120000
index 000000000..2f282a181
--- /dev/null
+++ b/result_images/test_ternary/spans-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/spans.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/spans-expected_pdf.png b/result_images/test_ternary/spans-expected_pdf.png
new file mode 100644
index 000000000..f14138101
Binary files /dev/null and b/result_images/test_ternary/spans-expected_pdf.png differ
diff --git a/result_images/test_ternary/spans.pdf b/result_images/test_ternary/spans.pdf
new file mode 100644
index 000000000..a172a50bd
Binary files /dev/null and b/result_images/test_ternary/spans.pdf differ
diff --git a/result_images/test_ternary/spans_pdf-failed-diff.png b/result_images/test_ternary/spans_pdf-failed-diff.png
new file mode 100644
index 000000000..95c21f290
Binary files /dev/null and b/result_images/test_ternary/spans_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/spans_pdf.png b/result_images/test_ternary/spans_pdf.png
new file mode 100644
index 000000000..117c4df46
Binary files /dev/null and b/result_images/test_ternary/spans_pdf.png differ
diff --git a/result_images/test_ternary/test_axline[pdf]-expected.pdf b/result_images/test_ternary/test_axline[pdf]-expected.pdf
new file mode 100644
index 000000000..29f71c7ca
Binary files /dev/null and b/result_images/test_ternary/test_axline[pdf]-expected.pdf differ
diff --git a/result_images/test_ternary/test_axline[pdf]-expected_pdf.png b/result_images/test_ternary/test_axline[pdf]-expected_pdf.png
new file mode 100644
index 000000000..f4b6ca832
Binary files /dev/null and b/result_images/test_ternary/test_axline[pdf]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_axline[pdf].pdf b/result_images/test_ternary/test_axline[pdf].pdf
new file mode 100644
index 000000000..52534ec2c
Binary files /dev/null and b/result_images/test_ternary/test_axline[pdf].pdf differ
diff --git a/result_images/test_ternary/test_axline[pdf]_pdf.png b/result_images/test_ternary/test_axline[pdf]_pdf.png
new file mode 100644
index 000000000..f4b6ca832
Binary files /dev/null and b/result_images/test_ternary/test_axline[pdf]_pdf.png differ
diff --git a/result_images/test_ternary/test_axline_axes[pdf]-expected.pdf b/result_images/test_ternary/test_axline_axes[pdf]-expected.pdf
new file mode 100644
index 000000000..da9ebb339
Binary files /dev/null and b/result_images/test_ternary/test_axline_axes[pdf]-expected.pdf differ
diff --git a/result_images/test_ternary/test_axline_axes[pdf]-expected_pdf.png b/result_images/test_ternary/test_axline_axes[pdf]-expected_pdf.png
new file mode 100644
index 000000000..d63620ce0
Binary files /dev/null and b/result_images/test_ternary/test_axline_axes[pdf]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_axline_axes[pdf].pdf b/result_images/test_ternary/test_axline_axes[pdf].pdf
new file mode 100644
index 000000000..38f64867e
Binary files /dev/null and b/result_images/test_ternary/test_axline_axes[pdf].pdf differ
diff --git a/result_images/test_ternary/test_axline_axes[pdf]_pdf.png b/result_images/test_ternary/test_axline_axes[pdf]_pdf.png
new file mode 100644
index 000000000..d63620ce0
Binary files /dev/null and b/result_images/test_ternary/test_axline_axes[pdf]_pdf.png differ
diff --git a/result_images/test_ternary/test_axline_axes_slope[pdf]-expected.pdf b/result_images/test_ternary/test_axline_axes_slope[pdf]-expected.pdf
new file mode 100644
index 000000000..da9ebb339
Binary files /dev/null and b/result_images/test_ternary/test_axline_axes_slope[pdf]-expected.pdf differ
diff --git a/result_images/test_ternary/test_axline_axes_slope[pdf]-expected_pdf.png b/result_images/test_ternary/test_axline_axes_slope[pdf]-expected_pdf.png
new file mode 100644
index 000000000..d63620ce0
Binary files /dev/null and b/result_images/test_ternary/test_axline_axes_slope[pdf]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_axline_axes_slope[pdf].pdf b/result_images/test_ternary/test_axline_axes_slope[pdf].pdf
new file mode 100644
index 000000000..38f64867e
Binary files /dev/null and b/result_images/test_ternary/test_axline_axes_slope[pdf].pdf differ
diff --git a/result_images/test_ternary/test_axline_axes_slope[pdf]_pdf.png b/result_images/test_ternary/test_axline_axes_slope[pdf]_pdf.png
new file mode 100644
index 000000000..d63620ce0
Binary files /dev/null and b/result_images/test_ternary/test_axline_axes_slope[pdf]_pdf.png differ
diff --git a/result_images/test_ternary/test_axline_slope[pdf]-expected.pdf b/result_images/test_ternary/test_axline_slope[pdf]-expected.pdf
new file mode 100644
index 000000000..29f71c7ca
Binary files /dev/null and b/result_images/test_ternary/test_axline_slope[pdf]-expected.pdf differ
diff --git a/result_images/test_ternary/test_axline_slope[pdf]-expected_pdf.png b/result_images/test_ternary/test_axline_slope[pdf]-expected_pdf.png
new file mode 100644
index 000000000..f4b6ca832
Binary files /dev/null and b/result_images/test_ternary/test_axline_slope[pdf]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_axline_slope[pdf].pdf b/result_images/test_ternary/test_axline_slope[pdf].pdf
new file mode 100644
index 000000000..52534ec2c
Binary files /dev/null and b/result_images/test_ternary/test_axline_slope[pdf].pdf differ
diff --git a/result_images/test_ternary/test_axline_slope[pdf]_pdf.png b/result_images/test_ternary/test_axline_slope[pdf]_pdf.png
new file mode 100644
index 000000000..f4b6ca832
Binary files /dev/null and b/result_images/test_ternary/test_axline_slope[pdf]_pdf.png differ
diff --git a/result_images/test_ternary/test_data[pdf]-expected.pdf b/result_images/test_ternary/test_data[pdf]-expected.pdf
new file mode 100644
index 000000000..a7da811ed
Binary files /dev/null and b/result_images/test_ternary/test_data[pdf]-expected.pdf differ
diff --git a/result_images/test_ternary/test_data[pdf]-expected_pdf.png b/result_images/test_ternary/test_data[pdf]-expected_pdf.png
new file mode 100644
index 000000000..e0c726cd3
Binary files /dev/null and b/result_images/test_ternary/test_data[pdf]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_data[pdf].pdf b/result_images/test_ternary/test_data[pdf].pdf
new file mode 100644
index 000000000..22a1aedcd
Binary files /dev/null and b/result_images/test_ternary/test_data[pdf].pdf differ
diff --git a/result_images/test_ternary/test_data[pdf]_pdf.png b/result_images/test_ternary/test_data[pdf]_pdf.png
new file mode 100644
index 000000000..e0c726cd3
Binary files /dev/null and b/result_images/test_ternary/test_data[pdf]_pdf.png differ
diff --git a/result_images/test_ternary/test_fill[pdf]-expected.pdf b/result_images/test_ternary/test_fill[pdf]-expected.pdf
new file mode 100644
index 000000000..74ad92247
Binary files /dev/null and b/result_images/test_ternary/test_fill[pdf]-expected.pdf differ
diff --git a/result_images/test_ternary/test_fill[pdf]-expected_pdf.png b/result_images/test_ternary/test_fill[pdf]-expected_pdf.png
new file mode 100644
index 000000000..e0c726cd3
Binary files /dev/null and b/result_images/test_ternary/test_fill[pdf]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_fill[pdf].pdf b/result_images/test_ternary/test_fill[pdf].pdf
new file mode 100644
index 000000000..22a1aedcd
Binary files /dev/null and b/result_images/test_ternary/test_fill[pdf].pdf differ
diff --git a/result_images/test_ternary/test_fill[pdf]_pdf.png b/result_images/test_ternary/test_fill[pdf]_pdf.png
new file mode 100644
index 000000000..e0c726cd3
Binary files /dev/null and b/result_images/test_ternary/test_fill[pdf]_pdf.png differ
diff --git a/result_images/test_ternary/test_grid_both[pdf]-expected.pdf b/result_images/test_ternary/test_grid_both[pdf]-expected.pdf
new file mode 100644
index 000000000..3356c4121
Binary files /dev/null and b/result_images/test_ternary/test_grid_both[pdf]-expected.pdf differ
diff --git a/result_images/test_ternary/test_grid_both[pdf]-expected_pdf.png b/result_images/test_ternary/test_grid_both[pdf]-expected_pdf.png
new file mode 100644
index 000000000..af3f93d67
Binary files /dev/null and b/result_images/test_ternary/test_grid_both[pdf]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_grid_both[pdf].pdf b/result_images/test_ternary/test_grid_both[pdf].pdf
new file mode 100644
index 000000000..3356c4121
Binary files /dev/null and b/result_images/test_ternary/test_grid_both[pdf].pdf differ
diff --git a/result_images/test_ternary/test_grid_both[pdf]_pdf.png b/result_images/test_ternary/test_grid_both[pdf]_pdf.png
new file mode 100644
index 000000000..af3f93d67
Binary files /dev/null and b/result_images/test_ternary/test_grid_both[pdf]_pdf.png differ
diff --git a/result_images/test_ternary/test_min_vs_max[pdf]-expected.pdf b/result_images/test_ternary/test_min_vs_max[pdf]-expected.pdf
new file mode 100644
index 000000000..9e42fb236
Binary files /dev/null and b/result_images/test_ternary/test_min_vs_max[pdf]-expected.pdf differ
diff --git a/result_images/test_ternary/test_min_vs_max[pdf]-expected_pdf.png b/result_images/test_ternary/test_min_vs_max[pdf]-expected_pdf.png
new file mode 100644
index 000000000..27165cb91
Binary files /dev/null and b/result_images/test_ternary/test_min_vs_max[pdf]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_min_vs_max[pdf].pdf b/result_images/test_ternary/test_min_vs_max[pdf].pdf
new file mode 100644
index 000000000..9e42fb236
Binary files /dev/null and b/result_images/test_ternary/test_min_vs_max[pdf].pdf differ
diff --git a/result_images/test_ternary/test_min_vs_max[pdf]_pdf.png b/result_images/test_ternary/test_min_vs_max[pdf]_pdf.png
new file mode 100644
index 000000000..27165cb91
Binary files /dev/null and b/result_images/test_ternary/test_min_vs_max[pdf]_pdf.png differ
diff --git a/result_images/test_ternary/test_number_of_ticks[pdf]-expected.pdf b/result_images/test_ternary/test_number_of_ticks[pdf]-expected.pdf
new file mode 100644
index 000000000..b485ed336
Binary files /dev/null and b/result_images/test_ternary/test_number_of_ticks[pdf]-expected.pdf differ
diff --git a/result_images/test_ternary/test_number_of_ticks[pdf]-expected_pdf.png b/result_images/test_ternary/test_number_of_ticks[pdf]-expected_pdf.png
new file mode 100644
index 000000000..41dbda5ce
Binary files /dev/null and b/result_images/test_ternary/test_number_of_ticks[pdf]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_number_of_ticks[pdf].pdf b/result_images/test_ternary/test_number_of_ticks[pdf].pdf
new file mode 100644
index 000000000..2b20fbb13
Binary files /dev/null and b/result_images/test_ternary/test_number_of_ticks[pdf].pdf differ
diff --git a/result_images/test_ternary/test_number_of_ticks[pdf]_pdf.png b/result_images/test_ternary/test_number_of_ticks[pdf]_pdf.png
new file mode 100644
index 000000000..41dbda5ce
Binary files /dev/null and b/result_images/test_ternary/test_number_of_ticks[pdf]_pdf.png differ
diff --git a/result_images/test_ternary/test_order_axes[pdf]-expected.pdf b/result_images/test_ternary/test_order_axes[pdf]-expected.pdf
new file mode 100644
index 000000000..c2a45de65
Binary files /dev/null and b/result_images/test_ternary/test_order_axes[pdf]-expected.pdf differ
diff --git a/result_images/test_ternary/test_order_axes[pdf]-expected_pdf.png b/result_images/test_ternary/test_order_axes[pdf]-expected_pdf.png
new file mode 100644
index 000000000..14a6eb38d
Binary files /dev/null and b/result_images/test_ternary/test_order_axes[pdf]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_order_axes[pdf].pdf b/result_images/test_ternary/test_order_axes[pdf].pdf
new file mode 100644
index 000000000..c2a45de65
Binary files /dev/null and b/result_images/test_ternary/test_order_axes[pdf].pdf differ
diff --git a/result_images/test_ternary/test_order_axes[pdf]_pdf.png b/result_images/test_ternary/test_order_axes[pdf]_pdf.png
new file mode 100644
index 000000000..14a6eb38d
Binary files /dev/null and b/result_images/test_ternary/test_order_axes[pdf]_pdf.png differ
diff --git a/result_images/test_ternary/test_order_data[pdf]-expected.pdf b/result_images/test_ternary/test_order_data[pdf]-expected.pdf
new file mode 100644
index 000000000..38ae4030c
Binary files /dev/null and b/result_images/test_ternary/test_order_data[pdf]-expected.pdf differ
diff --git a/result_images/test_ternary/test_order_data[pdf]-expected_pdf.png b/result_images/test_ternary/test_order_data[pdf]-expected_pdf.png
new file mode 100644
index 000000000..b0007b991
Binary files /dev/null and b/result_images/test_ternary/test_order_data[pdf]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_order_data[pdf].pdf b/result_images/test_ternary/test_order_data[pdf].pdf
new file mode 100644
index 000000000..38ae4030c
Binary files /dev/null and b/result_images/test_ternary/test_order_data[pdf].pdf differ
diff --git a/result_images/test_ternary/test_order_data[pdf]_pdf.png b/result_images/test_ternary/test_order_data[pdf]_pdf.png
new file mode 100644
index 000000000..b0007b991
Binary files /dev/null and b/result_images/test_ternary/test_order_data[pdf]_pdf.png differ
diff --git a/result_images/test_ternary/test_order_limits[pdf]-expected.pdf b/result_images/test_ternary/test_order_limits[pdf]-expected.pdf
new file mode 100644
index 000000000..435deed18
Binary files /dev/null and b/result_images/test_ternary/test_order_limits[pdf]-expected.pdf differ
diff --git a/result_images/test_ternary/test_order_limits[pdf]-expected_pdf.png b/result_images/test_ternary/test_order_limits[pdf]-expected_pdf.png
new file mode 100644
index 000000000..c5955720c
Binary files /dev/null and b/result_images/test_ternary/test_order_limits[pdf]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_order_limits[pdf].pdf b/result_images/test_ternary/test_order_limits[pdf].pdf
new file mode 100644
index 000000000..435deed18
Binary files /dev/null and b/result_images/test_ternary/test_order_limits[pdf].pdf differ
diff --git a/result_images/test_ternary/test_order_limits[pdf]_pdf.png b/result_images/test_ternary/test_order_limits[pdf]_pdf.png
new file mode 100644
index 000000000..c5955720c
Binary files /dev/null and b/result_images/test_ternary/test_order_limits[pdf]_pdf.png differ
diff --git a/result_images/test_ternary/test_set_view[pdf--10]-expected.pdf b/result_images/test_ternary/test_set_view[pdf--10]-expected.pdf
new file mode 100644
index 000000000..c35383f75
Binary files /dev/null and b/result_images/test_ternary/test_set_view[pdf--10]-expected.pdf differ
diff --git a/result_images/test_ternary/test_set_view[pdf--10]-expected_pdf.png b/result_images/test_ternary/test_set_view[pdf--10]-expected_pdf.png
new file mode 100644
index 000000000..59457e692
Binary files /dev/null and b/result_images/test_ternary/test_set_view[pdf--10]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_set_view[pdf--10].pdf b/result_images/test_ternary/test_set_view[pdf--10].pdf
new file mode 100644
index 000000000..c35383f75
Binary files /dev/null and b/result_images/test_ternary/test_set_view[pdf--10].pdf differ
diff --git a/result_images/test_ternary/test_set_view[pdf--10]_pdf.png b/result_images/test_ternary/test_set_view[pdf--10]_pdf.png
new file mode 100644
index 000000000..59457e692
Binary files /dev/null and b/result_images/test_ternary/test_set_view[pdf--10]_pdf.png differ
diff --git a/result_images/test_ternary/test_set_view[pdf--20]-expected.pdf b/result_images/test_ternary/test_set_view[pdf--20]-expected.pdf
new file mode 100644
index 000000000..51db2fc4c
Binary files /dev/null and b/result_images/test_ternary/test_set_view[pdf--20]-expected.pdf differ
diff --git a/result_images/test_ternary/test_set_view[pdf--20]-expected_pdf.png b/result_images/test_ternary/test_set_view[pdf--20]-expected_pdf.png
new file mode 100644
index 000000000..1861c3671
Binary files /dev/null and b/result_images/test_ternary/test_set_view[pdf--20]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_set_view[pdf--20].pdf b/result_images/test_ternary/test_set_view[pdf--20].pdf
new file mode 100644
index 000000000..51db2fc4c
Binary files /dev/null and b/result_images/test_ternary/test_set_view[pdf--20].pdf differ
diff --git a/result_images/test_ternary/test_set_view[pdf--20]_pdf.png b/result_images/test_ternary/test_set_view[pdf--20]_pdf.png
new file mode 100644
index 000000000..1861c3671
Binary files /dev/null and b/result_images/test_ternary/test_set_view[pdf--20]_pdf.png differ
diff --git a/result_images/test_ternary/test_set_view[pdf-10]-expected.pdf b/result_images/test_ternary/test_set_view[pdf-10]-expected.pdf
new file mode 100644
index 000000000..6a1e521bb
Binary files /dev/null and b/result_images/test_ternary/test_set_view[pdf-10]-expected.pdf differ
diff --git a/result_images/test_ternary/test_set_view[pdf-10]-expected_pdf.png b/result_images/test_ternary/test_set_view[pdf-10]-expected_pdf.png
new file mode 100644
index 000000000..4701c4914
Binary files /dev/null and b/result_images/test_ternary/test_set_view[pdf-10]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_set_view[pdf-10].pdf b/result_images/test_ternary/test_set_view[pdf-10].pdf
new file mode 100644
index 000000000..6a1e521bb
Binary files /dev/null and b/result_images/test_ternary/test_set_view[pdf-10].pdf differ
diff --git a/result_images/test_ternary/test_set_view[pdf-10]_pdf.png b/result_images/test_ternary/test_set_view[pdf-10]_pdf.png
new file mode 100644
index 000000000..4701c4914
Binary files /dev/null and b/result_images/test_ternary/test_set_view[pdf-10]_pdf.png differ
diff --git a/result_images/test_ternary/test_set_view[pdf-20]-expected.pdf b/result_images/test_ternary/test_set_view[pdf-20]-expected.pdf
new file mode 100644
index 000000000..342f92049
Binary files /dev/null and b/result_images/test_ternary/test_set_view[pdf-20]-expected.pdf differ
diff --git a/result_images/test_ternary/test_set_view[pdf-20]-expected_pdf.png b/result_images/test_ternary/test_set_view[pdf-20]-expected_pdf.png
new file mode 100644
index 000000000..1bc724ac1
Binary files /dev/null and b/result_images/test_ternary/test_set_view[pdf-20]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_set_view[pdf-20].pdf b/result_images/test_ternary/test_set_view[pdf-20].pdf
new file mode 100644
index 000000000..342f92049
Binary files /dev/null and b/result_images/test_ternary/test_set_view[pdf-20].pdf differ
diff --git a/result_images/test_ternary/test_set_view[pdf-20]_pdf.png b/result_images/test_ternary/test_set_view[pdf-20]_pdf.png
new file mode 100644
index 000000000..1bc724ac1
Binary files /dev/null and b/result_images/test_ternary/test_set_view[pdf-20]_pdf.png differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-none]-expected.pdf b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-none]-expected.pdf
new file mode 100644
index 000000000..80d67fda1
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-none]-expected.pdf differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-none]-expected_pdf.png b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-none]-expected_pdf.png
new file mode 100644
index 000000000..89d45025f
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-none]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-none].pdf b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-none].pdf
new file mode 100644
index 000000000..80d67fda1
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-none].pdf differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-none]_pdf.png b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-none]_pdf.png
new file mode 100644
index 000000000..89d45025f
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-none]_pdf.png differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-rectangle]-expected.pdf b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-rectangle]-expected.pdf
new file mode 100644
index 000000000..e6a877649
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-rectangle]-expected.pdf differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-rectangle]-expected_pdf.png b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-rectangle]-expected_pdf.png
new file mode 100644
index 000000000..27165cb91
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-rectangle]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-rectangle].pdf b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-rectangle].pdf
new file mode 100644
index 000000000..df6b75715
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-rectangle].pdf differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-rectangle]_pdf.png b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-rectangle]_pdf.png
new file mode 100644
index 000000000..27165cb91
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-rectangle]_pdf.png differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-triangle]-expected.pdf b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-triangle]-expected.pdf
new file mode 100644
index 000000000..e6a877649
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-triangle]-expected.pdf differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-triangle]-expected_pdf.png b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-triangle]-expected_pdf.png
new file mode 100644
index 000000000..27165cb91
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-triangle]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-triangle].pdf b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-triangle].pdf
new file mode 100644
index 000000000..e6a877649
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-triangle].pdf differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-triangle]_pdf.png b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-triangle]_pdf.png
new file mode 100644
index 000000000..27165cb91
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_0[pdf-triangle]_pdf.png differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-none]-expected.pdf b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-none]-expected.pdf
new file mode 100644
index 000000000..9e8d1a4e3
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-none]-expected.pdf differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-none]-expected_pdf.png b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-none]-expected_pdf.png
new file mode 100644
index 000000000..9caa35f00
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-none]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-none].pdf b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-none].pdf
new file mode 100644
index 000000000..1cc0c5188
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-none].pdf differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-none]_pdf.png b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-none]_pdf.png
new file mode 100644
index 000000000..9caa35f00
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-none]_pdf.png differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-rectangle]-expected.pdf b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-rectangle]-expected.pdf
new file mode 100644
index 000000000..85c205a88
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-rectangle]-expected.pdf differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-rectangle]-expected_pdf.png b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-rectangle]-expected_pdf.png
new file mode 100644
index 000000000..c5955720c
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-rectangle]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-rectangle].pdf b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-rectangle].pdf
new file mode 100644
index 000000000..85c205a88
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-rectangle].pdf differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-rectangle]_pdf.png b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-rectangle]_pdf.png
new file mode 100644
index 000000000..c5955720c
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-rectangle]_pdf.png differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-triangle]-expected.pdf b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-triangle]-expected.pdf
new file mode 100644
index 000000000..3e018f236
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-triangle]-expected.pdf differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-triangle]-expected_pdf.png b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-triangle]-expected_pdf.png
new file mode 100644
index 000000000..481e7dc1a
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-triangle]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-triangle].pdf b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-triangle].pdf
new file mode 100644
index 000000000..3e018f236
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-triangle].pdf differ
diff --git a/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-triangle]_pdf.png b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-triangle]_pdf.png
new file mode 100644
index 000000000..481e7dc1a
Binary files /dev/null and b/result_images/test_ternary/test_ternary_lim_vs_tlrlims_1[pdf-triangle]_pdf.png differ
diff --git a/result_images/test_ternary/test_ternary_normalization[pdf]-expected.pdf b/result_images/test_ternary/test_ternary_normalization[pdf]-expected.pdf
new file mode 100644
index 000000000..c20a13fee
Binary files /dev/null and b/result_images/test_ternary/test_ternary_normalization[pdf]-expected.pdf differ
diff --git a/result_images/test_ternary/test_ternary_normalization[pdf]-expected_pdf.png b/result_images/test_ternary/test_ternary_normalization[pdf]-expected_pdf.png
new file mode 100644
index 000000000..c4e69ba61
Binary files /dev/null and b/result_images/test_ternary/test_ternary_normalization[pdf]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_ternary_normalization[pdf].pdf b/result_images/test_ternary/test_ternary_normalization[pdf].pdf
new file mode 100644
index 000000000..c20a13fee
Binary files /dev/null and b/result_images/test_ternary/test_ternary_normalization[pdf].pdf differ
diff --git a/result_images/test_ternary/test_ternary_normalization[pdf]_pdf.png b/result_images/test_ternary/test_ternary_normalization[pdf]_pdf.png
new file mode 100644
index 000000000..c4e69ba61
Binary files /dev/null and b/result_images/test_ternary/test_ternary_normalization[pdf]_pdf.png differ
diff --git a/result_images/test_ternary/test_ternary_sum[pdf]-expected.pdf b/result_images/test_ternary/test_ternary_sum[pdf]-expected.pdf
new file mode 100644
index 000000000..53a62536a
Binary files /dev/null and b/result_images/test_ternary/test_ternary_sum[pdf]-expected.pdf differ
diff --git a/result_images/test_ternary/test_ternary_sum[pdf]-expected_pdf.png b/result_images/test_ternary/test_ternary_sum[pdf]-expected_pdf.png
new file mode 100644
index 000000000..6c55eaf8e
Binary files /dev/null and b/result_images/test_ternary/test_ternary_sum[pdf]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_ternary_sum[pdf].pdf b/result_images/test_ternary/test_ternary_sum[pdf].pdf
new file mode 100644
index 000000000..65b382278
Binary files /dev/null and b/result_images/test_ternary/test_ternary_sum[pdf].pdf differ
diff --git a/result_images/test_ternary/test_ternary_sum[pdf]_pdf-failed-diff.png b/result_images/test_ternary/test_ternary_sum[pdf]_pdf-failed-diff.png
new file mode 100644
index 000000000..c4226eafe
Binary files /dev/null and b/result_images/test_ternary/test_ternary_sum[pdf]_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/test_ternary_sum[pdf]_pdf.png b/result_images/test_ternary/test_ternary_sum[pdf]_pdf.png
new file mode 100644
index 000000000..4da962236
Binary files /dev/null and b/result_images/test_ternary/test_ternary_sum[pdf]_pdf.png differ
diff --git a/result_images/test_ternary/test_tripcolor[pdf]-expected.pdf b/result_images/test_ternary/test_tripcolor[pdf]-expected.pdf
new file mode 100644
index 000000000..49461842f
Binary files /dev/null and b/result_images/test_ternary/test_tripcolor[pdf]-expected.pdf differ
diff --git a/result_images/test_ternary/test_tripcolor[pdf]-expected_pdf.png b/result_images/test_ternary/test_tripcolor[pdf]-expected_pdf.png
new file mode 100644
index 000000000..e0c726cd3
Binary files /dev/null and b/result_images/test_ternary/test_tripcolor[pdf]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_tripcolor[pdf].pdf b/result_images/test_ternary/test_tripcolor[pdf].pdf
new file mode 100644
index 000000000..7896a6b06
Binary files /dev/null and b/result_images/test_ternary/test_tripcolor[pdf].pdf differ
diff --git a/result_images/test_ternary/test_tripcolor[pdf]_pdf.png b/result_images/test_ternary/test_tripcolor[pdf]_pdf.png
new file mode 100644
index 000000000..e0c726cd3
Binary files /dev/null and b/result_images/test_ternary/test_tripcolor[pdf]_pdf.png differ
diff --git a/result_images/test_ternary/test_triplot[pdf]-expected.pdf b/result_images/test_ternary/test_triplot[pdf]-expected.pdf
new file mode 100644
index 000000000..4d97ec5ff
Binary files /dev/null and b/result_images/test_ternary/test_triplot[pdf]-expected.pdf differ
diff --git a/result_images/test_ternary/test_triplot[pdf]-expected_pdf.png b/result_images/test_ternary/test_triplot[pdf]-expected_pdf.png
new file mode 100644
index 000000000..104bcc11a
Binary files /dev/null and b/result_images/test_ternary/test_triplot[pdf]-expected_pdf.png differ
diff --git a/result_images/test_ternary/test_triplot[pdf].pdf b/result_images/test_ternary/test_triplot[pdf].pdf
new file mode 100644
index 000000000..c90344be5
Binary files /dev/null and b/result_images/test_ternary/test_triplot[pdf].pdf differ
diff --git a/result_images/test_ternary/test_triplot[pdf]_pdf.png b/result_images/test_ternary/test_triplot[pdf]_pdf.png
new file mode 100644
index 000000000..037e2db74
Binary files /dev/null and b/result_images/test_ternary/test_triplot[pdf]_pdf.png differ
diff --git a/result_images/test_ternary/text-expected.pdf b/result_images/test_ternary/text-expected.pdf
new file mode 120000
index 000000000..dc0ce4018
--- /dev/null
+++ b/result_images/test_ternary/text-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/text.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/text-expected_pdf.png b/result_images/test_ternary/text-expected_pdf.png
new file mode 100644
index 000000000..be3117291
Binary files /dev/null and b/result_images/test_ternary/text-expected_pdf.png differ
diff --git a/result_images/test_ternary/text.pdf b/result_images/test_ternary/text.pdf
new file mode 100644
index 000000000..97d6e8d63
Binary files /dev/null and b/result_images/test_ternary/text.pdf differ
diff --git a/result_images/test_ternary/text_pdf-failed-diff.png b/result_images/test_ternary/text_pdf-failed-diff.png
new file mode 100644
index 000000000..95c21f290
Binary files /dev/null and b/result_images/test_ternary/text_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/text_pdf.png b/result_images/test_ternary/text_pdf.png
new file mode 100644
index 000000000..30bd13f8f
Binary files /dev/null and b/result_images/test_ternary/text_pdf.png differ
diff --git a/result_images/test_ternary/tick_direction_in-expected.pdf b/result_images/test_ternary/tick_direction_in-expected.pdf
new file mode 120000
index 000000000..a927c0aeb
--- /dev/null
+++ b/result_images/test_ternary/tick_direction_in-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/tick_direction_in.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/tick_direction_in-expected_pdf.png b/result_images/test_ternary/tick_direction_in-expected_pdf.png
new file mode 100644
index 000000000..55363c43b
Binary files /dev/null and b/result_images/test_ternary/tick_direction_in-expected_pdf.png differ
diff --git a/result_images/test_ternary/tick_direction_in.pdf b/result_images/test_ternary/tick_direction_in.pdf
new file mode 100644
index 000000000..d0228e45e
Binary files /dev/null and b/result_images/test_ternary/tick_direction_in.pdf differ
diff --git a/result_images/test_ternary/tick_direction_in_pdf-failed-diff.png b/result_images/test_ternary/tick_direction_in_pdf-failed-diff.png
new file mode 100644
index 000000000..b639796f0
Binary files /dev/null and b/result_images/test_ternary/tick_direction_in_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/tick_direction_in_pdf.png b/result_images/test_ternary/tick_direction_in_pdf.png
new file mode 100644
index 000000000..1225d3951
Binary files /dev/null and b/result_images/test_ternary/tick_direction_in_pdf.png differ
diff --git a/result_images/test_ternary/tick_direction_inout-expected.pdf b/result_images/test_ternary/tick_direction_inout-expected.pdf
new file mode 120000
index 000000000..9c3524ee7
--- /dev/null
+++ b/result_images/test_ternary/tick_direction_inout-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/tick_direction_inout.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/tick_direction_inout-expected_pdf.png b/result_images/test_ternary/tick_direction_inout-expected_pdf.png
new file mode 100644
index 000000000..6bf631b91
Binary files /dev/null and b/result_images/test_ternary/tick_direction_inout-expected_pdf.png differ
diff --git a/result_images/test_ternary/tick_direction_inout.pdf b/result_images/test_ternary/tick_direction_inout.pdf
new file mode 100644
index 000000000..5fca87a62
Binary files /dev/null and b/result_images/test_ternary/tick_direction_inout.pdf differ
diff --git a/result_images/test_ternary/tick_direction_inout_pdf-failed-diff.png b/result_images/test_ternary/tick_direction_inout_pdf-failed-diff.png
new file mode 100644
index 000000000..ce5a1a6cb
Binary files /dev/null and b/result_images/test_ternary/tick_direction_inout_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/tick_direction_inout_pdf.png b/result_images/test_ternary/tick_direction_inout_pdf.png
new file mode 100644
index 000000000..88e255203
Binary files /dev/null and b/result_images/test_ternary/tick_direction_inout_pdf.png differ
diff --git a/result_images/test_ternary/tick_direction_out-expected.pdf b/result_images/test_ternary/tick_direction_out-expected.pdf
new file mode 120000
index 000000000..b77809851
--- /dev/null
+++ b/result_images/test_ternary/tick_direction_out-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/tick_direction_out.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/tick_direction_out-expected_pdf.png b/result_images/test_ternary/tick_direction_out-expected_pdf.png
new file mode 100644
index 000000000..23ab063d2
Binary files /dev/null and b/result_images/test_ternary/tick_direction_out-expected_pdf.png differ
diff --git a/result_images/test_ternary/tick_direction_out.pdf b/result_images/test_ternary/tick_direction_out.pdf
new file mode 100644
index 000000000..8b18b2e93
Binary files /dev/null and b/result_images/test_ternary/tick_direction_out.pdf differ
diff --git a/result_images/test_ternary/tick_direction_out_pdf-failed-diff.png b/result_images/test_ternary/tick_direction_out_pdf-failed-diff.png
new file mode 100644
index 000000000..95c21f290
Binary files /dev/null and b/result_images/test_ternary/tick_direction_out_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/tick_direction_out_pdf.png b/result_images/test_ternary/tick_direction_out_pdf.png
new file mode 100644
index 000000000..032808e72
Binary files /dev/null and b/result_images/test_ternary/tick_direction_out_pdf.png differ
diff --git a/result_images/test_ternary/tick_labels_inside_triangle-expected.pdf b/result_images/test_ternary/tick_labels_inside_triangle-expected.pdf
new file mode 120000
index 000000000..3ddf416a9
--- /dev/null
+++ b/result_images/test_ternary/tick_labels_inside_triangle-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/tick_labels_inside_triangle.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/tick_labels_inside_triangle-expected_pdf.png b/result_images/test_ternary/tick_labels_inside_triangle-expected_pdf.png
new file mode 100644
index 000000000..abb90f099
Binary files /dev/null and b/result_images/test_ternary/tick_labels_inside_triangle-expected_pdf.png differ
diff --git a/result_images/test_ternary/tick_labels_inside_triangle.pdf b/result_images/test_ternary/tick_labels_inside_triangle.pdf
new file mode 100644
index 000000000..5b7b00627
Binary files /dev/null and b/result_images/test_ternary/tick_labels_inside_triangle.pdf differ
diff --git a/result_images/test_ternary/tick_labels_inside_triangle_pdf-failed-diff.png b/result_images/test_ternary/tick_labels_inside_triangle_pdf-failed-diff.png
new file mode 100644
index 000000000..8f64236e9
Binary files /dev/null and b/result_images/test_ternary/tick_labels_inside_triangle_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/tick_labels_inside_triangle_pdf.png b/result_images/test_ternary/tick_labels_inside_triangle_pdf.png
new file mode 100644
index 000000000..79d641da3
Binary files /dev/null and b/result_images/test_ternary/tick_labels_inside_triangle_pdf.png differ
diff --git a/result_images/test_ternary/titie_center-expected.pdf b/result_images/test_ternary/titie_center-expected.pdf
new file mode 120000
index 000000000..4f71aa6e3
--- /dev/null
+++ b/result_images/test_ternary/titie_center-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/titie_center.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/titie_center-expected_pdf.png b/result_images/test_ternary/titie_center-expected_pdf.png
new file mode 100644
index 000000000..ed7fb0b9b
Binary files /dev/null and b/result_images/test_ternary/titie_center-expected_pdf.png differ
diff --git a/result_images/test_ternary/titie_center.pdf b/result_images/test_ternary/titie_center.pdf
new file mode 100644
index 000000000..e75a3f85d
Binary files /dev/null and b/result_images/test_ternary/titie_center.pdf differ
diff --git a/result_images/test_ternary/titie_center_pdf-failed-diff.png b/result_images/test_ternary/titie_center_pdf-failed-diff.png
new file mode 100644
index 000000000..c6efd1b6a
Binary files /dev/null and b/result_images/test_ternary/titie_center_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/titie_center_pdf.png b/result_images/test_ternary/titie_center_pdf.png
new file mode 100644
index 000000000..30d87d1bb
Binary files /dev/null and b/result_images/test_ternary/titie_center_pdf.png differ
diff --git a/result_images/test_ternary/titie_left-expected.pdf b/result_images/test_ternary/titie_left-expected.pdf
new file mode 120000
index 000000000..4a220cf1c
--- /dev/null
+++ b/result_images/test_ternary/titie_left-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/titie_left.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/titie_left-expected_pdf.png b/result_images/test_ternary/titie_left-expected_pdf.png
new file mode 100644
index 000000000..989cae878
Binary files /dev/null and b/result_images/test_ternary/titie_left-expected_pdf.png differ
diff --git a/result_images/test_ternary/titie_left.pdf b/result_images/test_ternary/titie_left.pdf
new file mode 100644
index 000000000..690bfd6e7
Binary files /dev/null and b/result_images/test_ternary/titie_left.pdf differ
diff --git a/result_images/test_ternary/titie_left_pdf-failed-diff.png b/result_images/test_ternary/titie_left_pdf-failed-diff.png
new file mode 100644
index 000000000..fcf6929f6
Binary files /dev/null and b/result_images/test_ternary/titie_left_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/titie_left_pdf.png b/result_images/test_ternary/titie_left_pdf.png
new file mode 100644
index 000000000..d68df6c30
Binary files /dev/null and b/result_images/test_ternary/titie_left_pdf.png differ
diff --git a/result_images/test_ternary/titie_right-expected.pdf b/result_images/test_ternary/titie_right-expected.pdf
new file mode 120000
index 000000000..c15fa6b9e
--- /dev/null
+++ b/result_images/test_ternary/titie_right-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/titie_right.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/titie_right-expected_pdf.png b/result_images/test_ternary/titie_right-expected_pdf.png
new file mode 100644
index 000000000..6e08d21cb
Binary files /dev/null and b/result_images/test_ternary/titie_right-expected_pdf.png differ
diff --git a/result_images/test_ternary/titie_right.pdf b/result_images/test_ternary/titie_right.pdf
new file mode 100644
index 000000000..a99e68c16
Binary files /dev/null and b/result_images/test_ternary/titie_right.pdf differ
diff --git a/result_images/test_ternary/titie_right_pdf-failed-diff.png b/result_images/test_ternary/titie_right_pdf-failed-diff.png
new file mode 100644
index 000000000..e982c578a
Binary files /dev/null and b/result_images/test_ternary/titie_right_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/titie_right_pdf.png b/result_images/test_ternary/titie_right_pdf.png
new file mode 100644
index 000000000..b91c6178e
Binary files /dev/null and b/result_images/test_ternary/titie_right_pdf.png differ
diff --git a/result_images/test_ternary/transAxes-expected.pdf b/result_images/test_ternary/transAxes-expected.pdf
new file mode 120000
index 000000000..2a6ab1314
--- /dev/null
+++ b/result_images/test_ternary/transAxes-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_ternary/transAxes.pdf
\ No newline at end of file
diff --git a/result_images/test_ternary/transAxes-expected_pdf.png b/result_images/test_ternary/transAxes-expected_pdf.png
new file mode 100644
index 000000000..9d698f2d9
Binary files /dev/null and b/result_images/test_ternary/transAxes-expected_pdf.png differ
diff --git a/result_images/test_ternary/transAxes.pdf b/result_images/test_ternary/transAxes.pdf
new file mode 100644
index 000000000..64edfd3f7
Binary files /dev/null and b/result_images/test_ternary/transAxes.pdf differ
diff --git a/result_images/test_ternary/transAxes_pdf-failed-diff.png b/result_images/test_ternary/transAxes_pdf-failed-diff.png
new file mode 100644
index 000000000..95c21f290
Binary files /dev/null and b/result_images/test_ternary/transAxes_pdf-failed-diff.png differ
diff --git a/result_images/test_ternary/transAxes_pdf.png b/result_images/test_ternary/transAxes_pdf.png
new file mode 100644
index 000000000..075eee1cc
Binary files /dev/null and b/result_images/test_ternary/transAxes_pdf.png differ
diff --git a/result_images/test_tightlayout/tight_layout1-expected.pdf b/result_images/test_tightlayout/tight_layout1-expected.pdf
new file mode 120000
index 000000000..106c08f86
--- /dev/null
+++ b/result_images/test_tightlayout/tight_layout1-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_tightlayout/tight_layout1.pdf
\ No newline at end of file
diff --git a/result_images/test_tightlayout/tight_layout1-expected_pdf.png b/result_images/test_tightlayout/tight_layout1-expected_pdf.png
new file mode 100644
index 000000000..dc5ea0852
Binary files /dev/null and b/result_images/test_tightlayout/tight_layout1-expected_pdf.png differ
diff --git a/result_images/test_tightlayout/tight_layout1.pdf b/result_images/test_tightlayout/tight_layout1.pdf
new file mode 100644
index 000000000..6a7578bf3
Binary files /dev/null and b/result_images/test_tightlayout/tight_layout1.pdf differ
diff --git a/result_images/test_tightlayout/tight_layout1_pdf-failed-diff.png b/result_images/test_tightlayout/tight_layout1_pdf-failed-diff.png
new file mode 100644
index 000000000..d9e48de27
Binary files /dev/null and b/result_images/test_tightlayout/tight_layout1_pdf-failed-diff.png differ
diff --git a/result_images/test_tightlayout/tight_layout1_pdf.png b/result_images/test_tightlayout/tight_layout1_pdf.png
new file mode 100644
index 000000000..3dbdf214a
Binary files /dev/null and b/result_images/test_tightlayout/tight_layout1_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_0-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_0-expected.pdf
new file mode 120000
index 000000000..07591c77b
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_0-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_0.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_0-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_0-expected_pdf.png
new file mode 100644
index 000000000..ef5811ded
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_0-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_0.pdf b/result_images/test_triangle_rotation_axis/CCW_False_0.pdf
new file mode 100644
index 000000000..bae5ea746
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_0.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_0_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_0_pdf-failed-diff.png
new file mode 100644
index 000000000..42f2263e4
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_0_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_0_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_0_pdf.png
new file mode 100644
index 000000000..0c1ffc19a
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_0_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_105-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_105-expected.pdf
new file mode 120000
index 000000000..7ee7ff671
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_105-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_105.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_105-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_105-expected_pdf.png
new file mode 100644
index 000000000..6eb815ce0
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_105-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_105.pdf b/result_images/test_triangle_rotation_axis/CCW_False_105.pdf
new file mode 100644
index 000000000..cae069163
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_105.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_105_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_105_pdf-failed-diff.png
new file mode 100644
index 000000000..636d3fc07
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_105_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_105_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_105_pdf.png
new file mode 100644
index 000000000..00bec751f
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_105_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_120-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_120-expected.pdf
new file mode 120000
index 000000000..8fcb89be7
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_120-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_120.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_120-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_120-expected_pdf.png
new file mode 100644
index 000000000..0265620b2
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_120-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_120.pdf b/result_images/test_triangle_rotation_axis/CCW_False_120.pdf
new file mode 100644
index 000000000..f74b22fce
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_120.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_120_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_120_pdf-failed-diff.png
new file mode 100644
index 000000000..48fc290fb
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_120_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_120_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_120_pdf.png
new file mode 100644
index 000000000..2a86b5b42
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_120_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_135-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_135-expected.pdf
new file mode 120000
index 000000000..a2fe27930
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_135-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_135.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_135-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_135-expected_pdf.png
new file mode 100644
index 000000000..8060c2427
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_135-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_135.pdf b/result_images/test_triangle_rotation_axis/CCW_False_135.pdf
new file mode 100644
index 000000000..c645a6034
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_135.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_135_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_135_pdf-failed-diff.png
new file mode 100644
index 000000000..d423cf145
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_135_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_135_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_135_pdf.png
new file mode 100644
index 000000000..1f2255fae
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_135_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_15-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_15-expected.pdf
new file mode 120000
index 000000000..d49451f4c
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_15-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_15.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_15-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_15-expected_pdf.png
new file mode 100644
index 000000000..49e937bd6
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_15-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_15.pdf b/result_images/test_triangle_rotation_axis/CCW_False_15.pdf
new file mode 100644
index 000000000..1ee2f2f83
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_15.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_150-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_150-expected.pdf
new file mode 120000
index 000000000..f9a0229ea
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_150-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_150.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_150-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_150-expected_pdf.png
new file mode 100644
index 000000000..fe24d284b
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_150-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_150.pdf b/result_images/test_triangle_rotation_axis/CCW_False_150.pdf
new file mode 100644
index 000000000..cf4a95a1f
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_150.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_150_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_150_pdf-failed-diff.png
new file mode 100644
index 000000000..95ca2c616
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_150_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_150_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_150_pdf.png
new file mode 100644
index 000000000..94aeee3b8
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_150_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_15_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_15_pdf-failed-diff.png
new file mode 100644
index 000000000..65414390d
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_15_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_15_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_15_pdf.png
new file mode 100644
index 000000000..3e4c9cfe5
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_15_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_165-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_165-expected.pdf
new file mode 120000
index 000000000..902bba417
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_165-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_165.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_165-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_165-expected_pdf.png
new file mode 100644
index 000000000..8472e5827
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_165-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_165.pdf b/result_images/test_triangle_rotation_axis/CCW_False_165.pdf
new file mode 100644
index 000000000..6b13b2ebb
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_165.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_165_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_165_pdf-failed-diff.png
new file mode 100644
index 000000000..d41714791
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_165_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_165_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_165_pdf.png
new file mode 100644
index 000000000..b89149b92
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_165_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_180-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_180-expected.pdf
new file mode 120000
index 000000000..5bac29363
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_180-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_180.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_180-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_180-expected_pdf.png
new file mode 100644
index 000000000..d2e527ca8
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_180-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_180.pdf b/result_images/test_triangle_rotation_axis/CCW_False_180.pdf
new file mode 100644
index 000000000..c78ce9b1c
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_180.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_180_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_180_pdf-failed-diff.png
new file mode 100644
index 000000000..639702b6a
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_180_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_180_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_180_pdf.png
new file mode 100644
index 000000000..44684a7e5
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_180_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_195-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_195-expected.pdf
new file mode 120000
index 000000000..b69343274
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_195-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_195.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_195-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_195-expected_pdf.png
new file mode 100644
index 000000000..75d3cfc81
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_195-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_195.pdf b/result_images/test_triangle_rotation_axis/CCW_False_195.pdf
new file mode 100644
index 000000000..66c6b4d1e
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_195.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_195_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_195_pdf-failed-diff.png
new file mode 100644
index 000000000..b7605db22
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_195_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_195_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_195_pdf.png
new file mode 100644
index 000000000..1b1b7e217
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_195_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_210-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_210-expected.pdf
new file mode 120000
index 000000000..10325e57f
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_210-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_210.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_210-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_210-expected_pdf.png
new file mode 100644
index 000000000..7a1dac93d
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_210-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_210.pdf b/result_images/test_triangle_rotation_axis/CCW_False_210.pdf
new file mode 100644
index 000000000..f3c5eb40b
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_210.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_210_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_210_pdf-failed-diff.png
new file mode 100644
index 000000000..00389b1ac
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_210_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_210_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_210_pdf.png
new file mode 100644
index 000000000..65d6c1444
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_210_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_225-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_225-expected.pdf
new file mode 120000
index 000000000..c2f28c789
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_225-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_225.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_225-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_225-expected_pdf.png
new file mode 100644
index 000000000..eb17057b3
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_225-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_225.pdf b/result_images/test_triangle_rotation_axis/CCW_False_225.pdf
new file mode 100644
index 000000000..df7ffc439
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_225.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_225_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_225_pdf-failed-diff.png
new file mode 100644
index 000000000..bd0280512
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_225_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_225_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_225_pdf.png
new file mode 100644
index 000000000..3ab1dc029
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_225_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_240-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_240-expected.pdf
new file mode 120000
index 000000000..f0044a4cd
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_240-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_240.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_240-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_240-expected_pdf.png
new file mode 100644
index 000000000..f79b11d21
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_240-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_240.pdf b/result_images/test_triangle_rotation_axis/CCW_False_240.pdf
new file mode 100644
index 000000000..838e467b8
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_240.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_240_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_240_pdf-failed-diff.png
new file mode 100644
index 000000000..96ef9e53c
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_240_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_240_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_240_pdf.png
new file mode 100644
index 000000000..4fbb6122b
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_240_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_255-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_255-expected.pdf
new file mode 120000
index 000000000..fa4703290
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_255-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_255.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_255-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_255-expected_pdf.png
new file mode 100644
index 000000000..c9123af83
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_255-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_255.pdf b/result_images/test_triangle_rotation_axis/CCW_False_255.pdf
new file mode 100644
index 000000000..29ff75e2c
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_255.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_255_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_255_pdf-failed-diff.png
new file mode 100644
index 000000000..483486898
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_255_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_255_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_255_pdf.png
new file mode 100644
index 000000000..0a6d05839
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_255_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_270-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_270-expected.pdf
new file mode 120000
index 000000000..2f48152c2
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_270-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_270.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_270-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_270-expected_pdf.png
new file mode 100644
index 000000000..38809a736
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_270-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_270.pdf b/result_images/test_triangle_rotation_axis/CCW_False_270.pdf
new file mode 100644
index 000000000..fc8c776f4
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_270.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_270_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_270_pdf-failed-diff.png
new file mode 100644
index 000000000..24bc9931c
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_270_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_270_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_270_pdf.png
new file mode 100644
index 000000000..641f7b7b0
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_270_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_285-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_285-expected.pdf
new file mode 120000
index 000000000..8f009ed0d
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_285-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_285.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_285-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_285-expected_pdf.png
new file mode 100644
index 000000000..8d09ee4ef
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_285-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_285.pdf b/result_images/test_triangle_rotation_axis/CCW_False_285.pdf
new file mode 100644
index 000000000..c4b2754b7
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_285.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_285_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_285_pdf-failed-diff.png
new file mode 100644
index 000000000..c0a8de1c2
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_285_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_285_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_285_pdf.png
new file mode 100644
index 000000000..ecfa68116
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_285_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_30-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_30-expected.pdf
new file mode 120000
index 000000000..3f508654a
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_30-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_30.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_30-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_30-expected_pdf.png
new file mode 100644
index 000000000..e48ac9093
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_30-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_30.pdf b/result_images/test_triangle_rotation_axis/CCW_False_30.pdf
new file mode 100644
index 000000000..c6807bce5
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_30.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_300-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_300-expected.pdf
new file mode 120000
index 000000000..2a780d27c
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_300-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_300.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_300-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_300-expected_pdf.png
new file mode 100644
index 000000000..ba09869b5
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_300-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_300.pdf b/result_images/test_triangle_rotation_axis/CCW_False_300.pdf
new file mode 100644
index 000000000..51ba7f018
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_300.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_300_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_300_pdf-failed-diff.png
new file mode 100644
index 000000000..13c0df8c8
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_300_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_300_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_300_pdf.png
new file mode 100644
index 000000000..de11964cc
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_300_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_30_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_30_pdf-failed-diff.png
new file mode 100644
index 000000000..c8ca1637d
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_30_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_30_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_30_pdf.png
new file mode 100644
index 000000000..2220c251d
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_30_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_315-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_315-expected.pdf
new file mode 120000
index 000000000..38cda4e3b
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_315-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_315.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_315-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_315-expected_pdf.png
new file mode 100644
index 000000000..9f9a548cc
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_315-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_315.pdf b/result_images/test_triangle_rotation_axis/CCW_False_315.pdf
new file mode 100644
index 000000000..3b1b15c32
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_315.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_315_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_315_pdf-failed-diff.png
new file mode 100644
index 000000000..5b1210e7c
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_315_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_315_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_315_pdf.png
new file mode 100644
index 000000000..1312aae7f
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_315_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_330-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_330-expected.pdf
new file mode 120000
index 000000000..6228a37f0
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_330-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_330.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_330-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_330-expected_pdf.png
new file mode 100644
index 000000000..3480bea70
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_330-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_330.pdf b/result_images/test_triangle_rotation_axis/CCW_False_330.pdf
new file mode 100644
index 000000000..758c232e6
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_330.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_330_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_330_pdf-failed-diff.png
new file mode 100644
index 000000000..85e9e4e50
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_330_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_330_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_330_pdf.png
new file mode 100644
index 000000000..8c555e9ba
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_330_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_345-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_345-expected.pdf
new file mode 120000
index 000000000..c06cb96a9
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_345-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_345.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_345-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_345-expected_pdf.png
new file mode 100644
index 000000000..f7981f033
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_345-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_345.pdf b/result_images/test_triangle_rotation_axis/CCW_False_345.pdf
new file mode 100644
index 000000000..d46e31eaa
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_345.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_345_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_345_pdf-failed-diff.png
new file mode 100644
index 000000000..4c26ed432
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_345_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_345_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_345_pdf.png
new file mode 100644
index 000000000..429e9dd90
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_345_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_360-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_360-expected.pdf
new file mode 120000
index 000000000..92570b9d5
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_360-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_360.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_360-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_360-expected_pdf.png
new file mode 100644
index 000000000..ef5811ded
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_360-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_360.pdf b/result_images/test_triangle_rotation_axis/CCW_False_360.pdf
new file mode 100644
index 000000000..df22207b9
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_360.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_360_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_360_pdf-failed-diff.png
new file mode 100644
index 000000000..42f2263e4
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_360_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_360_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_360_pdf.png
new file mode 100644
index 000000000..0c1ffc19a
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_360_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_45-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_45-expected.pdf
new file mode 120000
index 000000000..8e997ceba
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_45-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_45.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_45-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_45-expected_pdf.png
new file mode 100644
index 000000000..730464dde
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_45-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_45.pdf b/result_images/test_triangle_rotation_axis/CCW_False_45.pdf
new file mode 100644
index 000000000..1d497d890
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_45.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_45_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_45_pdf-failed-diff.png
new file mode 100644
index 000000000..51e4b4324
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_45_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_45_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_45_pdf.png
new file mode 100644
index 000000000..5ddf14eb8
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_45_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_60-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_60-expected.pdf
new file mode 120000
index 000000000..154a9fc4a
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_60-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_60.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_60-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_60-expected_pdf.png
new file mode 100644
index 000000000..97df61037
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_60-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_60.pdf b/result_images/test_triangle_rotation_axis/CCW_False_60.pdf
new file mode 100644
index 000000000..43deb69c6
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_60.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_60_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_60_pdf-failed-diff.png
new file mode 100644
index 000000000..1da693527
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_60_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_60_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_60_pdf.png
new file mode 100644
index 000000000..d1d607be5
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_60_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_75-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_75-expected.pdf
new file mode 120000
index 000000000..8be0c2ed8
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_75-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_75.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_75-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_75-expected_pdf.png
new file mode 100644
index 000000000..291e36096
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_75-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_75.pdf b/result_images/test_triangle_rotation_axis/CCW_False_75.pdf
new file mode 100644
index 000000000..c9d5bb9de
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_75.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_75_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_75_pdf-failed-diff.png
new file mode 100644
index 000000000..e25b382ee
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_75_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_75_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_75_pdf.png
new file mode 100644
index 000000000..b45d6b838
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_75_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_90-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_False_90-expected.pdf
new file mode 120000
index 000000000..1440579e6
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_False_90-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_False_90.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_90-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_90-expected_pdf.png
new file mode 100644
index 000000000..ae41222b2
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_90-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_90.pdf b/result_images/test_triangle_rotation_axis/CCW_False_90.pdf
new file mode 100644
index 000000000..be8123240
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_90.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_90_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_False_90_pdf-failed-diff.png
new file mode 100644
index 000000000..2fad89550
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_90_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_False_90_pdf.png b/result_images/test_triangle_rotation_axis/CCW_False_90_pdf.png
new file mode 100644
index 000000000..47af4a0ad
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_False_90_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_0-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_0-expected.pdf
new file mode 120000
index 000000000..65a04b0e9
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_0-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_0.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_0-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_0-expected_pdf.png
new file mode 100644
index 000000000..1f2a58583
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_0-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_0.pdf b/result_images/test_triangle_rotation_axis/CCW_True_0.pdf
new file mode 100644
index 000000000..ca65e41bf
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_0.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_0_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_0_pdf-failed-diff.png
new file mode 100644
index 000000000..dfd667b6d
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_0_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_0_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_0_pdf.png
new file mode 100644
index 000000000..be6a5fac1
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_0_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_105-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_105-expected.pdf
new file mode 120000
index 000000000..6188b9084
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_105-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_105.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_105-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_105-expected_pdf.png
new file mode 100644
index 000000000..318940f4f
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_105-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_105.pdf b/result_images/test_triangle_rotation_axis/CCW_True_105.pdf
new file mode 100644
index 000000000..10a533eea
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_105.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_105_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_105_pdf-failed-diff.png
new file mode 100644
index 000000000..223493a3d
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_105_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_105_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_105_pdf.png
new file mode 100644
index 000000000..3ed4aa9b0
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_105_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_120-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_120-expected.pdf
new file mode 120000
index 000000000..64a40a541
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_120-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_120.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_120-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_120-expected_pdf.png
new file mode 100644
index 000000000..c8f1f5377
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_120-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_120.pdf b/result_images/test_triangle_rotation_axis/CCW_True_120.pdf
new file mode 100644
index 000000000..5ae25faa4
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_120.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_120_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_120_pdf-failed-diff.png
new file mode 100644
index 000000000..743db38d6
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_120_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_120_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_120_pdf.png
new file mode 100644
index 000000000..203957b94
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_120_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_135-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_135-expected.pdf
new file mode 120000
index 000000000..ed7510e08
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_135-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_135.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_135-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_135-expected_pdf.png
new file mode 100644
index 000000000..181424d06
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_135-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_135.pdf b/result_images/test_triangle_rotation_axis/CCW_True_135.pdf
new file mode 100644
index 000000000..3d3b8f50c
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_135.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_135_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_135_pdf-failed-diff.png
new file mode 100644
index 000000000..3528b35c9
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_135_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_135_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_135_pdf.png
new file mode 100644
index 000000000..daaa124e1
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_135_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_15-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_15-expected.pdf
new file mode 120000
index 000000000..9dbf347d7
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_15-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_15.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_15-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_15-expected_pdf.png
new file mode 100644
index 000000000..25291b22a
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_15-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_15.pdf b/result_images/test_triangle_rotation_axis/CCW_True_15.pdf
new file mode 100644
index 000000000..7c40a4754
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_15.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_150-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_150-expected.pdf
new file mode 120000
index 000000000..099ada384
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_150-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_150.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_150-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_150-expected_pdf.png
new file mode 100644
index 000000000..ac78143eb
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_150-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_150.pdf b/result_images/test_triangle_rotation_axis/CCW_True_150.pdf
new file mode 100644
index 000000000..7aeda3484
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_150.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_150_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_150_pdf-failed-diff.png
new file mode 100644
index 000000000..a2721a9d9
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_150_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_150_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_150_pdf.png
new file mode 100644
index 000000000..10a73f2fb
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_150_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_15_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_15_pdf-failed-diff.png
new file mode 100644
index 000000000..7d378684c
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_15_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_15_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_15_pdf.png
new file mode 100644
index 000000000..cade0aaae
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_15_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_165-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_165-expected.pdf
new file mode 120000
index 000000000..ba599e1f5
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_165-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_165.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_165-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_165-expected_pdf.png
new file mode 100644
index 000000000..d85559b3f
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_165-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_165.pdf b/result_images/test_triangle_rotation_axis/CCW_True_165.pdf
new file mode 100644
index 000000000..cdc9d1f7b
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_165.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_165_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_165_pdf-failed-diff.png
new file mode 100644
index 000000000..5ee78f111
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_165_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_165_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_165_pdf.png
new file mode 100644
index 000000000..07156190a
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_165_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_180-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_180-expected.pdf
new file mode 120000
index 000000000..6f8bc8e69
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_180-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_180.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_180-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_180-expected_pdf.png
new file mode 100644
index 000000000..ed5d9081b
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_180-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_180.pdf b/result_images/test_triangle_rotation_axis/CCW_True_180.pdf
new file mode 100644
index 000000000..ac9c895bf
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_180.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_180_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_180_pdf-failed-diff.png
new file mode 100644
index 000000000..393b8328b
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_180_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_180_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_180_pdf.png
new file mode 100644
index 000000000..163354685
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_180_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_195-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_195-expected.pdf
new file mode 120000
index 000000000..c3ed9e8bb
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_195-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_195.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_195-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_195-expected_pdf.png
new file mode 100644
index 000000000..05111c207
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_195-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_195.pdf b/result_images/test_triangle_rotation_axis/CCW_True_195.pdf
new file mode 100644
index 000000000..48cc39f80
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_195.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_195_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_195_pdf-failed-diff.png
new file mode 100644
index 000000000..3d282e06b
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_195_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_195_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_195_pdf.png
new file mode 100644
index 000000000..27c20aa78
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_195_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_210-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_210-expected.pdf
new file mode 120000
index 000000000..c2a200bea
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_210-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_210.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_210-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_210-expected_pdf.png
new file mode 100644
index 000000000..dbd807987
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_210-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_210.pdf b/result_images/test_triangle_rotation_axis/CCW_True_210.pdf
new file mode 100644
index 000000000..ddc42630e
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_210.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_210_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_210_pdf-failed-diff.png
new file mode 100644
index 000000000..a8fc757d7
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_210_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_210_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_210_pdf.png
new file mode 100644
index 000000000..a55369281
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_210_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_225-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_225-expected.pdf
new file mode 120000
index 000000000..12b47e847
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_225-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_225.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_225-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_225-expected_pdf.png
new file mode 100644
index 000000000..dcde41cc6
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_225-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_225.pdf b/result_images/test_triangle_rotation_axis/CCW_True_225.pdf
new file mode 100644
index 000000000..fd36f87d0
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_225.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_225_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_225_pdf-failed-diff.png
new file mode 100644
index 000000000..905f47756
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_225_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_225_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_225_pdf.png
new file mode 100644
index 000000000..1a610a541
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_225_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_240-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_240-expected.pdf
new file mode 120000
index 000000000..8f7db7497
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_240-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_240.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_240-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_240-expected_pdf.png
new file mode 100644
index 000000000..ed51df4bf
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_240-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_240.pdf b/result_images/test_triangle_rotation_axis/CCW_True_240.pdf
new file mode 100644
index 000000000..8f4c4044c
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_240.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_240_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_240_pdf-failed-diff.png
new file mode 100644
index 000000000..29b0ecda0
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_240_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_240_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_240_pdf.png
new file mode 100644
index 000000000..8a19abc14
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_240_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_255-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_255-expected.pdf
new file mode 120000
index 000000000..881c2b0d5
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_255-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_255.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_255-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_255-expected_pdf.png
new file mode 100644
index 000000000..c2bd6ca08
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_255-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_255.pdf b/result_images/test_triangle_rotation_axis/CCW_True_255.pdf
new file mode 100644
index 000000000..93ec46dd4
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_255.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_255_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_255_pdf-failed-diff.png
new file mode 100644
index 000000000..2b90aa1a6
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_255_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_255_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_255_pdf.png
new file mode 100644
index 000000000..6b96b8b49
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_255_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_270-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_270-expected.pdf
new file mode 120000
index 000000000..0b4d7e63b
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_270-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_270.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_270-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_270-expected_pdf.png
new file mode 100644
index 000000000..95d8c27e9
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_270-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_270.pdf b/result_images/test_triangle_rotation_axis/CCW_True_270.pdf
new file mode 100644
index 000000000..113e1af37
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_270.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_270_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_270_pdf-failed-diff.png
new file mode 100644
index 000000000..941040739
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_270_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_270_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_270_pdf.png
new file mode 100644
index 000000000..3918560b6
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_270_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_285-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_285-expected.pdf
new file mode 120000
index 000000000..21c85bb81
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_285-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_285.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_285-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_285-expected_pdf.png
new file mode 100644
index 000000000..e9d57ab2b
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_285-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_285.pdf b/result_images/test_triangle_rotation_axis/CCW_True_285.pdf
new file mode 100644
index 000000000..f1d880dc6
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_285.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_285_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_285_pdf-failed-diff.png
new file mode 100644
index 000000000..e29c20c5a
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_285_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_285_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_285_pdf.png
new file mode 100644
index 000000000..b6b1b352e
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_285_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_30-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_30-expected.pdf
new file mode 120000
index 000000000..c746519d3
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_30-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_30.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_30-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_30-expected_pdf.png
new file mode 100644
index 000000000..0a7223c41
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_30-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_30.pdf b/result_images/test_triangle_rotation_axis/CCW_True_30.pdf
new file mode 100644
index 000000000..764308986
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_30.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_300-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_300-expected.pdf
new file mode 120000
index 000000000..1ea95196a
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_300-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_300.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_300-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_300-expected_pdf.png
new file mode 100644
index 000000000..8cb369b5f
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_300-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_300.pdf b/result_images/test_triangle_rotation_axis/CCW_True_300.pdf
new file mode 100644
index 000000000..c12209814
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_300.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_300_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_300_pdf-failed-diff.png
new file mode 100644
index 000000000..844f34bde
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_300_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_300_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_300_pdf.png
new file mode 100644
index 000000000..fe86af0f6
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_300_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_30_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_30_pdf-failed-diff.png
new file mode 100644
index 000000000..5c02954b5
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_30_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_30_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_30_pdf.png
new file mode 100644
index 000000000..002d1967a
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_30_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_315-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_315-expected.pdf
new file mode 120000
index 000000000..819911319
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_315-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_315.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_315-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_315-expected_pdf.png
new file mode 100644
index 000000000..5ac28d298
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_315-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_315.pdf b/result_images/test_triangle_rotation_axis/CCW_True_315.pdf
new file mode 100644
index 000000000..cb67dba16
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_315.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_315_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_315_pdf-failed-diff.png
new file mode 100644
index 000000000..a8745bd1c
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_315_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_315_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_315_pdf.png
new file mode 100644
index 000000000..4746d1eeb
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_315_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_330-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_330-expected.pdf
new file mode 120000
index 000000000..70f089774
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_330-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_330.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_330-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_330-expected_pdf.png
new file mode 100644
index 000000000..867f0265c
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_330-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_330.pdf b/result_images/test_triangle_rotation_axis/CCW_True_330.pdf
new file mode 100644
index 000000000..0daaa8253
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_330.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_330_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_330_pdf-failed-diff.png
new file mode 100644
index 000000000..1f1bde01b
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_330_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_330_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_330_pdf.png
new file mode 100644
index 000000000..0e92770f4
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_330_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_345-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_345-expected.pdf
new file mode 120000
index 000000000..bbb86f325
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_345-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_345.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_345-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_345-expected_pdf.png
new file mode 100644
index 000000000..218fbe797
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_345-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_345.pdf b/result_images/test_triangle_rotation_axis/CCW_True_345.pdf
new file mode 100644
index 000000000..09445411a
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_345.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_345_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_345_pdf-failed-diff.png
new file mode 100644
index 000000000..3f09df775
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_345_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_345_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_345_pdf.png
new file mode 100644
index 000000000..f7f7afcdd
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_345_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_360-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_360-expected.pdf
new file mode 120000
index 000000000..cf65cc18b
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_360-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_360.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_360-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_360-expected_pdf.png
new file mode 100644
index 000000000..1f2a58583
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_360-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_360.pdf b/result_images/test_triangle_rotation_axis/CCW_True_360.pdf
new file mode 100644
index 000000000..9c0eab11d
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_360.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_360_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_360_pdf-failed-diff.png
new file mode 100644
index 000000000..dfd667b6d
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_360_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_360_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_360_pdf.png
new file mode 100644
index 000000000..be6a5fac1
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_360_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_45-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_45-expected.pdf
new file mode 120000
index 000000000..07773456b
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_45-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_45.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_45-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_45-expected_pdf.png
new file mode 100644
index 000000000..7de391e7c
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_45-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_45.pdf b/result_images/test_triangle_rotation_axis/CCW_True_45.pdf
new file mode 100644
index 000000000..8c2216c24
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_45.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_45_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_45_pdf-failed-diff.png
new file mode 100644
index 000000000..269f64e19
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_45_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_45_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_45_pdf.png
new file mode 100644
index 000000000..9e93bd496
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_45_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_60-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_60-expected.pdf
new file mode 120000
index 000000000..7bb064bee
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_60-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_60.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_60-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_60-expected_pdf.png
new file mode 100644
index 000000000..54706253f
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_60-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_60.pdf b/result_images/test_triangle_rotation_axis/CCW_True_60.pdf
new file mode 100644
index 000000000..d63f828db
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_60.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_60_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_60_pdf-failed-diff.png
new file mode 100644
index 000000000..178970fb1
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_60_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_60_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_60_pdf.png
new file mode 100644
index 000000000..8d80afb52
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_60_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_75-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_75-expected.pdf
new file mode 120000
index 000000000..eb07bdd9f
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_75-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_75.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_75-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_75-expected_pdf.png
new file mode 100644
index 000000000..519dafe76
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_75-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_75.pdf b/result_images/test_triangle_rotation_axis/CCW_True_75.pdf
new file mode 100644
index 000000000..453c2c069
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_75.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_75_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_75_pdf-failed-diff.png
new file mode 100644
index 000000000..a7d601d21
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_75_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_75_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_75_pdf.png
new file mode 100644
index 000000000..732fa7bc1
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_75_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_90-expected.pdf b/result_images/test_triangle_rotation_axis/CCW_True_90-expected.pdf
new file mode 120000
index 000000000..631b3975a
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CCW_True_90-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CCW_True_90.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_90-expected_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_90-expected_pdf.png
new file mode 100644
index 000000000..c349fad04
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_90-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_90.pdf b/result_images/test_triangle_rotation_axis/CCW_True_90.pdf
new file mode 100644
index 000000000..3176b6bd0
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_90.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_90_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CCW_True_90_pdf-failed-diff.png
new file mode 100644
index 000000000..fc9bc48fc
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_90_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CCW_True_90_pdf.png b/result_images/test_triangle_rotation_axis/CCW_True_90_pdf.png
new file mode 100644
index 000000000..816c2d660
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CCW_True_90_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_0-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_0-expected.pdf
new file mode 120000
index 000000000..c73a41cfc
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_0-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_0.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_0-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_0-expected_pdf.png
new file mode 100644
index 000000000..b57cf9c2c
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_0-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_0.pdf b/result_images/test_triangle_rotation_axis/CW_False_0.pdf
new file mode 100644
index 000000000..2c82ecc2b
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_0.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_0_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_0_pdf-failed-diff.png
new file mode 100644
index 000000000..548789652
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_0_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_0_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_0_pdf.png
new file mode 100644
index 000000000..225a5ad77
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_0_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_105-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_105-expected.pdf
new file mode 120000
index 000000000..daaa11721
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_105-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_105.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_105-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_105-expected_pdf.png
new file mode 100644
index 000000000..67f8189b0
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_105-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_105.pdf b/result_images/test_triangle_rotation_axis/CW_False_105.pdf
new file mode 100644
index 000000000..f18255e41
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_105.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_105_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_105_pdf-failed-diff.png
new file mode 100644
index 000000000..695f4a9c7
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_105_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_105_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_105_pdf.png
new file mode 100644
index 000000000..e2e70537a
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_105_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_120-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_120-expected.pdf
new file mode 120000
index 000000000..7709a8963
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_120-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_120.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_120-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_120-expected_pdf.png
new file mode 100644
index 000000000..f4c93acc7
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_120-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_120.pdf b/result_images/test_triangle_rotation_axis/CW_False_120.pdf
new file mode 100644
index 000000000..12e1cce31
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_120.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_120_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_120_pdf-failed-diff.png
new file mode 100644
index 000000000..ad1b10671
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_120_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_120_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_120_pdf.png
new file mode 100644
index 000000000..a1a804b27
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_120_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_135-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_135-expected.pdf
new file mode 120000
index 000000000..c5a640172
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_135-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_135.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_135-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_135-expected_pdf.png
new file mode 100644
index 000000000..1b3fa81f1
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_135-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_135.pdf b/result_images/test_triangle_rotation_axis/CW_False_135.pdf
new file mode 100644
index 000000000..a12664639
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_135.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_135_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_135_pdf-failed-diff.png
new file mode 100644
index 000000000..3559b1428
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_135_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_135_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_135_pdf.png
new file mode 100644
index 000000000..b409742a3
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_135_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_15-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_15-expected.pdf
new file mode 120000
index 000000000..936a55300
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_15-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_15.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_15-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_15-expected_pdf.png
new file mode 100644
index 000000000..c2dec77aa
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_15-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_15.pdf b/result_images/test_triangle_rotation_axis/CW_False_15.pdf
new file mode 100644
index 000000000..4570a09e8
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_15.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_150-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_150-expected.pdf
new file mode 120000
index 000000000..f520263cf
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_150-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_150.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_150-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_150-expected_pdf.png
new file mode 100644
index 000000000..98b2c5b38
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_150-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_150.pdf b/result_images/test_triangle_rotation_axis/CW_False_150.pdf
new file mode 100644
index 000000000..d0c33bd3f
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_150.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_150_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_150_pdf-failed-diff.png
new file mode 100644
index 000000000..e7df269f8
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_150_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_150_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_150_pdf.png
new file mode 100644
index 000000000..f09501af4
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_150_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_15_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_15_pdf-failed-diff.png
new file mode 100644
index 000000000..b24c0d079
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_15_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_15_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_15_pdf.png
new file mode 100644
index 000000000..369d28c49
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_15_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_165-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_165-expected.pdf
new file mode 120000
index 000000000..9e22b3f64
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_165-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_165.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_165-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_165-expected_pdf.png
new file mode 100644
index 000000000..e31054044
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_165-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_165.pdf b/result_images/test_triangle_rotation_axis/CW_False_165.pdf
new file mode 100644
index 000000000..0fd27562b
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_165.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_165_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_165_pdf-failed-diff.png
new file mode 100644
index 000000000..59f0526c5
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_165_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_165_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_165_pdf.png
new file mode 100644
index 000000000..a9e9088a9
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_165_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_180-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_180-expected.pdf
new file mode 120000
index 000000000..8b5e752c0
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_180-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_180.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_180-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_180-expected_pdf.png
new file mode 100644
index 000000000..15cc2b047
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_180-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_180.pdf b/result_images/test_triangle_rotation_axis/CW_False_180.pdf
new file mode 100644
index 000000000..53325398b
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_180.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_180_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_180_pdf-failed-diff.png
new file mode 100644
index 000000000..e2814b9cd
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_180_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_180_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_180_pdf.png
new file mode 100644
index 000000000..c5174d64b
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_180_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_195-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_195-expected.pdf
new file mode 120000
index 000000000..73be9ce19
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_195-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_195.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_195-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_195-expected_pdf.png
new file mode 100644
index 000000000..7524cf7bd
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_195-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_195.pdf b/result_images/test_triangle_rotation_axis/CW_False_195.pdf
new file mode 100644
index 000000000..d3861d268
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_195.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_195_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_195_pdf-failed-diff.png
new file mode 100644
index 000000000..eb330554a
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_195_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_195_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_195_pdf.png
new file mode 100644
index 000000000..0876cd2da
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_195_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_210-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_210-expected.pdf
new file mode 120000
index 000000000..d5531aa05
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_210-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_210.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_210-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_210-expected_pdf.png
new file mode 100644
index 000000000..a86421158
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_210-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_210.pdf b/result_images/test_triangle_rotation_axis/CW_False_210.pdf
new file mode 100644
index 000000000..4de4a8706
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_210.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_210_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_210_pdf-failed-diff.png
new file mode 100644
index 000000000..f7bee8474
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_210_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_210_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_210_pdf.png
new file mode 100644
index 000000000..3bcd9d431
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_210_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_225-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_225-expected.pdf
new file mode 120000
index 000000000..6b4a374b8
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_225-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_225.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_225-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_225-expected_pdf.png
new file mode 100644
index 000000000..901dc8b08
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_225-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_225.pdf b/result_images/test_triangle_rotation_axis/CW_False_225.pdf
new file mode 100644
index 000000000..76072296f
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_225.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_225_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_225_pdf-failed-diff.png
new file mode 100644
index 000000000..ea70d4c78
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_225_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_225_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_225_pdf.png
new file mode 100644
index 000000000..463a21a6a
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_225_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_240-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_240-expected.pdf
new file mode 120000
index 000000000..1f162bb39
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_240-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_240.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_240-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_240-expected_pdf.png
new file mode 100644
index 000000000..1ac9cf095
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_240-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_240.pdf b/result_images/test_triangle_rotation_axis/CW_False_240.pdf
new file mode 100644
index 000000000..59621c2a0
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_240.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_240_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_240_pdf-failed-diff.png
new file mode 100644
index 000000000..34f2303f3
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_240_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_240_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_240_pdf.png
new file mode 100644
index 000000000..6ca0ac230
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_240_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_255-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_255-expected.pdf
new file mode 120000
index 000000000..2b7e10dc3
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_255-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_255.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_255-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_255-expected_pdf.png
new file mode 100644
index 000000000..c55a8abc0
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_255-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_255.pdf b/result_images/test_triangle_rotation_axis/CW_False_255.pdf
new file mode 100644
index 000000000..6c6c86938
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_255.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_255_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_255_pdf-failed-diff.png
new file mode 100644
index 000000000..677099aa5
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_255_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_255_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_255_pdf.png
new file mode 100644
index 000000000..4f48a29a9
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_255_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_270-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_270-expected.pdf
new file mode 120000
index 000000000..f06113b8a
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_270-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_270.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_270-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_270-expected_pdf.png
new file mode 100644
index 000000000..69f608e8f
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_270-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_270.pdf b/result_images/test_triangle_rotation_axis/CW_False_270.pdf
new file mode 100644
index 000000000..a7a1c7765
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_270.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_270_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_270_pdf-failed-diff.png
new file mode 100644
index 000000000..9f5216575
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_270_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_270_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_270_pdf.png
new file mode 100644
index 000000000..24e4e8b14
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_270_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_285-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_285-expected.pdf
new file mode 120000
index 000000000..d4631d6bb
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_285-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_285.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_285-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_285-expected_pdf.png
new file mode 100644
index 000000000..73a82df66
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_285-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_285.pdf b/result_images/test_triangle_rotation_axis/CW_False_285.pdf
new file mode 100644
index 000000000..454a0aa8b
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_285.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_285_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_285_pdf-failed-diff.png
new file mode 100644
index 000000000..d816f09dc
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_285_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_285_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_285_pdf.png
new file mode 100644
index 000000000..998a4911f
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_285_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_30-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_30-expected.pdf
new file mode 120000
index 000000000..299f33120
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_30-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_30.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_30-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_30-expected_pdf.png
new file mode 100644
index 000000000..6cf2c9760
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_30-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_30.pdf b/result_images/test_triangle_rotation_axis/CW_False_30.pdf
new file mode 100644
index 000000000..ff6c4956a
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_30.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_300-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_300-expected.pdf
new file mode 120000
index 000000000..37898a3f6
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_300-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_300.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_300-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_300-expected_pdf.png
new file mode 100644
index 000000000..c097e1c74
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_300-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_300.pdf b/result_images/test_triangle_rotation_axis/CW_False_300.pdf
new file mode 100644
index 000000000..335f50f0e
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_300.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_300_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_300_pdf-failed-diff.png
new file mode 100644
index 000000000..996179a76
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_300_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_300_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_300_pdf.png
new file mode 100644
index 000000000..47f1818c8
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_300_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_30_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_30_pdf-failed-diff.png
new file mode 100644
index 000000000..8b90f659d
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_30_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_30_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_30_pdf.png
new file mode 100644
index 000000000..f98dea852
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_30_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_315-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_315-expected.pdf
new file mode 120000
index 000000000..74f06f0e9
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_315-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_315.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_315-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_315-expected_pdf.png
new file mode 100644
index 000000000..0b7832931
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_315-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_315.pdf b/result_images/test_triangle_rotation_axis/CW_False_315.pdf
new file mode 100644
index 000000000..b20b8fa19
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_315.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_315_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_315_pdf-failed-diff.png
new file mode 100644
index 000000000..281ecb9f4
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_315_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_315_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_315_pdf.png
new file mode 100644
index 000000000..c84edabf2
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_315_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_330-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_330-expected.pdf
new file mode 120000
index 000000000..2dcf11364
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_330-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_330.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_330-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_330-expected_pdf.png
new file mode 100644
index 000000000..d709abeba
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_330-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_330.pdf b/result_images/test_triangle_rotation_axis/CW_False_330.pdf
new file mode 100644
index 000000000..17c64cc69
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_330.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_330_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_330_pdf-failed-diff.png
new file mode 100644
index 000000000..2249d2306
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_330_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_330_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_330_pdf.png
new file mode 100644
index 000000000..54af4c2de
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_330_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_345-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_345-expected.pdf
new file mode 120000
index 000000000..3ccf72ac9
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_345-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_345.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_345-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_345-expected_pdf.png
new file mode 100644
index 000000000..7e9bb8ff7
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_345-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_345.pdf b/result_images/test_triangle_rotation_axis/CW_False_345.pdf
new file mode 100644
index 000000000..8d20a0b80
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_345.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_345_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_345_pdf-failed-diff.png
new file mode 100644
index 000000000..ee4bc49ab
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_345_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_345_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_345_pdf.png
new file mode 100644
index 000000000..ecd342c59
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_345_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_360-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_360-expected.pdf
new file mode 120000
index 000000000..9f44edf01
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_360-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_360.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_360-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_360-expected_pdf.png
new file mode 100644
index 000000000..b57cf9c2c
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_360-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_360.pdf b/result_images/test_triangle_rotation_axis/CW_False_360.pdf
new file mode 100644
index 000000000..2c82ecc2b
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_360.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_360_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_360_pdf-failed-diff.png
new file mode 100644
index 000000000..548789652
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_360_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_360_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_360_pdf.png
new file mode 100644
index 000000000..225a5ad77
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_360_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_45-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_45-expected.pdf
new file mode 120000
index 000000000..0e5e3b326
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_45-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_45.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_45-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_45-expected_pdf.png
new file mode 100644
index 000000000..bd3864167
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_45-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_45.pdf b/result_images/test_triangle_rotation_axis/CW_False_45.pdf
new file mode 100644
index 000000000..d694139e2
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_45.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_45_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_45_pdf-failed-diff.png
new file mode 100644
index 000000000..f30d19da3
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_45_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_45_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_45_pdf.png
new file mode 100644
index 000000000..0c76d812e
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_45_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_60-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_60-expected.pdf
new file mode 120000
index 000000000..9f86d20d2
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_60-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_60.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_60-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_60-expected_pdf.png
new file mode 100644
index 000000000..4085bd54a
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_60-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_60.pdf b/result_images/test_triangle_rotation_axis/CW_False_60.pdf
new file mode 100644
index 000000000..fe70f6a3a
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_60.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_60_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_60_pdf-failed-diff.png
new file mode 100644
index 000000000..82f0259b3
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_60_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_60_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_60_pdf.png
new file mode 100644
index 000000000..356443ef0
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_60_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_75-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_75-expected.pdf
new file mode 120000
index 000000000..3c8103d76
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_75-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_75.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_75-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_75-expected_pdf.png
new file mode 100644
index 000000000..c068e1093
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_75-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_75.pdf b/result_images/test_triangle_rotation_axis/CW_False_75.pdf
new file mode 100644
index 000000000..f49ded485
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_75.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_75_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_75_pdf-failed-diff.png
new file mode 100644
index 000000000..234f8db51
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_75_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_75_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_75_pdf.png
new file mode 100644
index 000000000..ab50b057a
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_75_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_90-expected.pdf b/result_images/test_triangle_rotation_axis/CW_False_90-expected.pdf
new file mode 120000
index 000000000..1c7d1f006
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_False_90-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_False_90.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_False_90-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_90-expected_pdf.png
new file mode 100644
index 000000000..e0f7007c5
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_90-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_90.pdf b/result_images/test_triangle_rotation_axis/CW_False_90.pdf
new file mode 100644
index 000000000..d4d85e5c8
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_90.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_90_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_False_90_pdf-failed-diff.png
new file mode 100644
index 000000000..251d6a222
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_90_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_False_90_pdf.png b/result_images/test_triangle_rotation_axis/CW_False_90_pdf.png
new file mode 100644
index 000000000..0d557f3fa
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_False_90_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_0-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_0-expected.pdf
new file mode 120000
index 000000000..8846db658
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_0-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_0.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_0-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_0-expected_pdf.png
new file mode 100644
index 000000000..0c62f756e
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_0-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_0.pdf b/result_images/test_triangle_rotation_axis/CW_True_0.pdf
new file mode 100644
index 000000000..9c6256a1c
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_0.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_0_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_0_pdf-failed-diff.png
new file mode 100644
index 000000000..a0ce4606f
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_0_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_0_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_0_pdf.png
new file mode 100644
index 000000000..04411b66c
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_0_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_105-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_105-expected.pdf
new file mode 120000
index 000000000..7e2605f6c
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_105-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_105.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_105-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_105-expected_pdf.png
new file mode 100644
index 000000000..e1097e15d
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_105-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_105.pdf b/result_images/test_triangle_rotation_axis/CW_True_105.pdf
new file mode 100644
index 000000000..0e2193db3
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_105.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_105_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_105_pdf-failed-diff.png
new file mode 100644
index 000000000..e758c3427
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_105_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_105_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_105_pdf.png
new file mode 100644
index 000000000..8aa59ea3a
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_105_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_120-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_120-expected.pdf
new file mode 120000
index 000000000..4f2dd4d39
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_120-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_120.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_120-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_120-expected_pdf.png
new file mode 100644
index 000000000..29df4b5fe
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_120-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_120.pdf b/result_images/test_triangle_rotation_axis/CW_True_120.pdf
new file mode 100644
index 000000000..5bb2b4bee
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_120.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_120_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_120_pdf-failed-diff.png
new file mode 100644
index 000000000..6c670f476
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_120_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_120_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_120_pdf.png
new file mode 100644
index 000000000..b66571df7
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_120_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_135-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_135-expected.pdf
new file mode 120000
index 000000000..2cfe4397d
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_135-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_135.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_135-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_135-expected_pdf.png
new file mode 100644
index 000000000..5a07d69a3
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_135-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_135.pdf b/result_images/test_triangle_rotation_axis/CW_True_135.pdf
new file mode 100644
index 000000000..0c21b9ce7
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_135.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_135_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_135_pdf-failed-diff.png
new file mode 100644
index 000000000..87da614cc
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_135_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_135_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_135_pdf.png
new file mode 100644
index 000000000..c252a4d61
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_135_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_15-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_15-expected.pdf
new file mode 120000
index 000000000..b8bd48ac2
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_15-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_15.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_15-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_15-expected_pdf.png
new file mode 100644
index 000000000..42a41bd8e
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_15-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_15.pdf b/result_images/test_triangle_rotation_axis/CW_True_15.pdf
new file mode 100644
index 000000000..4c321da86
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_15.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_150-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_150-expected.pdf
new file mode 120000
index 000000000..63c213e21
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_150-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_150.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_150-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_150-expected_pdf.png
new file mode 100644
index 000000000..15d6f7fc2
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_150-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_150.pdf b/result_images/test_triangle_rotation_axis/CW_True_150.pdf
new file mode 100644
index 000000000..10d49dbef
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_150.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_150_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_150_pdf-failed-diff.png
new file mode 100644
index 000000000..3af41ddaa
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_150_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_150_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_150_pdf.png
new file mode 100644
index 000000000..9ff03b36e
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_150_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_15_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_15_pdf-failed-diff.png
new file mode 100644
index 000000000..2c4e77bb6
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_15_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_15_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_15_pdf.png
new file mode 100644
index 000000000..6ebc1c38f
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_15_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_165-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_165-expected.pdf
new file mode 120000
index 000000000..75e398722
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_165-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_165.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_165-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_165-expected_pdf.png
new file mode 100644
index 000000000..1fe4f1e44
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_165-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_165.pdf b/result_images/test_triangle_rotation_axis/CW_True_165.pdf
new file mode 100644
index 000000000..862359222
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_165.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_165_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_165_pdf-failed-diff.png
new file mode 100644
index 000000000..e69d93c19
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_165_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_165_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_165_pdf.png
new file mode 100644
index 000000000..1ec09fda9
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_165_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_180-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_180-expected.pdf
new file mode 120000
index 000000000..6391a4dd5
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_180-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_180.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_180-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_180-expected_pdf.png
new file mode 100644
index 000000000..5d28d0fd8
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_180-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_180.pdf b/result_images/test_triangle_rotation_axis/CW_True_180.pdf
new file mode 100644
index 000000000..506ec49bb
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_180.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_180_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_180_pdf-failed-diff.png
new file mode 100644
index 000000000..9e9ec1a60
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_180_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_180_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_180_pdf.png
new file mode 100644
index 000000000..12481afa8
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_180_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_195-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_195-expected.pdf
new file mode 120000
index 000000000..c7983c516
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_195-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_195.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_195-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_195-expected_pdf.png
new file mode 100644
index 000000000..7443bdbb0
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_195-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_195.pdf b/result_images/test_triangle_rotation_axis/CW_True_195.pdf
new file mode 100644
index 000000000..8c5bf47a3
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_195.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_195_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_195_pdf-failed-diff.png
new file mode 100644
index 000000000..81dcaf5f3
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_195_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_195_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_195_pdf.png
new file mode 100644
index 000000000..1ad18d14c
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_195_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_210-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_210-expected.pdf
new file mode 120000
index 000000000..d62a4e86e
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_210-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_210.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_210-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_210-expected_pdf.png
new file mode 100644
index 000000000..3c567f1d1
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_210-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_210.pdf b/result_images/test_triangle_rotation_axis/CW_True_210.pdf
new file mode 100644
index 000000000..fe8b37b80
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_210.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_210_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_210_pdf-failed-diff.png
new file mode 100644
index 000000000..2502977f7
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_210_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_210_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_210_pdf.png
new file mode 100644
index 000000000..04451bc8a
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_210_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_225-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_225-expected.pdf
new file mode 120000
index 000000000..c0cdea2b9
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_225-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_225.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_225-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_225-expected_pdf.png
new file mode 100644
index 000000000..f69173651
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_225-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_225.pdf b/result_images/test_triangle_rotation_axis/CW_True_225.pdf
new file mode 100644
index 000000000..394485561
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_225.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_225_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_225_pdf-failed-diff.png
new file mode 100644
index 000000000..60b6ff920
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_225_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_225_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_225_pdf.png
new file mode 100644
index 000000000..5cba4e24c
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_225_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_240-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_240-expected.pdf
new file mode 120000
index 000000000..964941625
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_240-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_240.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_240-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_240-expected_pdf.png
new file mode 100644
index 000000000..f52ef46b9
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_240-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_240.pdf b/result_images/test_triangle_rotation_axis/CW_True_240.pdf
new file mode 100644
index 000000000..d4c0d6d0e
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_240.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_240_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_240_pdf-failed-diff.png
new file mode 100644
index 000000000..76fb0cfab
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_240_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_240_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_240_pdf.png
new file mode 100644
index 000000000..7b8d7f4a7
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_240_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_255-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_255-expected.pdf
new file mode 120000
index 000000000..2ec0b23e3
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_255-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_255.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_255-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_255-expected_pdf.png
new file mode 100644
index 000000000..4499889ac
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_255-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_255.pdf b/result_images/test_triangle_rotation_axis/CW_True_255.pdf
new file mode 100644
index 000000000..9b61493ee
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_255.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_255_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_255_pdf-failed-diff.png
new file mode 100644
index 000000000..9e63f0e22
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_255_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_255_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_255_pdf.png
new file mode 100644
index 000000000..363149d19
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_255_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_270-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_270-expected.pdf
new file mode 120000
index 000000000..723297af4
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_270-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_270.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_270-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_270-expected_pdf.png
new file mode 100644
index 000000000..5483a2a4e
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_270-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_270.pdf b/result_images/test_triangle_rotation_axis/CW_True_270.pdf
new file mode 100644
index 000000000..ca5660e84
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_270.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_270_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_270_pdf-failed-diff.png
new file mode 100644
index 000000000..b64de72b2
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_270_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_270_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_270_pdf.png
new file mode 100644
index 000000000..f1609fefc
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_270_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_285-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_285-expected.pdf
new file mode 120000
index 000000000..5ea427fee
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_285-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_285.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_285-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_285-expected_pdf.png
new file mode 100644
index 000000000..bf2b32de7
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_285-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_285.pdf b/result_images/test_triangle_rotation_axis/CW_True_285.pdf
new file mode 100644
index 000000000..eafcf6cb8
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_285.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_285_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_285_pdf-failed-diff.png
new file mode 100644
index 000000000..2368fb7df
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_285_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_285_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_285_pdf.png
new file mode 100644
index 000000000..88760cba6
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_285_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_30-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_30-expected.pdf
new file mode 120000
index 000000000..9136f5ee3
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_30-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_30.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_30-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_30-expected_pdf.png
new file mode 100644
index 000000000..107ef5bb6
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_30-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_30.pdf b/result_images/test_triangle_rotation_axis/CW_True_30.pdf
new file mode 100644
index 000000000..6bf15d983
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_30.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_300-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_300-expected.pdf
new file mode 120000
index 000000000..4d60e31e4
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_300-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_300.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_300-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_300-expected_pdf.png
new file mode 100644
index 000000000..1522b355d
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_300-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_300.pdf b/result_images/test_triangle_rotation_axis/CW_True_300.pdf
new file mode 100644
index 000000000..4b93480ac
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_300.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_300_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_300_pdf-failed-diff.png
new file mode 100644
index 000000000..451156dae
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_300_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_300_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_300_pdf.png
new file mode 100644
index 000000000..0cbbd113c
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_300_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_30_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_30_pdf-failed-diff.png
new file mode 100644
index 000000000..8a59b04be
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_30_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_30_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_30_pdf.png
new file mode 100644
index 000000000..5ba1404c4
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_30_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_315-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_315-expected.pdf
new file mode 120000
index 000000000..2df9fa00f
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_315-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_315.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_315-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_315-expected_pdf.png
new file mode 100644
index 000000000..0fc2995e0
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_315-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_315.pdf b/result_images/test_triangle_rotation_axis/CW_True_315.pdf
new file mode 100644
index 000000000..d788f0822
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_315.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_315_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_315_pdf-failed-diff.png
new file mode 100644
index 000000000..7e8d3dd11
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_315_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_315_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_315_pdf.png
new file mode 100644
index 000000000..32f50ad26
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_315_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_330-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_330-expected.pdf
new file mode 120000
index 000000000..9ec02d5a9
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_330-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_330.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_330-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_330-expected_pdf.png
new file mode 100644
index 000000000..33bc43970
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_330-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_330.pdf b/result_images/test_triangle_rotation_axis/CW_True_330.pdf
new file mode 100644
index 000000000..4a2f16bb0
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_330.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_330_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_330_pdf-failed-diff.png
new file mode 100644
index 000000000..5f0e4a41c
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_330_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_330_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_330_pdf.png
new file mode 100644
index 000000000..8bedc0627
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_330_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_345-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_345-expected.pdf
new file mode 120000
index 000000000..cc286c3d2
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_345-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_345.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_345-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_345-expected_pdf.png
new file mode 100644
index 000000000..da9add774
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_345-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_345.pdf b/result_images/test_triangle_rotation_axis/CW_True_345.pdf
new file mode 100644
index 000000000..b97b193b1
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_345.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_345_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_345_pdf-failed-diff.png
new file mode 100644
index 000000000..1160a25b5
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_345_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_345_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_345_pdf.png
new file mode 100644
index 000000000..5fb7535b0
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_345_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_360-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_360-expected.pdf
new file mode 120000
index 000000000..2ff363c42
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_360-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_360.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_360-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_360-expected_pdf.png
new file mode 100644
index 000000000..0c62f756e
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_360-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_360.pdf b/result_images/test_triangle_rotation_axis/CW_True_360.pdf
new file mode 100644
index 000000000..9c6256a1c
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_360.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_360_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_360_pdf-failed-diff.png
new file mode 100644
index 000000000..a0ce4606f
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_360_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_360_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_360_pdf.png
new file mode 100644
index 000000000..04411b66c
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_360_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_45-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_45-expected.pdf
new file mode 120000
index 000000000..77bc5ce6c
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_45-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_45.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_45-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_45-expected_pdf.png
new file mode 100644
index 000000000..9d130e8df
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_45-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_45.pdf b/result_images/test_triangle_rotation_axis/CW_True_45.pdf
new file mode 100644
index 000000000..a3109c3a7
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_45.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_45_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_45_pdf-failed-diff.png
new file mode 100644
index 000000000..51563cd21
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_45_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_45_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_45_pdf.png
new file mode 100644
index 000000000..ce73a8316
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_45_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_60-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_60-expected.pdf
new file mode 120000
index 000000000..d90c9c0e1
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_60-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_60.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_60-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_60-expected_pdf.png
new file mode 100644
index 000000000..e85affae1
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_60-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_60.pdf b/result_images/test_triangle_rotation_axis/CW_True_60.pdf
new file mode 100644
index 000000000..276f0ea9d
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_60.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_60_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_60_pdf-failed-diff.png
new file mode 100644
index 000000000..401b4a61f
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_60_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_60_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_60_pdf.png
new file mode 100644
index 000000000..e165ee920
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_60_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_75-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_75-expected.pdf
new file mode 120000
index 000000000..2d080cfc9
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_75-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_75.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_75-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_75-expected_pdf.png
new file mode 100644
index 000000000..375b3fcba
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_75-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_75.pdf b/result_images/test_triangle_rotation_axis/CW_True_75.pdf
new file mode 100644
index 000000000..81525b463
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_75.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_75_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_75_pdf-failed-diff.png
new file mode 100644
index 000000000..95e2e5c60
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_75_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_75_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_75_pdf.png
new file mode 100644
index 000000000..f72c37942
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_75_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_90-expected.pdf b/result_images/test_triangle_rotation_axis/CW_True_90-expected.pdf
new file mode 120000
index 000000000..f0283cf1f
--- /dev/null
+++ b/result_images/test_triangle_rotation_axis/CW_True_90-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_axis/CW_True_90.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_axis/CW_True_90-expected_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_90-expected_pdf.png
new file mode 100644
index 000000000..162cbdd45
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_90-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_90.pdf b/result_images/test_triangle_rotation_axis/CW_True_90.pdf
new file mode 100644
index 000000000..e217cc8b4
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_90.pdf differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_90_pdf-failed-diff.png b/result_images/test_triangle_rotation_axis/CW_True_90_pdf-failed-diff.png
new file mode 100644
index 000000000..4714b3423
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_90_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_axis/CW_True_90_pdf.png b/result_images/test_triangle_rotation_axis/CW_True_90_pdf.png
new file mode 100644
index 000000000..30b3ed53e
Binary files /dev/null and b/result_images/test_triangle_rotation_axis/CW_True_90_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_0-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_0-expected.pdf
new file mode 120000
index 000000000..ae68d5879
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_0-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_0.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_0-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_0-expected_pdf.png
new file mode 100644
index 000000000..e4b741ace
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_0-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_0.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_0.pdf
new file mode 100644
index 000000000..a85416b4c
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_0.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_0_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_0_pdf-failed-diff.png
new file mode 100644
index 000000000..f20461e52
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_0_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_0_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_0_pdf.png
new file mode 100644
index 000000000..2af5b9b41
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_0_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_105-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_105-expected.pdf
new file mode 120000
index 000000000..2c2790340
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_105-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_105.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_105-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_105-expected_pdf.png
new file mode 100644
index 000000000..05d485053
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_105-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_105.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_105.pdf
new file mode 100644
index 000000000..378c8226e
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_105.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_105_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_105_pdf-failed-diff.png
new file mode 100644
index 000000000..24422b572
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_105_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_105_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_105_pdf.png
new file mode 100644
index 000000000..639bd451c
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_105_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_120-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_120-expected.pdf
new file mode 120000
index 000000000..986410108
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_120-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_120.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_120-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_120-expected_pdf.png
new file mode 100644
index 000000000..a502361e5
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_120-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_120.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_120.pdf
new file mode 100644
index 000000000..d94cc7453
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_120.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_120_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_120_pdf-failed-diff.png
new file mode 100644
index 000000000..7ba9e8cb2
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_120_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_120_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_120_pdf.png
new file mode 100644
index 000000000..3b2292847
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_120_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_135-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_135-expected.pdf
new file mode 120000
index 000000000..09fb9eb37
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_135-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_135.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_135-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_135-expected_pdf.png
new file mode 100644
index 000000000..239e26e05
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_135-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_135.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_135.pdf
new file mode 100644
index 000000000..d00837365
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_135.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_135_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_135_pdf-failed-diff.png
new file mode 100644
index 000000000..a8b0acda9
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_135_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_135_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_135_pdf.png
new file mode 100644
index 000000000..147ecf6eb
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_135_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_15-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_15-expected.pdf
new file mode 120000
index 000000000..ac9ba1994
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_15-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_15.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_15-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_15-expected_pdf.png
new file mode 100644
index 000000000..bb419cf30
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_15-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_15.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_15.pdf
new file mode 100644
index 000000000..7f038a1d3
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_15.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_150-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_150-expected.pdf
new file mode 120000
index 000000000..3eab16043
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_150-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_150.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_150-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_150-expected_pdf.png
new file mode 100644
index 000000000..5ec34f29a
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_150-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_150.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_150.pdf
new file mode 100644
index 000000000..7cd0c388d
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_150.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_150_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_150_pdf-failed-diff.png
new file mode 100644
index 000000000..1bd91c6b1
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_150_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_150_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_150_pdf.png
new file mode 100644
index 000000000..608d8b459
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_150_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_15_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_15_pdf-failed-diff.png
new file mode 100644
index 000000000..076cc4204
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_15_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_15_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_15_pdf.png
new file mode 100644
index 000000000..73921c35c
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_15_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_165-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_165-expected.pdf
new file mode 120000
index 000000000..fdfd7e663
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_165-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_165.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_165-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_165-expected_pdf.png
new file mode 100644
index 000000000..8e188940d
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_165-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_165.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_165.pdf
new file mode 100644
index 000000000..6c8855f4e
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_165.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_165_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_165_pdf-failed-diff.png
new file mode 100644
index 000000000..e90cfce71
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_165_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_165_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_165_pdf.png
new file mode 100644
index 000000000..f6afb1294
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_165_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_180-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_180-expected.pdf
new file mode 120000
index 000000000..ac889df3b
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_180-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_180.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_180-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_180-expected_pdf.png
new file mode 100644
index 000000000..8850856ee
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_180-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_180.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_180.pdf
new file mode 100644
index 000000000..32084095d
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_180.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_180_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_180_pdf-failed-diff.png
new file mode 100644
index 000000000..fe15c6907
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_180_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_180_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_180_pdf.png
new file mode 100644
index 000000000..1f75d6e0f
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_180_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_195-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_195-expected.pdf
new file mode 120000
index 000000000..d80689c2b
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_195-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_195.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_195-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_195-expected_pdf.png
new file mode 100644
index 000000000..38f15de66
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_195-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_195.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_195.pdf
new file mode 100644
index 000000000..2a6e5912e
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_195.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_195_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_195_pdf-failed-diff.png
new file mode 100644
index 000000000..12ca524d8
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_195_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_195_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_195_pdf.png
new file mode 100644
index 000000000..2a06e976b
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_195_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_210-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_210-expected.pdf
new file mode 120000
index 000000000..39e879aa8
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_210-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_210.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_210-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_210-expected_pdf.png
new file mode 100644
index 000000000..132d2bb46
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_210-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_210.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_210.pdf
new file mode 100644
index 000000000..5338c60a5
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_210.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_210_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_210_pdf-failed-diff.png
new file mode 100644
index 000000000..d6765ce95
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_210_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_210_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_210_pdf.png
new file mode 100644
index 000000000..ebdf9a908
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_210_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_225-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_225-expected.pdf
new file mode 120000
index 000000000..01b30fd89
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_225-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_225.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_225-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_225-expected_pdf.png
new file mode 100644
index 000000000..7375a9f0b
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_225-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_225.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_225.pdf
new file mode 100644
index 000000000..073e8fb1b
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_225.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_225_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_225_pdf-failed-diff.png
new file mode 100644
index 000000000..256290427
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_225_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_225_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_225_pdf.png
new file mode 100644
index 000000000..3a84b6772
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_225_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_240-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_240-expected.pdf
new file mode 120000
index 000000000..9766b1fcc
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_240-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_240.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_240-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_240-expected_pdf.png
new file mode 100644
index 000000000..058111427
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_240-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_240.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_240.pdf
new file mode 100644
index 000000000..019808d2c
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_240.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_240_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_240_pdf-failed-diff.png
new file mode 100644
index 000000000..696902e51
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_240_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_240_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_240_pdf.png
new file mode 100644
index 000000000..d87c639e3
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_240_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_255-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_255-expected.pdf
new file mode 120000
index 000000000..5bd9c2f6c
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_255-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_255.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_255-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_255-expected_pdf.png
new file mode 100644
index 000000000..acc697cb3
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_255-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_255.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_255.pdf
new file mode 100644
index 000000000..9c52fd508
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_255.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_255_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_255_pdf-failed-diff.png
new file mode 100644
index 000000000..59a594661
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_255_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_255_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_255_pdf.png
new file mode 100644
index 000000000..4549727d0
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_255_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_270-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_270-expected.pdf
new file mode 120000
index 000000000..5fb5f627b
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_270-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_270.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_270-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_270-expected_pdf.png
new file mode 100644
index 000000000..76dd48efd
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_270-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_270.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_270.pdf
new file mode 100644
index 000000000..c4b69c67e
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_270.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_270_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_270_pdf-failed-diff.png
new file mode 100644
index 000000000..637d7f2c5
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_270_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_270_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_270_pdf.png
new file mode 100644
index 000000000..8f9a04bb8
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_270_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_285-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_285-expected.pdf
new file mode 120000
index 000000000..851608414
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_285-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_285.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_285-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_285-expected_pdf.png
new file mode 100644
index 000000000..94fb35d37
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_285-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_285.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_285.pdf
new file mode 100644
index 000000000..f81f47e54
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_285.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_285_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_285_pdf-failed-diff.png
new file mode 100644
index 000000000..4135dad42
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_285_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_285_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_285_pdf.png
new file mode 100644
index 000000000..b1e2fb02d
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_285_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_30-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_30-expected.pdf
new file mode 120000
index 000000000..a8b5a531d
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_30-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_30.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_30-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_30-expected_pdf.png
new file mode 100644
index 000000000..d671e0f15
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_30-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_30.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_30.pdf
new file mode 100644
index 000000000..c1ac57c15
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_30.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_300-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_300-expected.pdf
new file mode 120000
index 000000000..fe18d31c0
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_300-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_300.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_300-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_300-expected_pdf.png
new file mode 100644
index 000000000..ebc25630b
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_300-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_300.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_300.pdf
new file mode 100644
index 000000000..d841882f0
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_300.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_300_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_300_pdf-failed-diff.png
new file mode 100644
index 000000000..ea121d417
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_300_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_300_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_300_pdf.png
new file mode 100644
index 000000000..df99cf619
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_300_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_30_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_30_pdf-failed-diff.png
new file mode 100644
index 000000000..74b42493b
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_30_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_30_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_30_pdf.png
new file mode 100644
index 000000000..31905e7b2
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_30_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_315-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_315-expected.pdf
new file mode 120000
index 000000000..7100b7817
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_315-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_315.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_315-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_315-expected_pdf.png
new file mode 100644
index 000000000..ea9010fcf
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_315-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_315.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_315.pdf
new file mode 100644
index 000000000..fce65d16e
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_315.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_315_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_315_pdf-failed-diff.png
new file mode 100644
index 000000000..f42eec6e7
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_315_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_315_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_315_pdf.png
new file mode 100644
index 000000000..26dc82117
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_315_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_330-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_330-expected.pdf
new file mode 120000
index 000000000..662c9a63f
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_330-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_330.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_330-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_330-expected_pdf.png
new file mode 100644
index 000000000..296be4e36
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_330-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_330.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_330.pdf
new file mode 100644
index 000000000..b22b0a1e4
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_330.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_330_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_330_pdf-failed-diff.png
new file mode 100644
index 000000000..7530002f0
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_330_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_330_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_330_pdf.png
new file mode 100644
index 000000000..ce367c2a8
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_330_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_345-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_345-expected.pdf
new file mode 120000
index 000000000..24c61a461
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_345-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_345.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_345-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_345-expected_pdf.png
new file mode 100644
index 000000000..5b7efe089
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_345-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_345.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_345.pdf
new file mode 100644
index 000000000..2cdaf1bf2
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_345.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_345_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_345_pdf-failed-diff.png
new file mode 100644
index 000000000..22e0c95e2
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_345_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_345_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_345_pdf.png
new file mode 100644
index 000000000..9e567ebce
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_345_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_360-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_360-expected.pdf
new file mode 120000
index 000000000..694930af2
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_360-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_360.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_360-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_360-expected_pdf.png
new file mode 100644
index 000000000..e4b741ace
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_360-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_360.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_360.pdf
new file mode 100644
index 000000000..e4b5714e7
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_360.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_360_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_360_pdf-failed-diff.png
new file mode 100644
index 000000000..f20461e52
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_360_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_360_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_360_pdf.png
new file mode 100644
index 000000000..2af5b9b41
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_360_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_45-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_45-expected.pdf
new file mode 120000
index 000000000..156d709a0
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_45-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_45.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_45-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_45-expected_pdf.png
new file mode 100644
index 000000000..46251f292
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_45-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_45.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_45.pdf
new file mode 100644
index 000000000..e1d098f98
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_45.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_45_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_45_pdf-failed-diff.png
new file mode 100644
index 000000000..a066d84a7
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_45_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_45_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_45_pdf.png
new file mode 100644
index 000000000..d4aa7e5e5
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_45_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_60-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_60-expected.pdf
new file mode 120000
index 000000000..7aee9c265
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_60-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_60.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_60-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_60-expected_pdf.png
new file mode 100644
index 000000000..e4685727c
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_60-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_60.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_60.pdf
new file mode 100644
index 000000000..446032cdb
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_60.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_60_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_60_pdf-failed-diff.png
new file mode 100644
index 000000000..e2eb29778
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_60_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_60_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_60_pdf.png
new file mode 100644
index 000000000..041df0930
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_60_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_75-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_75-expected.pdf
new file mode 120000
index 000000000..8c40dfc9e
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_75-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_75.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_75-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_75-expected_pdf.png
new file mode 100644
index 000000000..fe2561dd0
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_75-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_75.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_75.pdf
new file mode 100644
index 000000000..8c76ee716
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_75.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_75_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_75_pdf-failed-diff.png
new file mode 100644
index 000000000..2af239285
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_75_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_75_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_75_pdf.png
new file mode 100644
index 000000000..53ccdf657
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_75_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_90-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_90-expected.pdf
new file mode 120000
index 000000000..11b5e2d61
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_False_90-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_False_90.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_90-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_90-expected_pdf.png
new file mode 100644
index 000000000..447841743
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_90-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_90.pdf b/result_images/test_triangle_rotation_horizontal/CCW_False_90.pdf
new file mode 100644
index 000000000..5356ebe3f
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_90.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_90_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_False_90_pdf-failed-diff.png
new file mode 100644
index 000000000..80fe40c95
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_90_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_False_90_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_False_90_pdf.png
new file mode 100644
index 000000000..aa485e50b
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_False_90_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_0-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_0-expected.pdf
new file mode 120000
index 000000000..8163fb09e
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_0-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_0.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_0-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_0-expected_pdf.png
new file mode 100644
index 000000000..bcb831673
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_0-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_0.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_0.pdf
new file mode 100644
index 000000000..55266bb9f
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_0.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_0_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_0_pdf-failed-diff.png
new file mode 100644
index 000000000..647ebeafe
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_0_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_0_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_0_pdf.png
new file mode 100644
index 000000000..12474ec1c
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_0_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_105-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_105-expected.pdf
new file mode 120000
index 000000000..2c7ba173e
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_105-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_105.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_105-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_105-expected_pdf.png
new file mode 100644
index 000000000..d7073e149
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_105-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_105.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_105.pdf
new file mode 100644
index 000000000..525696387
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_105.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_105_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_105_pdf-failed-diff.png
new file mode 100644
index 000000000..01e822b58
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_105_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_105_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_105_pdf.png
new file mode 100644
index 000000000..ee1c16cae
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_105_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_120-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_120-expected.pdf
new file mode 120000
index 000000000..5013a5196
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_120-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_120.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_120-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_120-expected_pdf.png
new file mode 100644
index 000000000..c2a14c69a
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_120-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_120.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_120.pdf
new file mode 100644
index 000000000..ab91ecff5
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_120.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_120_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_120_pdf-failed-diff.png
new file mode 100644
index 000000000..c86ed8d07
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_120_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_120_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_120_pdf.png
new file mode 100644
index 000000000..35cbf66cc
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_120_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_135-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_135-expected.pdf
new file mode 120000
index 000000000..43dca86e6
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_135-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_135.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_135-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_135-expected_pdf.png
new file mode 100644
index 000000000..9112791bb
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_135-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_135.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_135.pdf
new file mode 100644
index 000000000..0c67437f3
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_135.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_135_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_135_pdf-failed-diff.png
new file mode 100644
index 000000000..9200f57ed
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_135_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_135_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_135_pdf.png
new file mode 100644
index 000000000..0e9a3d5b4
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_135_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_15-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_15-expected.pdf
new file mode 120000
index 000000000..f2d0f15fb
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_15-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_15.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_15-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_15-expected_pdf.png
new file mode 100644
index 000000000..a497afd3e
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_15-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_15.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_15.pdf
new file mode 100644
index 000000000..df63542c4
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_15.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_150-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_150-expected.pdf
new file mode 120000
index 000000000..05510fa69
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_150-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_150.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_150-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_150-expected_pdf.png
new file mode 100644
index 000000000..eee252ccb
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_150-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_150.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_150.pdf
new file mode 100644
index 000000000..9e9a79fee
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_150.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_150_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_150_pdf-failed-diff.png
new file mode 100644
index 000000000..19d92fbe4
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_150_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_150_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_150_pdf.png
new file mode 100644
index 000000000..33a603725
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_150_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_15_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_15_pdf-failed-diff.png
new file mode 100644
index 000000000..ddd24d2c1
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_15_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_15_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_15_pdf.png
new file mode 100644
index 000000000..18bb4b11b
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_15_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_165-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_165-expected.pdf
new file mode 120000
index 000000000..7dc6cc5dd
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_165-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_165.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_165-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_165-expected_pdf.png
new file mode 100644
index 000000000..44c6d5a88
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_165-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_165.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_165.pdf
new file mode 100644
index 000000000..43385b04d
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_165.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_165_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_165_pdf-failed-diff.png
new file mode 100644
index 000000000..35cc98f49
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_165_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_165_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_165_pdf.png
new file mode 100644
index 000000000..fd3a90d23
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_165_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_180-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_180-expected.pdf
new file mode 120000
index 000000000..27c7d23b5
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_180-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_180.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_180-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_180-expected_pdf.png
new file mode 100644
index 000000000..c08cb96c2
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_180-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_180.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_180.pdf
new file mode 100644
index 000000000..a29bfb4bb
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_180.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_180_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_180_pdf-failed-diff.png
new file mode 100644
index 000000000..fc23e11e3
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_180_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_180_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_180_pdf.png
new file mode 100644
index 000000000..e903eba0c
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_180_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_195-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_195-expected.pdf
new file mode 120000
index 000000000..5d819dcb0
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_195-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_195.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_195-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_195-expected_pdf.png
new file mode 100644
index 000000000..267a11d65
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_195-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_195.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_195.pdf
new file mode 100644
index 000000000..dec19ac2c
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_195.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_195_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_195_pdf-failed-diff.png
new file mode 100644
index 000000000..d36b450a2
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_195_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_195_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_195_pdf.png
new file mode 100644
index 000000000..1fa496cb3
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_195_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_210-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_210-expected.pdf
new file mode 120000
index 000000000..9bafa26b5
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_210-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_210.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_210-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_210-expected_pdf.png
new file mode 100644
index 000000000..6a70c80dd
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_210-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_210.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_210.pdf
new file mode 100644
index 000000000..009bfba4e
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_210.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_210_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_210_pdf-failed-diff.png
new file mode 100644
index 000000000..f3990c2b1
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_210_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_210_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_210_pdf.png
new file mode 100644
index 000000000..f14102ace
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_210_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_225-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_225-expected.pdf
new file mode 120000
index 000000000..c8adc9c99
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_225-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_225.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_225-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_225-expected_pdf.png
new file mode 100644
index 000000000..a7d802e7f
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_225-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_225.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_225.pdf
new file mode 100644
index 000000000..2e45974dc
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_225.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_225_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_225_pdf-failed-diff.png
new file mode 100644
index 000000000..5f9ca66ec
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_225_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_225_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_225_pdf.png
new file mode 100644
index 000000000..b71eade49
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_225_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_240-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_240-expected.pdf
new file mode 120000
index 000000000..868d2cd8c
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_240-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_240.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_240-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_240-expected_pdf.png
new file mode 100644
index 000000000..89b3c1078
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_240-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_240.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_240.pdf
new file mode 100644
index 000000000..296250a8d
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_240.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_240_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_240_pdf-failed-diff.png
new file mode 100644
index 000000000..a5c20bf89
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_240_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_240_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_240_pdf.png
new file mode 100644
index 000000000..c2471ae00
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_240_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_255-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_255-expected.pdf
new file mode 120000
index 000000000..2b7343569
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_255-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_255.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_255-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_255-expected_pdf.png
new file mode 100644
index 000000000..c8505e1ed
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_255-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_255.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_255.pdf
new file mode 100644
index 000000000..a2820f360
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_255.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_255_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_255_pdf-failed-diff.png
new file mode 100644
index 000000000..06a73b5c9
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_255_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_255_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_255_pdf.png
new file mode 100644
index 000000000..d4dcfe8b3
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_255_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_270-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_270-expected.pdf
new file mode 120000
index 000000000..5d107a18e
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_270-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_270.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_270-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_270-expected_pdf.png
new file mode 100644
index 000000000..140701de2
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_270-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_270.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_270.pdf
new file mode 100644
index 000000000..0f62947dd
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_270.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_270_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_270_pdf-failed-diff.png
new file mode 100644
index 000000000..91c537e2a
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_270_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_270_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_270_pdf.png
new file mode 100644
index 000000000..6d9ead3dc
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_270_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_285-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_285-expected.pdf
new file mode 120000
index 000000000..28f15ee16
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_285-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_285.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_285-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_285-expected_pdf.png
new file mode 100644
index 000000000..e295971d8
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_285-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_285.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_285.pdf
new file mode 100644
index 000000000..0861a89b0
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_285.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_285_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_285_pdf-failed-diff.png
new file mode 100644
index 000000000..dd8e10608
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_285_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_285_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_285_pdf.png
new file mode 100644
index 000000000..6cf0ab7e7
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_285_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_30-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_30-expected.pdf
new file mode 120000
index 000000000..dbefa315c
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_30-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_30.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_30-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_30-expected_pdf.png
new file mode 100644
index 000000000..b55c872eb
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_30-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_30.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_30.pdf
new file mode 100644
index 000000000..c76e0cf9f
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_30.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_300-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_300-expected.pdf
new file mode 120000
index 000000000..faaf7fddb
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_300-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_300.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_300-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_300-expected_pdf.png
new file mode 100644
index 000000000..82c709c6b
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_300-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_300.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_300.pdf
new file mode 100644
index 000000000..33f295298
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_300.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_300_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_300_pdf-failed-diff.png
new file mode 100644
index 000000000..40579bc45
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_300_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_300_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_300_pdf.png
new file mode 100644
index 000000000..7674a0ed6
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_300_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_30_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_30_pdf-failed-diff.png
new file mode 100644
index 000000000..95f6469e4
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_30_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_30_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_30_pdf.png
new file mode 100644
index 000000000..89730fe39
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_30_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_315-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_315-expected.pdf
new file mode 120000
index 000000000..a5bb4e5c1
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_315-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_315.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_315-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_315-expected_pdf.png
new file mode 100644
index 000000000..4d124ab6c
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_315-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_315.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_315.pdf
new file mode 100644
index 000000000..df355a4e9
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_315.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_315_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_315_pdf-failed-diff.png
new file mode 100644
index 000000000..a1ba426fe
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_315_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_315_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_315_pdf.png
new file mode 100644
index 000000000..3e40220f8
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_315_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_330-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_330-expected.pdf
new file mode 120000
index 000000000..cb84f22d5
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_330-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_330.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_330-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_330-expected_pdf.png
new file mode 100644
index 000000000..0803611a4
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_330-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_330.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_330.pdf
new file mode 100644
index 000000000..7e89fbb10
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_330.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_330_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_330_pdf-failed-diff.png
new file mode 100644
index 000000000..4ab258dc0
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_330_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_330_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_330_pdf.png
new file mode 100644
index 000000000..dd87c93e2
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_330_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_345-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_345-expected.pdf
new file mode 120000
index 000000000..895b8cb5b
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_345-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_345.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_345-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_345-expected_pdf.png
new file mode 100644
index 000000000..476ab48b2
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_345-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_345.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_345.pdf
new file mode 100644
index 000000000..71faa37fc
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_345.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_345_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_345_pdf-failed-diff.png
new file mode 100644
index 000000000..e8b43ed3f
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_345_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_345_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_345_pdf.png
new file mode 100644
index 000000000..9480e4db0
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_345_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_360-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_360-expected.pdf
new file mode 120000
index 000000000..bb1537ad4
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_360-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_360.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_360-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_360-expected_pdf.png
new file mode 100644
index 000000000..bcb831673
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_360-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_360.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_360.pdf
new file mode 100644
index 000000000..4630b6cc6
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_360.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_360_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_360_pdf-failed-diff.png
new file mode 100644
index 000000000..647ebeafe
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_360_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_360_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_360_pdf.png
new file mode 100644
index 000000000..12474ec1c
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_360_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_45-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_45-expected.pdf
new file mode 120000
index 000000000..dd8828474
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_45-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_45.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_45-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_45-expected_pdf.png
new file mode 100644
index 000000000..cb0000ff4
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_45-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_45.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_45.pdf
new file mode 100644
index 000000000..7bd97c978
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_45.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_45_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_45_pdf-failed-diff.png
new file mode 100644
index 000000000..cf0595ea0
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_45_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_45_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_45_pdf.png
new file mode 100644
index 000000000..d4a581c1d
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_45_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_60-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_60-expected.pdf
new file mode 120000
index 000000000..d558c6117
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_60-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_60.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_60-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_60-expected_pdf.png
new file mode 100644
index 000000000..e0cc27b12
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_60-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_60.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_60.pdf
new file mode 100644
index 000000000..11e6084db
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_60.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_60_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_60_pdf-failed-diff.png
new file mode 100644
index 000000000..32c5bc9a1
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_60_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_60_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_60_pdf.png
new file mode 100644
index 000000000..abe3c17f1
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_60_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_75-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_75-expected.pdf
new file mode 120000
index 000000000..4827f2309
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_75-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_75.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_75-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_75-expected_pdf.png
new file mode 100644
index 000000000..34d796db8
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_75-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_75.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_75.pdf
new file mode 100644
index 000000000..4778df773
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_75.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_75_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_75_pdf-failed-diff.png
new file mode 100644
index 000000000..22e1463d0
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_75_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_75_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_75_pdf.png
new file mode 100644
index 000000000..18a4e6b18
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_75_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_90-expected.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_90-expected.pdf
new file mode 120000
index 000000000..59b8d79be
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CCW_True_90-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CCW_True_90.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_90-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_90-expected_pdf.png
new file mode 100644
index 000000000..bc6fa50af
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_90-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_90.pdf b/result_images/test_triangle_rotation_horizontal/CCW_True_90.pdf
new file mode 100644
index 000000000..bcd51e2e9
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_90.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_90_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CCW_True_90_pdf-failed-diff.png
new file mode 100644
index 000000000..d523ae62e
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_90_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CCW_True_90_pdf.png b/result_images/test_triangle_rotation_horizontal/CCW_True_90_pdf.png
new file mode 100644
index 000000000..403430e14
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CCW_True_90_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_0-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_0-expected.pdf
new file mode 120000
index 000000000..ff7dab044
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_0-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_0.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_0-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_0-expected_pdf.png
new file mode 100644
index 000000000..62f36630f
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_0-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_0.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_0.pdf
new file mode 100644
index 000000000..debcc6381
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_0.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_0_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_0_pdf-failed-diff.png
new file mode 100644
index 000000000..7676d0604
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_0_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_0_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_0_pdf.png
new file mode 100644
index 000000000..db0d68db3
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_0_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_105-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_105-expected.pdf
new file mode 120000
index 000000000..ac20be5ae
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_105-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_105.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_105-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_105-expected_pdf.png
new file mode 100644
index 000000000..94e81ba68
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_105-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_105.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_105.pdf
new file mode 100644
index 000000000..44ed79210
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_105.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_105_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_105_pdf-failed-diff.png
new file mode 100644
index 000000000..e8580dbe4
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_105_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_105_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_105_pdf.png
new file mode 100644
index 000000000..46e6c564d
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_105_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_120-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_120-expected.pdf
new file mode 120000
index 000000000..1e202e689
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_120-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_120.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_120-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_120-expected_pdf.png
new file mode 100644
index 000000000..f46a9440e
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_120-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_120.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_120.pdf
new file mode 100644
index 000000000..03960b69a
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_120.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_120_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_120_pdf-failed-diff.png
new file mode 100644
index 000000000..8e4afdb19
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_120_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_120_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_120_pdf.png
new file mode 100644
index 000000000..493d26a05
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_120_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_135-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_135-expected.pdf
new file mode 120000
index 000000000..8056b5e8d
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_135-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_135.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_135-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_135-expected_pdf.png
new file mode 100644
index 000000000..009a220dd
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_135-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_135.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_135.pdf
new file mode 100644
index 000000000..577f8e0d5
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_135.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_135_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_135_pdf-failed-diff.png
new file mode 100644
index 000000000..92dc14ca3
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_135_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_135_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_135_pdf.png
new file mode 100644
index 000000000..8ffd69193
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_135_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_15-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_15-expected.pdf
new file mode 120000
index 000000000..ac73169ee
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_15-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_15.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_15-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_15-expected_pdf.png
new file mode 100644
index 000000000..19aaf8f6e
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_15-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_15.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_15.pdf
new file mode 100644
index 000000000..69f5181dd
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_15.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_150-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_150-expected.pdf
new file mode 120000
index 000000000..843a2887e
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_150-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_150.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_150-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_150-expected_pdf.png
new file mode 100644
index 000000000..8e8d0d97f
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_150-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_150.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_150.pdf
new file mode 100644
index 000000000..09053bf3a
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_150.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_150_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_150_pdf-failed-diff.png
new file mode 100644
index 000000000..fb3f4bb88
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_150_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_150_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_150_pdf.png
new file mode 100644
index 000000000..cfe902e2e
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_150_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_15_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_15_pdf-failed-diff.png
new file mode 100644
index 000000000..81de26ce3
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_15_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_15_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_15_pdf.png
new file mode 100644
index 000000000..daedc5e90
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_15_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_165-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_165-expected.pdf
new file mode 120000
index 000000000..9ace6a5cb
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_165-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_165.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_165-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_165-expected_pdf.png
new file mode 100644
index 000000000..0c17baf57
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_165-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_165.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_165.pdf
new file mode 100644
index 000000000..a348bd4ff
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_165.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_165_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_165_pdf-failed-diff.png
new file mode 100644
index 000000000..7a7e8ef60
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_165_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_165_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_165_pdf.png
new file mode 100644
index 000000000..41dbfe4be
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_165_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_180-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_180-expected.pdf
new file mode 120000
index 000000000..c254e1065
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_180-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_180.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_180-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_180-expected_pdf.png
new file mode 100644
index 000000000..c8865b857
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_180-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_180.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_180.pdf
new file mode 100644
index 000000000..de7351dfd
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_180.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_180_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_180_pdf-failed-diff.png
new file mode 100644
index 000000000..3e6ebaf46
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_180_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_180_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_180_pdf.png
new file mode 100644
index 000000000..0a04f21df
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_180_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_195-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_195-expected.pdf
new file mode 120000
index 000000000..77fb8bf70
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_195-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_195.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_195-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_195-expected_pdf.png
new file mode 100644
index 000000000..19b8e3caf
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_195-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_195.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_195.pdf
new file mode 100644
index 000000000..c3f3d9959
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_195.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_195_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_195_pdf-failed-diff.png
new file mode 100644
index 000000000..0a96dc9ad
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_195_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_195_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_195_pdf.png
new file mode 100644
index 000000000..c73bd770b
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_195_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_210-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_210-expected.pdf
new file mode 120000
index 000000000..ddf7f3efe
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_210-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_210.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_210-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_210-expected_pdf.png
new file mode 100644
index 000000000..e7aa35c88
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_210-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_210.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_210.pdf
new file mode 100644
index 000000000..4214399ac
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_210.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_210_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_210_pdf-failed-diff.png
new file mode 100644
index 000000000..ba4335598
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_210_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_210_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_210_pdf.png
new file mode 100644
index 000000000..4d65214dc
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_210_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_225-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_225-expected.pdf
new file mode 120000
index 000000000..5992433e6
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_225-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_225.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_225-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_225-expected_pdf.png
new file mode 100644
index 000000000..263d2e8f6
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_225-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_225.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_225.pdf
new file mode 100644
index 000000000..3425abed6
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_225.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_225_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_225_pdf-failed-diff.png
new file mode 100644
index 000000000..9c601caf3
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_225_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_225_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_225_pdf.png
new file mode 100644
index 000000000..76206507f
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_225_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_240-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_240-expected.pdf
new file mode 120000
index 000000000..af71c372c
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_240-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_240.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_240-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_240-expected_pdf.png
new file mode 100644
index 000000000..42464dd7f
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_240-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_240.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_240.pdf
new file mode 100644
index 000000000..50c9ed917
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_240.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_240_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_240_pdf-failed-diff.png
new file mode 100644
index 000000000..50e06e984
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_240_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_240_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_240_pdf.png
new file mode 100644
index 000000000..4a3dad81d
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_240_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_255-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_255-expected.pdf
new file mode 120000
index 000000000..18db1de87
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_255-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_255.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_255-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_255-expected_pdf.png
new file mode 100644
index 000000000..dfa75927b
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_255-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_255.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_255.pdf
new file mode 100644
index 000000000..23ca73365
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_255.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_255_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_255_pdf-failed-diff.png
new file mode 100644
index 000000000..c932ae001
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_255_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_255_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_255_pdf.png
new file mode 100644
index 000000000..5c89bb36e
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_255_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_270-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_270-expected.pdf
new file mode 120000
index 000000000..e1c4dbf8a
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_270-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_270.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_270-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_270-expected_pdf.png
new file mode 100644
index 000000000..7e037f140
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_270-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_270.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_270.pdf
new file mode 100644
index 000000000..a20da7f18
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_270.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_270_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_270_pdf-failed-diff.png
new file mode 100644
index 000000000..30915fe23
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_270_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_270_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_270_pdf.png
new file mode 100644
index 000000000..d779feccc
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_270_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_285-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_285-expected.pdf
new file mode 120000
index 000000000..44cc2b87b
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_285-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_285.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_285-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_285-expected_pdf.png
new file mode 100644
index 000000000..012a7941f
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_285-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_285.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_285.pdf
new file mode 100644
index 000000000..427bbb7c7
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_285.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_285_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_285_pdf-failed-diff.png
new file mode 100644
index 000000000..fcb64a2ee
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_285_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_285_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_285_pdf.png
new file mode 100644
index 000000000..bb8f7ac0b
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_285_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_30-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_30-expected.pdf
new file mode 120000
index 000000000..0192920c1
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_30-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_30.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_30-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_30-expected_pdf.png
new file mode 100644
index 000000000..7a2ad9a44
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_30-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_30.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_30.pdf
new file mode 100644
index 000000000..e77b94bad
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_30.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_300-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_300-expected.pdf
new file mode 120000
index 000000000..cd9f59c0d
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_300-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_300.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_300-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_300-expected_pdf.png
new file mode 100644
index 000000000..b627d0074
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_300-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_300.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_300.pdf
new file mode 100644
index 000000000..c00188a7c
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_300.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_300_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_300_pdf-failed-diff.png
new file mode 100644
index 000000000..b8598cc48
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_300_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_300_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_300_pdf.png
new file mode 100644
index 000000000..94d25cf1b
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_300_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_30_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_30_pdf-failed-diff.png
new file mode 100644
index 000000000..860c4240d
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_30_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_30_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_30_pdf.png
new file mode 100644
index 000000000..fdcf6f05a
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_30_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_315-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_315-expected.pdf
new file mode 120000
index 000000000..1ebef3208
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_315-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_315.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_315-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_315-expected_pdf.png
new file mode 100644
index 000000000..b95daa81e
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_315-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_315.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_315.pdf
new file mode 100644
index 000000000..ffbce58a1
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_315.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_315_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_315_pdf-failed-diff.png
new file mode 100644
index 000000000..3ae7d2086
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_315_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_315_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_315_pdf.png
new file mode 100644
index 000000000..0b89e82cc
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_315_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_330-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_330-expected.pdf
new file mode 120000
index 000000000..2897f876a
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_330-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_330.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_330-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_330-expected_pdf.png
new file mode 100644
index 000000000..7551c456e
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_330-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_330.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_330.pdf
new file mode 100644
index 000000000..c1e6db491
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_330.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_330_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_330_pdf-failed-diff.png
new file mode 100644
index 000000000..03389b403
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_330_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_330_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_330_pdf.png
new file mode 100644
index 000000000..6159f437d
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_330_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_345-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_345-expected.pdf
new file mode 120000
index 000000000..f78b129e2
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_345-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_345.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_345-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_345-expected_pdf.png
new file mode 100644
index 000000000..01d8b5253
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_345-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_345.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_345.pdf
new file mode 100644
index 000000000..d3c0f7814
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_345.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_345_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_345_pdf-failed-diff.png
new file mode 100644
index 000000000..0ae78c2b2
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_345_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_345_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_345_pdf.png
new file mode 100644
index 000000000..9bb3a11c2
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_345_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_360-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_360-expected.pdf
new file mode 120000
index 000000000..e950328cd
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_360-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_360.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_360-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_360-expected_pdf.png
new file mode 100644
index 000000000..62f36630f
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_360-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_360.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_360.pdf
new file mode 100644
index 000000000..debcc6381
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_360.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_360_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_360_pdf-failed-diff.png
new file mode 100644
index 000000000..7676d0604
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_360_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_360_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_360_pdf.png
new file mode 100644
index 000000000..db0d68db3
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_360_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_45-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_45-expected.pdf
new file mode 120000
index 000000000..cf0d01390
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_45-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_45.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_45-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_45-expected_pdf.png
new file mode 100644
index 000000000..09daa6c90
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_45-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_45.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_45.pdf
new file mode 100644
index 000000000..ed2296499
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_45.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_45_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_45_pdf-failed-diff.png
new file mode 100644
index 000000000..7c500df6f
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_45_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_45_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_45_pdf.png
new file mode 100644
index 000000000..ea7233e95
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_45_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_60-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_60-expected.pdf
new file mode 120000
index 000000000..72aa34baf
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_60-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_60.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_60-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_60-expected_pdf.png
new file mode 100644
index 000000000..47d012250
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_60-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_60.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_60.pdf
new file mode 100644
index 000000000..353150c7e
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_60.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_60_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_60_pdf-failed-diff.png
new file mode 100644
index 000000000..c185823b4
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_60_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_60_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_60_pdf.png
new file mode 100644
index 000000000..17c237510
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_60_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_75-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_75-expected.pdf
new file mode 120000
index 000000000..6a92a7080
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_75-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_75.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_75-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_75-expected_pdf.png
new file mode 100644
index 000000000..30a601e43
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_75-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_75.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_75.pdf
new file mode 100644
index 000000000..4914aa193
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_75.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_75_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_75_pdf-failed-diff.png
new file mode 100644
index 000000000..fa73d556c
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_75_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_75_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_75_pdf.png
new file mode 100644
index 000000000..f02d91643
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_75_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_90-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_90-expected.pdf
new file mode 120000
index 000000000..ac41c5c8d
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_False_90-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_False_90.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_90-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_90-expected_pdf.png
new file mode 100644
index 000000000..9b3bca453
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_90-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_90.pdf b/result_images/test_triangle_rotation_horizontal/CW_False_90.pdf
new file mode 100644
index 000000000..edb5cb00f
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_90.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_90_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_False_90_pdf-failed-diff.png
new file mode 100644
index 000000000..25d43747e
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_90_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_False_90_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_False_90_pdf.png
new file mode 100644
index 000000000..b117b0dcb
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_False_90_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_0-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_0-expected.pdf
new file mode 120000
index 000000000..03898b370
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_0-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_0.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_0-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_0-expected_pdf.png
new file mode 100644
index 000000000..78a9cca8d
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_0-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_0.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_0.pdf
new file mode 100644
index 000000000..08a4f923f
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_0.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_0_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_0_pdf-failed-diff.png
new file mode 100644
index 000000000..80bd0a235
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_0_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_0_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_0_pdf.png
new file mode 100644
index 000000000..bd98e838b
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_0_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_105-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_105-expected.pdf
new file mode 120000
index 000000000..f9f10df1b
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_105-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_105.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_105-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_105-expected_pdf.png
new file mode 100644
index 000000000..a00163ccf
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_105-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_105.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_105.pdf
new file mode 100644
index 000000000..20189aa1c
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_105.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_105_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_105_pdf-failed-diff.png
new file mode 100644
index 000000000..ce2572671
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_105_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_105_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_105_pdf.png
new file mode 100644
index 000000000..b88b548dd
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_105_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_120-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_120-expected.pdf
new file mode 120000
index 000000000..922ef85e9
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_120-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_120.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_120-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_120-expected_pdf.png
new file mode 100644
index 000000000..2a7c7dab3
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_120-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_120.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_120.pdf
new file mode 100644
index 000000000..6165a3437
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_120.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_120_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_120_pdf-failed-diff.png
new file mode 100644
index 000000000..1a0fb885c
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_120_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_120_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_120_pdf.png
new file mode 100644
index 000000000..f22b0e48d
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_120_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_135-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_135-expected.pdf
new file mode 120000
index 000000000..aeeeb56b4
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_135-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_135.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_135-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_135-expected_pdf.png
new file mode 100644
index 000000000..aa1af8d9b
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_135-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_135.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_135.pdf
new file mode 100644
index 000000000..f52827a37
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_135.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_135_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_135_pdf-failed-diff.png
new file mode 100644
index 000000000..a511c2ebd
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_135_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_135_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_135_pdf.png
new file mode 100644
index 000000000..0750b9c15
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_135_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_15-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_15-expected.pdf
new file mode 120000
index 000000000..c7ecd271a
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_15-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_15.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_15-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_15-expected_pdf.png
new file mode 100644
index 000000000..ed01a0be0
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_15-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_15.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_15.pdf
new file mode 100644
index 000000000..7ddc5e959
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_15.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_150-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_150-expected.pdf
new file mode 120000
index 000000000..ed3a2761f
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_150-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_150.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_150-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_150-expected_pdf.png
new file mode 100644
index 000000000..4dcdf5335
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_150-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_150.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_150.pdf
new file mode 100644
index 000000000..491c05246
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_150.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_150_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_150_pdf-failed-diff.png
new file mode 100644
index 000000000..80018338a
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_150_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_150_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_150_pdf.png
new file mode 100644
index 000000000..996e5fad5
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_150_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_15_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_15_pdf-failed-diff.png
new file mode 100644
index 000000000..b23a72478
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_15_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_15_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_15_pdf.png
new file mode 100644
index 000000000..141380df0
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_15_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_165-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_165-expected.pdf
new file mode 120000
index 000000000..7cec6eb52
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_165-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_165.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_165-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_165-expected_pdf.png
new file mode 100644
index 000000000..8f33e017d
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_165-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_165.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_165.pdf
new file mode 100644
index 000000000..df81aa4f2
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_165.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_165_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_165_pdf-failed-diff.png
new file mode 100644
index 000000000..f7fac7553
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_165_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_165_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_165_pdf.png
new file mode 100644
index 000000000..e99d9177e
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_165_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_180-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_180-expected.pdf
new file mode 120000
index 000000000..5d066ecfe
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_180-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_180.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_180-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_180-expected_pdf.png
new file mode 100644
index 000000000..d675fbca8
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_180-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_180.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_180.pdf
new file mode 100644
index 000000000..298e2af09
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_180.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_180_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_180_pdf-failed-diff.png
new file mode 100644
index 000000000..8ba427b1b
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_180_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_180_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_180_pdf.png
new file mode 100644
index 000000000..8c673d0e9
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_180_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_195-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_195-expected.pdf
new file mode 120000
index 000000000..76b3acff0
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_195-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_195.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_195-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_195-expected_pdf.png
new file mode 100644
index 000000000..74c4fc4a5
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_195-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_195.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_195.pdf
new file mode 100644
index 000000000..665111f14
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_195.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_195_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_195_pdf-failed-diff.png
new file mode 100644
index 000000000..2bfede676
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_195_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_195_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_195_pdf.png
new file mode 100644
index 000000000..9bcb41cb8
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_195_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_210-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_210-expected.pdf
new file mode 120000
index 000000000..22eb7c391
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_210-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_210.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_210-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_210-expected_pdf.png
new file mode 100644
index 000000000..df39fb712
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_210-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_210.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_210.pdf
new file mode 100644
index 000000000..43d16bff9
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_210.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_210_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_210_pdf-failed-diff.png
new file mode 100644
index 000000000..751ac3641
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_210_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_210_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_210_pdf.png
new file mode 100644
index 000000000..851852710
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_210_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_225-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_225-expected.pdf
new file mode 120000
index 000000000..f95b63c85
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_225-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_225.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_225-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_225-expected_pdf.png
new file mode 100644
index 000000000..2ad3b284f
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_225-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_225.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_225.pdf
new file mode 100644
index 000000000..aecf72333
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_225.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_225_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_225_pdf-failed-diff.png
new file mode 100644
index 000000000..4fc08d05c
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_225_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_225_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_225_pdf.png
new file mode 100644
index 000000000..d599b0163
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_225_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_240-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_240-expected.pdf
new file mode 120000
index 000000000..13540812a
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_240-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_240.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_240-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_240-expected_pdf.png
new file mode 100644
index 000000000..5e674ed75
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_240-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_240.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_240.pdf
new file mode 100644
index 000000000..d8d6b3ed6
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_240.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_240_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_240_pdf-failed-diff.png
new file mode 100644
index 000000000..f3195b0c8
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_240_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_240_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_240_pdf.png
new file mode 100644
index 000000000..e49e62abe
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_240_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_255-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_255-expected.pdf
new file mode 120000
index 000000000..ef8e58c6f
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_255-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_255.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_255-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_255-expected_pdf.png
new file mode 100644
index 000000000..141204fb2
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_255-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_255.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_255.pdf
new file mode 100644
index 000000000..fa37ffa33
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_255.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_255_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_255_pdf-failed-diff.png
new file mode 100644
index 000000000..cec8847ff
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_255_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_255_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_255_pdf.png
new file mode 100644
index 000000000..0f19d6bda
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_255_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_270-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_270-expected.pdf
new file mode 120000
index 000000000..abd77ebb6
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_270-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_270.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_270-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_270-expected_pdf.png
new file mode 100644
index 000000000..579cb9ad4
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_270-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_270.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_270.pdf
new file mode 100644
index 000000000..f273c9fb0
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_270.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_270_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_270_pdf-failed-diff.png
new file mode 100644
index 000000000..8a9f906a1
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_270_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_270_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_270_pdf.png
new file mode 100644
index 000000000..64c2fe715
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_270_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_285-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_285-expected.pdf
new file mode 120000
index 000000000..813cb7190
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_285-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_285.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_285-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_285-expected_pdf.png
new file mode 100644
index 000000000..c8453acca
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_285-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_285.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_285.pdf
new file mode 100644
index 000000000..6e9fb7136
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_285.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_285_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_285_pdf-failed-diff.png
new file mode 100644
index 000000000..12c7c60f2
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_285_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_285_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_285_pdf.png
new file mode 100644
index 000000000..eed1fc098
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_285_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_30-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_30-expected.pdf
new file mode 120000
index 000000000..008b0db1f
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_30-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_30.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_30-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_30-expected_pdf.png
new file mode 100644
index 000000000..252ed7209
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_30-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_30.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_30.pdf
new file mode 100644
index 000000000..cc558821e
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_30.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_300-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_300-expected.pdf
new file mode 120000
index 000000000..ee94c6525
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_300-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_300.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_300-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_300-expected_pdf.png
new file mode 100644
index 000000000..a566dbdd0
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_300-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_300.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_300.pdf
new file mode 100644
index 000000000..e9dc5fdaf
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_300.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_300_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_300_pdf-failed-diff.png
new file mode 100644
index 000000000..342820298
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_300_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_300_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_300_pdf.png
new file mode 100644
index 000000000..d04424f92
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_300_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_30_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_30_pdf-failed-diff.png
new file mode 100644
index 000000000..9d197d508
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_30_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_30_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_30_pdf.png
new file mode 100644
index 000000000..a0db3f4ee
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_30_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_315-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_315-expected.pdf
new file mode 120000
index 000000000..7621781e9
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_315-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_315.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_315-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_315-expected_pdf.png
new file mode 100644
index 000000000..1744060bb
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_315-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_315.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_315.pdf
new file mode 100644
index 000000000..68fc355f9
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_315.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_315_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_315_pdf-failed-diff.png
new file mode 100644
index 000000000..37b78722e
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_315_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_315_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_315_pdf.png
new file mode 100644
index 000000000..beaf95880
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_315_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_330-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_330-expected.pdf
new file mode 120000
index 000000000..bc6ef688b
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_330-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_330.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_330-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_330-expected_pdf.png
new file mode 100644
index 000000000..9a1a7febd
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_330-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_330.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_330.pdf
new file mode 100644
index 000000000..aa3fada22
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_330.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_330_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_330_pdf-failed-diff.png
new file mode 100644
index 000000000..b52d548d7
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_330_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_330_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_330_pdf.png
new file mode 100644
index 000000000..d341dc2a3
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_330_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_345-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_345-expected.pdf
new file mode 120000
index 000000000..954101d9e
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_345-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_345.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_345-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_345-expected_pdf.png
new file mode 100644
index 000000000..79e0347ec
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_345-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_345.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_345.pdf
new file mode 100644
index 000000000..7d674ea87
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_345.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_345_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_345_pdf-failed-diff.png
new file mode 100644
index 000000000..c1b790485
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_345_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_345_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_345_pdf.png
new file mode 100644
index 000000000..80e06d557
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_345_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_360-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_360-expected.pdf
new file mode 120000
index 000000000..db69d7026
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_360-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_360.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_360-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_360-expected_pdf.png
new file mode 100644
index 000000000..78a9cca8d
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_360-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_360.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_360.pdf
new file mode 100644
index 000000000..08a4f923f
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_360.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_360_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_360_pdf-failed-diff.png
new file mode 100644
index 000000000..80bd0a235
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_360_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_360_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_360_pdf.png
new file mode 100644
index 000000000..bd98e838b
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_360_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_45-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_45-expected.pdf
new file mode 120000
index 000000000..7dae03ea2
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_45-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_45.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_45-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_45-expected_pdf.png
new file mode 100644
index 000000000..87bff6ca0
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_45-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_45.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_45.pdf
new file mode 100644
index 000000000..72bebf94a
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_45.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_45_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_45_pdf-failed-diff.png
new file mode 100644
index 000000000..3c4d0e26b
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_45_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_45_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_45_pdf.png
new file mode 100644
index 000000000..0b62874bc
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_45_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_60-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_60-expected.pdf
new file mode 120000
index 000000000..ec881ebe5
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_60-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_60.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_60-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_60-expected_pdf.png
new file mode 100644
index 000000000..af6deb1e4
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_60-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_60.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_60.pdf
new file mode 100644
index 000000000..7c446295f
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_60.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_60_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_60_pdf-failed-diff.png
new file mode 100644
index 000000000..9cd27bfea
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_60_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_60_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_60_pdf.png
new file mode 100644
index 000000000..cf1d29599
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_60_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_75-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_75-expected.pdf
new file mode 120000
index 000000000..18136abdb
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_75-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_75.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_75-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_75-expected_pdf.png
new file mode 100644
index 000000000..2cc23a035
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_75-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_75.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_75.pdf
new file mode 100644
index 000000000..663958ec1
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_75.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_75_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_75_pdf-failed-diff.png
new file mode 100644
index 000000000..ceac81f1e
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_75_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_75_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_75_pdf.png
new file mode 100644
index 000000000..c1e44f0c4
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_75_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_90-expected.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_90-expected.pdf
new file mode 120000
index 000000000..91bb73dc9
--- /dev/null
+++ b/result_images/test_triangle_rotation_horizontal/CW_True_90-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_horizontal/CW_True_90.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_90-expected_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_90-expected_pdf.png
new file mode 100644
index 000000000..26e255a8a
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_90-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_90.pdf b/result_images/test_triangle_rotation_horizontal/CW_True_90.pdf
new file mode 100644
index 000000000..248a98461
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_90.pdf differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_90_pdf-failed-diff.png b/result_images/test_triangle_rotation_horizontal/CW_True_90_pdf-failed-diff.png
new file mode 100644
index 000000000..0584dc5dd
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_90_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_horizontal/CW_True_90_pdf.png b/result_images/test_triangle_rotation_horizontal/CW_True_90_pdf.png
new file mode 100644
index 000000000..b7c0b247e
Binary files /dev/null and b/result_images/test_triangle_rotation_horizontal/CW_True_90_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_0-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_0-expected.pdf
new file mode 120000
index 000000000..b1f5ff326
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_0-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_0.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_0-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_0-expected_pdf.png
new file mode 100644
index 000000000..4d609926f
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_0-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_0.pdf b/result_images/test_triangle_rotation_tick/CCW_False_0.pdf
new file mode 100644
index 000000000..f0994e8e4
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_0.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_0_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_0_pdf-failed-diff.png
new file mode 100644
index 000000000..403d7123d
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_0_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_0_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_0_pdf.png
new file mode 100644
index 000000000..d7798ee3a
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_0_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_105-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_105-expected.pdf
new file mode 120000
index 000000000..6d8b88a05
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_105-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_105.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_105-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_105-expected_pdf.png
new file mode 100644
index 000000000..26aadcd4a
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_105-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_105.pdf b/result_images/test_triangle_rotation_tick/CCW_False_105.pdf
new file mode 100644
index 000000000..d1d2f3763
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_105.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_105_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_105_pdf-failed-diff.png
new file mode 100644
index 000000000..60039a14c
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_105_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_105_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_105_pdf.png
new file mode 100644
index 000000000..121be1003
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_105_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_120-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_120-expected.pdf
new file mode 120000
index 000000000..deccc6da2
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_120-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_120.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_120-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_120-expected_pdf.png
new file mode 100644
index 000000000..063732599
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_120-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_120.pdf b/result_images/test_triangle_rotation_tick/CCW_False_120.pdf
new file mode 100644
index 000000000..4e5e23a34
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_120.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_120_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_120_pdf-failed-diff.png
new file mode 100644
index 000000000..331ff2c8d
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_120_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_120_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_120_pdf.png
new file mode 100644
index 000000000..df377615a
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_120_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_135-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_135-expected.pdf
new file mode 120000
index 000000000..4aa922626
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_135-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_135.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_135-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_135-expected_pdf.png
new file mode 100644
index 000000000..2958f2282
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_135-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_135.pdf b/result_images/test_triangle_rotation_tick/CCW_False_135.pdf
new file mode 100644
index 000000000..dc185970f
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_135.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_135_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_135_pdf-failed-diff.png
new file mode 100644
index 000000000..de057ace8
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_135_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_135_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_135_pdf.png
new file mode 100644
index 000000000..fbc9b8953
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_135_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_15-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_15-expected.pdf
new file mode 120000
index 000000000..86c2fa437
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_15-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_15.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_15-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_15-expected_pdf.png
new file mode 100644
index 000000000..8801ba8c9
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_15-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_15.pdf b/result_images/test_triangle_rotation_tick/CCW_False_15.pdf
new file mode 100644
index 000000000..6c4167ca1
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_15.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_150-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_150-expected.pdf
new file mode 120000
index 000000000..24429b247
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_150-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_150.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_150-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_150-expected_pdf.png
new file mode 100644
index 000000000..98a8f3af9
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_150-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_150.pdf b/result_images/test_triangle_rotation_tick/CCW_False_150.pdf
new file mode 100644
index 000000000..3468b733b
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_150.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_150_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_150_pdf-failed-diff.png
new file mode 100644
index 000000000..92dcaa159
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_150_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_150_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_150_pdf.png
new file mode 100644
index 000000000..71cc7bb84
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_150_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_15_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_15_pdf-failed-diff.png
new file mode 100644
index 000000000..aa6ae6ce5
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_15_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_15_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_15_pdf.png
new file mode 100644
index 000000000..f72e4388a
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_15_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_165-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_165-expected.pdf
new file mode 120000
index 000000000..f2eb53632
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_165-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_165.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_165-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_165-expected_pdf.png
new file mode 100644
index 000000000..495ae9756
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_165-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_165.pdf b/result_images/test_triangle_rotation_tick/CCW_False_165.pdf
new file mode 100644
index 000000000..e9c709b72
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_165.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_165_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_165_pdf-failed-diff.png
new file mode 100644
index 000000000..3ddd80171
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_165_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_165_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_165_pdf.png
new file mode 100644
index 000000000..18de01134
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_165_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_180-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_180-expected.pdf
new file mode 120000
index 000000000..8e5bede2d
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_180-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_180.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_180-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_180-expected_pdf.png
new file mode 100644
index 000000000..a78c72abc
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_180-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_180.pdf b/result_images/test_triangle_rotation_tick/CCW_False_180.pdf
new file mode 100644
index 000000000..9ef6962eb
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_180.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_180_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_180_pdf-failed-diff.png
new file mode 100644
index 000000000..78a3b33fd
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_180_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_180_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_180_pdf.png
new file mode 100644
index 000000000..e2c0bff6a
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_180_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_195-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_195-expected.pdf
new file mode 120000
index 000000000..8e0f06fd3
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_195-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_195.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_195-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_195-expected_pdf.png
new file mode 100644
index 000000000..0c820ea3d
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_195-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_195.pdf b/result_images/test_triangle_rotation_tick/CCW_False_195.pdf
new file mode 100644
index 000000000..a7f032998
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_195.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_195_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_195_pdf-failed-diff.png
new file mode 100644
index 000000000..9c5db59a5
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_195_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_195_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_195_pdf.png
new file mode 100644
index 000000000..b056e987b
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_195_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_210-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_210-expected.pdf
new file mode 120000
index 000000000..fcf27c43a
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_210-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_210.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_210-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_210-expected_pdf.png
new file mode 100644
index 000000000..0e80279cf
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_210-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_210.pdf b/result_images/test_triangle_rotation_tick/CCW_False_210.pdf
new file mode 100644
index 000000000..b4bd8e985
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_210.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_210_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_210_pdf-failed-diff.png
new file mode 100644
index 000000000..9783a33ab
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_210_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_210_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_210_pdf.png
new file mode 100644
index 000000000..3227f482e
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_210_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_225-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_225-expected.pdf
new file mode 120000
index 000000000..bf053891a
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_225-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_225.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_225-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_225-expected_pdf.png
new file mode 100644
index 000000000..60041a9e5
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_225-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_225.pdf b/result_images/test_triangle_rotation_tick/CCW_False_225.pdf
new file mode 100644
index 000000000..c705b84b9
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_225.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_225_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_225_pdf-failed-diff.png
new file mode 100644
index 000000000..f891b78b8
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_225_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_225_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_225_pdf.png
new file mode 100644
index 000000000..7ec08decf
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_225_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_240-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_240-expected.pdf
new file mode 120000
index 000000000..91f58095d
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_240-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_240.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_240-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_240-expected_pdf.png
new file mode 100644
index 000000000..9ef2bb0dd
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_240-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_240.pdf b/result_images/test_triangle_rotation_tick/CCW_False_240.pdf
new file mode 100644
index 000000000..cdfa66edb
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_240.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_240_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_240_pdf-failed-diff.png
new file mode 100644
index 000000000..e2f6971b2
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_240_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_240_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_240_pdf.png
new file mode 100644
index 000000000..e96b73cde
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_240_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_255-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_255-expected.pdf
new file mode 120000
index 000000000..d8357e07c
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_255-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_255.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_255-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_255-expected_pdf.png
new file mode 100644
index 000000000..5344c3e10
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_255-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_255.pdf b/result_images/test_triangle_rotation_tick/CCW_False_255.pdf
new file mode 100644
index 000000000..eed5884cc
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_255.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_255_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_255_pdf-failed-diff.png
new file mode 100644
index 000000000..824e69a62
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_255_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_255_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_255_pdf.png
new file mode 100644
index 000000000..82aaeaa9b
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_255_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_270-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_270-expected.pdf
new file mode 120000
index 000000000..0fb3f2924
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_270-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_270.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_270-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_270-expected_pdf.png
new file mode 100644
index 000000000..5e40e4fc7
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_270-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_270.pdf b/result_images/test_triangle_rotation_tick/CCW_False_270.pdf
new file mode 100644
index 000000000..8acb0bcc2
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_270.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_270_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_270_pdf-failed-diff.png
new file mode 100644
index 000000000..b1fec3831
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_270_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_270_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_270_pdf.png
new file mode 100644
index 000000000..53ea2e330
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_270_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_285-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_285-expected.pdf
new file mode 120000
index 000000000..6042a309e
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_285-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_285.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_285-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_285-expected_pdf.png
new file mode 100644
index 000000000..89027dd21
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_285-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_285.pdf b/result_images/test_triangle_rotation_tick/CCW_False_285.pdf
new file mode 100644
index 000000000..342b9b108
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_285.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_285_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_285_pdf-failed-diff.png
new file mode 100644
index 000000000..71b5c5d70
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_285_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_285_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_285_pdf.png
new file mode 100644
index 000000000..f92d69677
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_285_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_30-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_30-expected.pdf
new file mode 120000
index 000000000..77302df74
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_30-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_30.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_30-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_30-expected_pdf.png
new file mode 100644
index 000000000..7688fa6e4
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_30-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_30.pdf b/result_images/test_triangle_rotation_tick/CCW_False_30.pdf
new file mode 100644
index 000000000..edbc8a6cb
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_30.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_300-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_300-expected.pdf
new file mode 120000
index 000000000..5ce41a7f3
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_300-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_300.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_300-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_300-expected_pdf.png
new file mode 100644
index 000000000..95ddaf212
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_300-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_300.pdf b/result_images/test_triangle_rotation_tick/CCW_False_300.pdf
new file mode 100644
index 000000000..531b24585
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_300.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_300_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_300_pdf-failed-diff.png
new file mode 100644
index 000000000..f2740404e
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_300_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_300_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_300_pdf.png
new file mode 100644
index 000000000..defe41a3d
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_300_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_30_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_30_pdf-failed-diff.png
new file mode 100644
index 000000000..7b8de058f
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_30_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_30_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_30_pdf.png
new file mode 100644
index 000000000..5d950e5e4
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_30_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_315-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_315-expected.pdf
new file mode 120000
index 000000000..e66536af1
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_315-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_315.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_315-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_315-expected_pdf.png
new file mode 100644
index 000000000..4f300b91c
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_315-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_315.pdf b/result_images/test_triangle_rotation_tick/CCW_False_315.pdf
new file mode 100644
index 000000000..8f6959b2d
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_315.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_315_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_315_pdf-failed-diff.png
new file mode 100644
index 000000000..89aa5fd52
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_315_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_315_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_315_pdf.png
new file mode 100644
index 000000000..42077c9ac
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_315_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_330-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_330-expected.pdf
new file mode 120000
index 000000000..d3536e2c7
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_330-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_330.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_330-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_330-expected_pdf.png
new file mode 100644
index 000000000..295ff41dc
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_330-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_330.pdf b/result_images/test_triangle_rotation_tick/CCW_False_330.pdf
new file mode 100644
index 000000000..fc627617e
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_330.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_330_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_330_pdf-failed-diff.png
new file mode 100644
index 000000000..b844de5b1
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_330_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_330_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_330_pdf.png
new file mode 100644
index 000000000..cd1acedb7
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_330_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_345-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_345-expected.pdf
new file mode 120000
index 000000000..08b6b219f
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_345-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_345.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_345-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_345-expected_pdf.png
new file mode 100644
index 000000000..37a05d5ee
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_345-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_345.pdf b/result_images/test_triangle_rotation_tick/CCW_False_345.pdf
new file mode 100644
index 000000000..55e9c78c3
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_345.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_345_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_345_pdf-failed-diff.png
new file mode 100644
index 000000000..6de4dd86a
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_345_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_345_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_345_pdf.png
new file mode 100644
index 000000000..c64eaa909
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_345_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_360-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_360-expected.pdf
new file mode 120000
index 000000000..4796a4e13
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_360-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_360.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_360-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_360-expected_pdf.png
new file mode 100644
index 000000000..4d609926f
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_360-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_360.pdf b/result_images/test_triangle_rotation_tick/CCW_False_360.pdf
new file mode 100644
index 000000000..c78c42b51
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_360.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_360_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_360_pdf-failed-diff.png
new file mode 100644
index 000000000..403d7123d
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_360_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_360_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_360_pdf.png
new file mode 100644
index 000000000..d7798ee3a
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_360_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_45-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_45-expected.pdf
new file mode 120000
index 000000000..8543a738e
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_45-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_45.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_45-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_45-expected_pdf.png
new file mode 100644
index 000000000..16260b536
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_45-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_45.pdf b/result_images/test_triangle_rotation_tick/CCW_False_45.pdf
new file mode 100644
index 000000000..3baf13e30
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_45.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_45_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_45_pdf-failed-diff.png
new file mode 100644
index 000000000..74146da74
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_45_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_45_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_45_pdf.png
new file mode 100644
index 000000000..5783c3e5e
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_45_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_60-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_60-expected.pdf
new file mode 120000
index 000000000..d8922892d
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_60-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_60.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_60-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_60-expected_pdf.png
new file mode 100644
index 000000000..b2470c6e9
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_60-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_60.pdf b/result_images/test_triangle_rotation_tick/CCW_False_60.pdf
new file mode 100644
index 000000000..d9dd6a6a8
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_60.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_60_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_60_pdf-failed-diff.png
new file mode 100644
index 000000000..5fbccf55e
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_60_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_60_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_60_pdf.png
new file mode 100644
index 000000000..4bfb8787d
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_60_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_75-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_75-expected.pdf
new file mode 120000
index 000000000..03ff8c287
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_75-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_75.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_75-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_75-expected_pdf.png
new file mode 100644
index 000000000..d7959c8ce
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_75-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_75.pdf b/result_images/test_triangle_rotation_tick/CCW_False_75.pdf
new file mode 100644
index 000000000..99325c02d
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_75.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_75_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_75_pdf-failed-diff.png
new file mode 100644
index 000000000..2ef6bb69c
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_75_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_75_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_75_pdf.png
new file mode 100644
index 000000000..a6e8e8f5d
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_75_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_90-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_False_90-expected.pdf
new file mode 120000
index 000000000..a9f9c010f
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_False_90-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_False_90.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_90-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_90-expected_pdf.png
new file mode 100644
index 000000000..5fafb09d0
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_90-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_90.pdf b/result_images/test_triangle_rotation_tick/CCW_False_90.pdf
new file mode 100644
index 000000000..fac7536e1
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_90.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_90_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_False_90_pdf-failed-diff.png
new file mode 100644
index 000000000..1ab42f637
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_90_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_False_90_pdf.png b/result_images/test_triangle_rotation_tick/CCW_False_90_pdf.png
new file mode 100644
index 000000000..265d2eb0b
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_False_90_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_0-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_0-expected.pdf
new file mode 120000
index 000000000..a49afeb57
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_0-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_0.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_0-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_0-expected_pdf.png
new file mode 100644
index 000000000..53b961ce5
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_0-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_0.pdf b/result_images/test_triangle_rotation_tick/CCW_True_0.pdf
new file mode 100644
index 000000000..31a29e9a2
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_0.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_0_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_0_pdf-failed-diff.png
new file mode 100644
index 000000000..38edd0813
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_0_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_0_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_0_pdf.png
new file mode 100644
index 000000000..2a8c21fec
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_0_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_105-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_105-expected.pdf
new file mode 120000
index 000000000..fb6d89814
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_105-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_105.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_105-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_105-expected_pdf.png
new file mode 100644
index 000000000..f62c6c16f
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_105-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_105.pdf b/result_images/test_triangle_rotation_tick/CCW_True_105.pdf
new file mode 100644
index 000000000..47ea5195a
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_105.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_105_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_105_pdf-failed-diff.png
new file mode 100644
index 000000000..ec2e8a7ed
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_105_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_105_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_105_pdf.png
new file mode 100644
index 000000000..2d8d72c0e
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_105_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_120-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_120-expected.pdf
new file mode 120000
index 000000000..7caebb74c
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_120-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_120.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_120-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_120-expected_pdf.png
new file mode 100644
index 000000000..e13e358d9
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_120-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_120.pdf b/result_images/test_triangle_rotation_tick/CCW_True_120.pdf
new file mode 100644
index 000000000..613841441
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_120.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_120_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_120_pdf-failed-diff.png
new file mode 100644
index 000000000..d91476d3e
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_120_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_120_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_120_pdf.png
new file mode 100644
index 000000000..6504d6be8
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_120_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_135-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_135-expected.pdf
new file mode 120000
index 000000000..f5ae80581
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_135-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_135.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_135-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_135-expected_pdf.png
new file mode 100644
index 000000000..359522c49
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_135-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_135.pdf b/result_images/test_triangle_rotation_tick/CCW_True_135.pdf
new file mode 100644
index 000000000..870f651fa
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_135.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_135_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_135_pdf-failed-diff.png
new file mode 100644
index 000000000..7215af5b2
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_135_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_135_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_135_pdf.png
new file mode 100644
index 000000000..ad69474e6
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_135_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_15-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_15-expected.pdf
new file mode 120000
index 000000000..424496ab3
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_15-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_15.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_15-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_15-expected_pdf.png
new file mode 100644
index 000000000..3633427a6
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_15-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_15.pdf b/result_images/test_triangle_rotation_tick/CCW_True_15.pdf
new file mode 100644
index 000000000..e381ced71
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_15.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_150-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_150-expected.pdf
new file mode 120000
index 000000000..7184f332a
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_150-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_150.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_150-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_150-expected_pdf.png
new file mode 100644
index 000000000..cc6730a76
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_150-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_150.pdf b/result_images/test_triangle_rotation_tick/CCW_True_150.pdf
new file mode 100644
index 000000000..37a285bf7
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_150.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_150_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_150_pdf-failed-diff.png
new file mode 100644
index 000000000..09ba8fbf5
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_150_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_150_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_150_pdf.png
new file mode 100644
index 000000000..6b2fcb044
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_150_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_15_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_15_pdf-failed-diff.png
new file mode 100644
index 000000000..f2e854304
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_15_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_15_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_15_pdf.png
new file mode 100644
index 000000000..27c211ea6
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_15_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_165-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_165-expected.pdf
new file mode 120000
index 000000000..2b6d22826
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_165-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_165.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_165-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_165-expected_pdf.png
new file mode 100644
index 000000000..a8880059b
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_165-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_165.pdf b/result_images/test_triangle_rotation_tick/CCW_True_165.pdf
new file mode 100644
index 000000000..81a0838e9
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_165.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_165_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_165_pdf-failed-diff.png
new file mode 100644
index 000000000..d193c117d
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_165_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_165_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_165_pdf.png
new file mode 100644
index 000000000..ed9d1e5c7
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_165_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_180-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_180-expected.pdf
new file mode 120000
index 000000000..1f2022728
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_180-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_180.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_180-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_180-expected_pdf.png
new file mode 100644
index 000000000..a118c6d1c
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_180-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_180.pdf b/result_images/test_triangle_rotation_tick/CCW_True_180.pdf
new file mode 100644
index 000000000..eb9cb7f82
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_180.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_180_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_180_pdf-failed-diff.png
new file mode 100644
index 000000000..edb419963
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_180_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_180_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_180_pdf.png
new file mode 100644
index 000000000..7b731ae6b
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_180_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_195-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_195-expected.pdf
new file mode 120000
index 000000000..5516222f7
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_195-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_195.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_195-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_195-expected_pdf.png
new file mode 100644
index 000000000..d882d0119
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_195-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_195.pdf b/result_images/test_triangle_rotation_tick/CCW_True_195.pdf
new file mode 100644
index 000000000..a489659dd
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_195.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_195_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_195_pdf-failed-diff.png
new file mode 100644
index 000000000..fcb5fee50
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_195_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_195_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_195_pdf.png
new file mode 100644
index 000000000..01880c7f7
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_195_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_210-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_210-expected.pdf
new file mode 120000
index 000000000..836f5a772
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_210-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_210.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_210-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_210-expected_pdf.png
new file mode 100644
index 000000000..59612503e
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_210-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_210.pdf b/result_images/test_triangle_rotation_tick/CCW_True_210.pdf
new file mode 100644
index 000000000..310b31c0d
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_210.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_210_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_210_pdf-failed-diff.png
new file mode 100644
index 000000000..7fde1d64a
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_210_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_210_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_210_pdf.png
new file mode 100644
index 000000000..e5be76752
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_210_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_225-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_225-expected.pdf
new file mode 120000
index 000000000..3cfb88831
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_225-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_225.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_225-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_225-expected_pdf.png
new file mode 100644
index 000000000..2caed0bd9
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_225-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_225.pdf b/result_images/test_triangle_rotation_tick/CCW_True_225.pdf
new file mode 100644
index 000000000..ea68776d8
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_225.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_225_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_225_pdf-failed-diff.png
new file mode 100644
index 000000000..9d4070fda
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_225_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_225_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_225_pdf.png
new file mode 100644
index 000000000..941a1fb5a
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_225_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_240-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_240-expected.pdf
new file mode 120000
index 000000000..17b3bf059
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_240-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_240.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_240-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_240-expected_pdf.png
new file mode 100644
index 000000000..2e8ba0a28
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_240-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_240.pdf b/result_images/test_triangle_rotation_tick/CCW_True_240.pdf
new file mode 100644
index 000000000..78ffee56c
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_240.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_240_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_240_pdf-failed-diff.png
new file mode 100644
index 000000000..480df6bc0
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_240_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_240_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_240_pdf.png
new file mode 100644
index 000000000..822e62421
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_240_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_255-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_255-expected.pdf
new file mode 120000
index 000000000..bfc9e25c4
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_255-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_255.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_255-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_255-expected_pdf.png
new file mode 100644
index 000000000..d26fcf1e1
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_255-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_255.pdf b/result_images/test_triangle_rotation_tick/CCW_True_255.pdf
new file mode 100644
index 000000000..a2a4b4beb
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_255.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_255_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_255_pdf-failed-diff.png
new file mode 100644
index 000000000..cfd227144
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_255_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_255_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_255_pdf.png
new file mode 100644
index 000000000..53aa4c5e6
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_255_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_270-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_270-expected.pdf
new file mode 120000
index 000000000..470f0891f
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_270-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_270.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_270-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_270-expected_pdf.png
new file mode 100644
index 000000000..f17604be0
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_270-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_270.pdf b/result_images/test_triangle_rotation_tick/CCW_True_270.pdf
new file mode 100644
index 000000000..e718d1b7a
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_270.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_270_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_270_pdf-failed-diff.png
new file mode 100644
index 000000000..d6ce1c171
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_270_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_270_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_270_pdf.png
new file mode 100644
index 000000000..ead06ca84
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_270_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_285-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_285-expected.pdf
new file mode 120000
index 000000000..cb8bc418e
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_285-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_285.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_285-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_285-expected_pdf.png
new file mode 100644
index 000000000..879332b67
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_285-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_285.pdf b/result_images/test_triangle_rotation_tick/CCW_True_285.pdf
new file mode 100644
index 000000000..a272ca0b3
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_285.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_285_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_285_pdf-failed-diff.png
new file mode 100644
index 000000000..64c8fb2af
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_285_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_285_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_285_pdf.png
new file mode 100644
index 000000000..f03617411
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_285_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_30-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_30-expected.pdf
new file mode 120000
index 000000000..684ab74a0
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_30-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_30.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_30-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_30-expected_pdf.png
new file mode 100644
index 000000000..8f5c2d840
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_30-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_30.pdf b/result_images/test_triangle_rotation_tick/CCW_True_30.pdf
new file mode 100644
index 000000000..d7065998a
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_30.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_300-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_300-expected.pdf
new file mode 120000
index 000000000..db57a5dcf
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_300-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_300.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_300-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_300-expected_pdf.png
new file mode 100644
index 000000000..f8de30130
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_300-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_300.pdf b/result_images/test_triangle_rotation_tick/CCW_True_300.pdf
new file mode 100644
index 000000000..7a9b057f4
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_300.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_300_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_300_pdf-failed-diff.png
new file mode 100644
index 000000000..c53b42ca6
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_300_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_300_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_300_pdf.png
new file mode 100644
index 000000000..694627cf0
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_300_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_30_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_30_pdf-failed-diff.png
new file mode 100644
index 000000000..a35545c62
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_30_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_30_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_30_pdf.png
new file mode 100644
index 000000000..dedab1c37
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_30_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_315-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_315-expected.pdf
new file mode 120000
index 000000000..1d3d9478a
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_315-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_315.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_315-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_315-expected_pdf.png
new file mode 100644
index 000000000..c45b1687f
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_315-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_315.pdf b/result_images/test_triangle_rotation_tick/CCW_True_315.pdf
new file mode 100644
index 000000000..2631e471c
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_315.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_315_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_315_pdf-failed-diff.png
new file mode 100644
index 000000000..5e5b53357
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_315_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_315_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_315_pdf.png
new file mode 100644
index 000000000..dc4a7b856
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_315_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_330-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_330-expected.pdf
new file mode 120000
index 000000000..39a844996
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_330-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_330.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_330-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_330-expected_pdf.png
new file mode 100644
index 000000000..0b8d0b5bf
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_330-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_330.pdf b/result_images/test_triangle_rotation_tick/CCW_True_330.pdf
new file mode 100644
index 000000000..2ace601f4
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_330.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_330_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_330_pdf-failed-diff.png
new file mode 100644
index 000000000..fa46f6fa0
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_330_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_330_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_330_pdf.png
new file mode 100644
index 000000000..53efd5a85
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_330_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_345-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_345-expected.pdf
new file mode 120000
index 000000000..4d1cac10d
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_345-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_345.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_345-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_345-expected_pdf.png
new file mode 100644
index 000000000..2eb31bdb2
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_345-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_345.pdf b/result_images/test_triangle_rotation_tick/CCW_True_345.pdf
new file mode 100644
index 000000000..cdf6e84f5
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_345.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_345_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_345_pdf-failed-diff.png
new file mode 100644
index 000000000..235eb6111
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_345_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_345_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_345_pdf.png
new file mode 100644
index 000000000..6819eb2de
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_345_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_360-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_360-expected.pdf
new file mode 120000
index 000000000..cc07ec9d9
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_360-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_360.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_360-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_360-expected_pdf.png
new file mode 100644
index 000000000..53b961ce5
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_360-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_360.pdf b/result_images/test_triangle_rotation_tick/CCW_True_360.pdf
new file mode 100644
index 000000000..72b95c941
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_360.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_360_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_360_pdf-failed-diff.png
new file mode 100644
index 000000000..38edd0813
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_360_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_360_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_360_pdf.png
new file mode 100644
index 000000000..2a8c21fec
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_360_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_45-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_45-expected.pdf
new file mode 120000
index 000000000..a633e4a2b
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_45-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_45.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_45-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_45-expected_pdf.png
new file mode 100644
index 000000000..b2c209316
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_45-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_45.pdf b/result_images/test_triangle_rotation_tick/CCW_True_45.pdf
new file mode 100644
index 000000000..f991d413a
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_45.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_45_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_45_pdf-failed-diff.png
new file mode 100644
index 000000000..6462f6eca
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_45_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_45_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_45_pdf.png
new file mode 100644
index 000000000..04a92a2eb
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_45_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_60-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_60-expected.pdf
new file mode 120000
index 000000000..6817bc9e9
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_60-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_60.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_60-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_60-expected_pdf.png
new file mode 100644
index 000000000..c81341338
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_60-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_60.pdf b/result_images/test_triangle_rotation_tick/CCW_True_60.pdf
new file mode 100644
index 000000000..c61375a2b
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_60.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_60_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_60_pdf-failed-diff.png
new file mode 100644
index 000000000..83a0f12fb
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_60_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_60_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_60_pdf.png
new file mode 100644
index 000000000..4bbcbdf60
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_60_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_75-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_75-expected.pdf
new file mode 120000
index 000000000..0432cfcec
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_75-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_75.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_75-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_75-expected_pdf.png
new file mode 100644
index 000000000..b788ecab5
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_75-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_75.pdf b/result_images/test_triangle_rotation_tick/CCW_True_75.pdf
new file mode 100644
index 000000000..d5df8d9c0
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_75.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_75_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_75_pdf-failed-diff.png
new file mode 100644
index 000000000..0898ddf6b
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_75_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_75_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_75_pdf.png
new file mode 100644
index 000000000..7662b3ede
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_75_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_90-expected.pdf b/result_images/test_triangle_rotation_tick/CCW_True_90-expected.pdf
new file mode 120000
index 000000000..5183abed3
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CCW_True_90-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CCW_True_90.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_90-expected_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_90-expected_pdf.png
new file mode 100644
index 000000000..02c9db615
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_90-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_90.pdf b/result_images/test_triangle_rotation_tick/CCW_True_90.pdf
new file mode 100644
index 000000000..9667e6763
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_90.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_90_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CCW_True_90_pdf-failed-diff.png
new file mode 100644
index 000000000..5db305529
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_90_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CCW_True_90_pdf.png b/result_images/test_triangle_rotation_tick/CCW_True_90_pdf.png
new file mode 100644
index 000000000..6154eaf9b
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CCW_True_90_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_0-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_0-expected.pdf
new file mode 120000
index 000000000..979cea1e4
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_0-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_0.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_0-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_0-expected_pdf.png
new file mode 100644
index 000000000..39ba0da43
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_0-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_0.pdf b/result_images/test_triangle_rotation_tick/CW_False_0.pdf
new file mode 100644
index 000000000..8d4e1a547
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_0.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_0_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_0_pdf-failed-diff.png
new file mode 100644
index 000000000..779feb3bd
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_0_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_0_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_0_pdf.png
new file mode 100644
index 000000000..9d426db28
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_0_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_105-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_105-expected.pdf
new file mode 120000
index 000000000..3ad6c4be1
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_105-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_105.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_105-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_105-expected_pdf.png
new file mode 100644
index 000000000..324cc754d
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_105-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_105.pdf b/result_images/test_triangle_rotation_tick/CW_False_105.pdf
new file mode 100644
index 000000000..792cb947f
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_105.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_105_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_105_pdf-failed-diff.png
new file mode 100644
index 000000000..1ec5fb05b
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_105_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_105_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_105_pdf.png
new file mode 100644
index 000000000..c6760724c
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_105_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_120-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_120-expected.pdf
new file mode 120000
index 000000000..414989721
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_120-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_120.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_120-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_120-expected_pdf.png
new file mode 100644
index 000000000..27e173554
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_120-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_120.pdf b/result_images/test_triangle_rotation_tick/CW_False_120.pdf
new file mode 100644
index 000000000..f317c7200
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_120.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_120_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_120_pdf-failed-diff.png
new file mode 100644
index 000000000..3304b1ee4
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_120_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_120_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_120_pdf.png
new file mode 100644
index 000000000..74e1d9e67
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_120_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_135-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_135-expected.pdf
new file mode 120000
index 000000000..10156e34f
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_135-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_135.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_135-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_135-expected_pdf.png
new file mode 100644
index 000000000..9c5e6ce5f
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_135-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_135.pdf b/result_images/test_triangle_rotation_tick/CW_False_135.pdf
new file mode 100644
index 000000000..1a01cde81
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_135.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_135_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_135_pdf-failed-diff.png
new file mode 100644
index 000000000..27432d7e5
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_135_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_135_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_135_pdf.png
new file mode 100644
index 000000000..3547d9e7d
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_135_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_15-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_15-expected.pdf
new file mode 120000
index 000000000..6b2a125e4
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_15-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_15.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_15-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_15-expected_pdf.png
new file mode 100644
index 000000000..d0b8a673d
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_15-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_15.pdf b/result_images/test_triangle_rotation_tick/CW_False_15.pdf
new file mode 100644
index 000000000..ccea0e640
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_15.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_150-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_150-expected.pdf
new file mode 120000
index 000000000..18ff1be27
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_150-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_150.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_150-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_150-expected_pdf.png
new file mode 100644
index 000000000..6d465d7b8
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_150-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_150.pdf b/result_images/test_triangle_rotation_tick/CW_False_150.pdf
new file mode 100644
index 000000000..e2ac0205c
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_150.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_150_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_150_pdf-failed-diff.png
new file mode 100644
index 000000000..173784f57
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_150_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_150_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_150_pdf.png
new file mode 100644
index 000000000..562b05f89
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_150_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_15_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_15_pdf-failed-diff.png
new file mode 100644
index 000000000..c8f423ced
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_15_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_15_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_15_pdf.png
new file mode 100644
index 000000000..693f2d32f
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_15_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_165-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_165-expected.pdf
new file mode 120000
index 000000000..d147020ef
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_165-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_165.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_165-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_165-expected_pdf.png
new file mode 100644
index 000000000..9bf0bf1a1
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_165-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_165.pdf b/result_images/test_triangle_rotation_tick/CW_False_165.pdf
new file mode 100644
index 000000000..4a16cfb9f
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_165.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_165_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_165_pdf-failed-diff.png
new file mode 100644
index 000000000..c52cd357d
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_165_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_165_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_165_pdf.png
new file mode 100644
index 000000000..e10307023
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_165_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_180-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_180-expected.pdf
new file mode 120000
index 000000000..778b15431
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_180-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_180.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_180-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_180-expected_pdf.png
new file mode 100644
index 000000000..e8c34fd73
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_180-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_180.pdf b/result_images/test_triangle_rotation_tick/CW_False_180.pdf
new file mode 100644
index 000000000..db5700b92
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_180.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_180_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_180_pdf-failed-diff.png
new file mode 100644
index 000000000..f24f80785
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_180_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_180_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_180_pdf.png
new file mode 100644
index 000000000..f519f8a80
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_180_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_195-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_195-expected.pdf
new file mode 120000
index 000000000..acbf650d7
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_195-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_195.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_195-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_195-expected_pdf.png
new file mode 100644
index 000000000..c30b27739
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_195-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_195.pdf b/result_images/test_triangle_rotation_tick/CW_False_195.pdf
new file mode 100644
index 000000000..beb6a0923
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_195.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_195_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_195_pdf-failed-diff.png
new file mode 100644
index 000000000..cbdc3389a
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_195_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_195_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_195_pdf.png
new file mode 100644
index 000000000..05b0a4c3d
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_195_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_210-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_210-expected.pdf
new file mode 120000
index 000000000..5bcd1a02a
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_210-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_210.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_210-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_210-expected_pdf.png
new file mode 100644
index 000000000..d01149f91
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_210-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_210.pdf b/result_images/test_triangle_rotation_tick/CW_False_210.pdf
new file mode 100644
index 000000000..7f0bbdacc
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_210.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_210_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_210_pdf-failed-diff.png
new file mode 100644
index 000000000..cbc70c5f6
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_210_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_210_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_210_pdf.png
new file mode 100644
index 000000000..c217bf486
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_210_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_225-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_225-expected.pdf
new file mode 120000
index 000000000..e6fcc9117
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_225-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_225.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_225-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_225-expected_pdf.png
new file mode 100644
index 000000000..159dafaaf
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_225-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_225.pdf b/result_images/test_triangle_rotation_tick/CW_False_225.pdf
new file mode 100644
index 000000000..6b0dc627f
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_225.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_225_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_225_pdf-failed-diff.png
new file mode 100644
index 000000000..4723f1469
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_225_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_225_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_225_pdf.png
new file mode 100644
index 000000000..bf6fbe68d
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_225_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_240-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_240-expected.pdf
new file mode 120000
index 000000000..940151d33
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_240-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_240.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_240-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_240-expected_pdf.png
new file mode 100644
index 000000000..9877bc9a3
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_240-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_240.pdf b/result_images/test_triangle_rotation_tick/CW_False_240.pdf
new file mode 100644
index 000000000..716d18947
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_240.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_240_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_240_pdf-failed-diff.png
new file mode 100644
index 000000000..035088165
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_240_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_240_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_240_pdf.png
new file mode 100644
index 000000000..0845097d2
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_240_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_255-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_255-expected.pdf
new file mode 120000
index 000000000..3d17bebc9
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_255-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_255.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_255-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_255-expected_pdf.png
new file mode 100644
index 000000000..60b27189e
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_255-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_255.pdf b/result_images/test_triangle_rotation_tick/CW_False_255.pdf
new file mode 100644
index 000000000..bcf8b6430
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_255.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_255_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_255_pdf-failed-diff.png
new file mode 100644
index 000000000..c11dffbd5
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_255_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_255_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_255_pdf.png
new file mode 100644
index 000000000..2bbd67785
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_255_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_270-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_270-expected.pdf
new file mode 120000
index 000000000..08d38aa95
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_270-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_270.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_270-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_270-expected_pdf.png
new file mode 100644
index 000000000..7ce337aa0
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_270-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_270.pdf b/result_images/test_triangle_rotation_tick/CW_False_270.pdf
new file mode 100644
index 000000000..2524098b1
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_270.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_270_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_270_pdf-failed-diff.png
new file mode 100644
index 000000000..b74dc0c09
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_270_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_270_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_270_pdf.png
new file mode 100644
index 000000000..09d3028db
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_270_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_285-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_285-expected.pdf
new file mode 120000
index 000000000..fc48bb57f
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_285-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_285.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_285-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_285-expected_pdf.png
new file mode 100644
index 000000000..c56f49ece
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_285-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_285.pdf b/result_images/test_triangle_rotation_tick/CW_False_285.pdf
new file mode 100644
index 000000000..1621690ae
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_285.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_285_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_285_pdf-failed-diff.png
new file mode 100644
index 000000000..530dfe3ce
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_285_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_285_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_285_pdf.png
new file mode 100644
index 000000000..5d1ae4611
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_285_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_30-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_30-expected.pdf
new file mode 120000
index 000000000..8c97e387d
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_30-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_30.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_30-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_30-expected_pdf.png
new file mode 100644
index 000000000..16163c0e6
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_30-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_30.pdf b/result_images/test_triangle_rotation_tick/CW_False_30.pdf
new file mode 100644
index 000000000..b605347fe
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_30.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_300-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_300-expected.pdf
new file mode 120000
index 000000000..3a4efd805
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_300-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_300.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_300-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_300-expected_pdf.png
new file mode 100644
index 000000000..3d2acff44
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_300-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_300.pdf b/result_images/test_triangle_rotation_tick/CW_False_300.pdf
new file mode 100644
index 000000000..7b0528ed8
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_300.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_300_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_300_pdf-failed-diff.png
new file mode 100644
index 000000000..06c5e2a9f
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_300_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_300_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_300_pdf.png
new file mode 100644
index 000000000..e5f4be050
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_300_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_30_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_30_pdf-failed-diff.png
new file mode 100644
index 000000000..694ddee84
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_30_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_30_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_30_pdf.png
new file mode 100644
index 000000000..fa98ef86b
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_30_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_315-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_315-expected.pdf
new file mode 120000
index 000000000..39c79728a
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_315-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_315.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_315-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_315-expected_pdf.png
new file mode 100644
index 000000000..3fa027825
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_315-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_315.pdf b/result_images/test_triangle_rotation_tick/CW_False_315.pdf
new file mode 100644
index 000000000..21b6caa7a
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_315.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_315_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_315_pdf-failed-diff.png
new file mode 100644
index 000000000..69b0fdcc8
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_315_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_315_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_315_pdf.png
new file mode 100644
index 000000000..64f861268
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_315_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_330-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_330-expected.pdf
new file mode 120000
index 000000000..678b8a8d3
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_330-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_330.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_330-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_330-expected_pdf.png
new file mode 100644
index 000000000..7087ab579
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_330-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_330.pdf b/result_images/test_triangle_rotation_tick/CW_False_330.pdf
new file mode 100644
index 000000000..2409e5e7a
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_330.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_330_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_330_pdf-failed-diff.png
new file mode 100644
index 000000000..8fc87be78
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_330_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_330_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_330_pdf.png
new file mode 100644
index 000000000..daf4fbf04
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_330_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_345-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_345-expected.pdf
new file mode 120000
index 000000000..a4c089007
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_345-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_345.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_345-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_345-expected_pdf.png
new file mode 100644
index 000000000..7bf771138
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_345-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_345.pdf b/result_images/test_triangle_rotation_tick/CW_False_345.pdf
new file mode 100644
index 000000000..365489a1a
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_345.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_345_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_345_pdf-failed-diff.png
new file mode 100644
index 000000000..5044964f7
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_345_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_345_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_345_pdf.png
new file mode 100644
index 000000000..85e6e1c9b
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_345_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_360-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_360-expected.pdf
new file mode 120000
index 000000000..b44df6299
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_360-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_360.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_360-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_360-expected_pdf.png
new file mode 100644
index 000000000..39ba0da43
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_360-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_360.pdf b/result_images/test_triangle_rotation_tick/CW_False_360.pdf
new file mode 100644
index 000000000..8d4e1a547
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_360.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_360_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_360_pdf-failed-diff.png
new file mode 100644
index 000000000..779feb3bd
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_360_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_360_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_360_pdf.png
new file mode 100644
index 000000000..9d426db28
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_360_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_45-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_45-expected.pdf
new file mode 120000
index 000000000..1ac058c14
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_45-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_45.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_45-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_45-expected_pdf.png
new file mode 100644
index 000000000..f45bdc42a
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_45-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_45.pdf b/result_images/test_triangle_rotation_tick/CW_False_45.pdf
new file mode 100644
index 000000000..68af5c875
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_45.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_45_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_45_pdf-failed-diff.png
new file mode 100644
index 000000000..09c59df05
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_45_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_45_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_45_pdf.png
new file mode 100644
index 000000000..99ee57f37
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_45_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_60-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_60-expected.pdf
new file mode 120000
index 000000000..4c1d7e8b4
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_60-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_60.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_60-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_60-expected_pdf.png
new file mode 100644
index 000000000..24592725e
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_60-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_60.pdf b/result_images/test_triangle_rotation_tick/CW_False_60.pdf
new file mode 100644
index 000000000..b60457ea1
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_60.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_60_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_60_pdf-failed-diff.png
new file mode 100644
index 000000000..e3a1a8226
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_60_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_60_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_60_pdf.png
new file mode 100644
index 000000000..6cd660689
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_60_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_75-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_75-expected.pdf
new file mode 120000
index 000000000..917509b3a
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_75-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_75.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_75-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_75-expected_pdf.png
new file mode 100644
index 000000000..834eca7fd
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_75-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_75.pdf b/result_images/test_triangle_rotation_tick/CW_False_75.pdf
new file mode 100644
index 000000000..a99c8270c
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_75.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_75_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_75_pdf-failed-diff.png
new file mode 100644
index 000000000..dec902efa
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_75_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_75_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_75_pdf.png
new file mode 100644
index 000000000..0986a5393
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_75_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_90-expected.pdf b/result_images/test_triangle_rotation_tick/CW_False_90-expected.pdf
new file mode 120000
index 000000000..bd5b089e7
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_False_90-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_False_90.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_False_90-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_90-expected_pdf.png
new file mode 100644
index 000000000..39275a4f0
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_90-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_90.pdf b/result_images/test_triangle_rotation_tick/CW_False_90.pdf
new file mode 100644
index 000000000..aa70ab037
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_90.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_90_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_False_90_pdf-failed-diff.png
new file mode 100644
index 000000000..8b1f6eb6d
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_90_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_False_90_pdf.png b/result_images/test_triangle_rotation_tick/CW_False_90_pdf.png
new file mode 100644
index 000000000..c4663fecb
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_False_90_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_0-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_0-expected.pdf
new file mode 120000
index 000000000..818be4b1b
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_0-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_0.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_0-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_0-expected_pdf.png
new file mode 100644
index 000000000..1c3c144ee
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_0-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_0.pdf b/result_images/test_triangle_rotation_tick/CW_True_0.pdf
new file mode 100644
index 000000000..96c93513c
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_0.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_0_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_0_pdf-failed-diff.png
new file mode 100644
index 000000000..8e00eb0d1
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_0_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_0_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_0_pdf.png
new file mode 100644
index 000000000..018811913
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_0_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_105-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_105-expected.pdf
new file mode 120000
index 000000000..c4f3e0f40
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_105-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_105.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_105-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_105-expected_pdf.png
new file mode 100644
index 000000000..4ab05bd36
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_105-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_105.pdf b/result_images/test_triangle_rotation_tick/CW_True_105.pdf
new file mode 100644
index 000000000..699e3aec6
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_105.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_105_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_105_pdf-failed-diff.png
new file mode 100644
index 000000000..9045b19ae
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_105_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_105_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_105_pdf.png
new file mode 100644
index 000000000..aff7165b9
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_105_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_120-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_120-expected.pdf
new file mode 120000
index 000000000..7b0afd0a8
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_120-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_120.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_120-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_120-expected_pdf.png
new file mode 100644
index 000000000..114d6a527
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_120-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_120.pdf b/result_images/test_triangle_rotation_tick/CW_True_120.pdf
new file mode 100644
index 000000000..fe0bba0b4
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_120.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_120_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_120_pdf-failed-diff.png
new file mode 100644
index 000000000..11eda193b
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_120_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_120_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_120_pdf.png
new file mode 100644
index 000000000..ddadf1569
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_120_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_135-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_135-expected.pdf
new file mode 120000
index 000000000..b0f123b24
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_135-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_135.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_135-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_135-expected_pdf.png
new file mode 100644
index 000000000..570906285
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_135-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_135.pdf b/result_images/test_triangle_rotation_tick/CW_True_135.pdf
new file mode 100644
index 000000000..3e09f0282
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_135.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_135_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_135_pdf-failed-diff.png
new file mode 100644
index 000000000..8ff1d7062
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_135_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_135_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_135_pdf.png
new file mode 100644
index 000000000..1c26911bc
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_135_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_15-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_15-expected.pdf
new file mode 120000
index 000000000..4029203f5
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_15-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_15.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_15-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_15-expected_pdf.png
new file mode 100644
index 000000000..e625305c2
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_15-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_15.pdf b/result_images/test_triangle_rotation_tick/CW_True_15.pdf
new file mode 100644
index 000000000..27caa94e7
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_15.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_150-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_150-expected.pdf
new file mode 120000
index 000000000..bea9a9d43
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_150-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_150.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_150-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_150-expected_pdf.png
new file mode 100644
index 000000000..b2182a274
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_150-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_150.pdf b/result_images/test_triangle_rotation_tick/CW_True_150.pdf
new file mode 100644
index 000000000..b7c97b135
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_150.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_150_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_150_pdf-failed-diff.png
new file mode 100644
index 000000000..21f600a03
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_150_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_150_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_150_pdf.png
new file mode 100644
index 000000000..6bd87724e
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_150_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_15_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_15_pdf-failed-diff.png
new file mode 100644
index 000000000..568ebd8a5
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_15_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_15_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_15_pdf.png
new file mode 100644
index 000000000..9570f214b
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_15_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_165-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_165-expected.pdf
new file mode 120000
index 000000000..01050dcb3
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_165-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_165.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_165-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_165-expected_pdf.png
new file mode 100644
index 000000000..2480785f5
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_165-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_165.pdf b/result_images/test_triangle_rotation_tick/CW_True_165.pdf
new file mode 100644
index 000000000..25a34f33f
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_165.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_165_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_165_pdf-failed-diff.png
new file mode 100644
index 000000000..dabbe5ad8
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_165_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_165_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_165_pdf.png
new file mode 100644
index 000000000..e8be66edc
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_165_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_180-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_180-expected.pdf
new file mode 120000
index 000000000..c1ab41713
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_180-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_180.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_180-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_180-expected_pdf.png
new file mode 100644
index 000000000..bb528cc6c
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_180-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_180.pdf b/result_images/test_triangle_rotation_tick/CW_True_180.pdf
new file mode 100644
index 000000000..20282edf1
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_180.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_180_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_180_pdf-failed-diff.png
new file mode 100644
index 000000000..8784f07e3
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_180_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_180_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_180_pdf.png
new file mode 100644
index 000000000..094ab55b0
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_180_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_195-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_195-expected.pdf
new file mode 120000
index 000000000..b67676fcf
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_195-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_195.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_195-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_195-expected_pdf.png
new file mode 100644
index 000000000..6fbd397e6
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_195-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_195.pdf b/result_images/test_triangle_rotation_tick/CW_True_195.pdf
new file mode 100644
index 000000000..79edf01c3
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_195.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_195_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_195_pdf-failed-diff.png
new file mode 100644
index 000000000..a318147c1
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_195_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_195_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_195_pdf.png
new file mode 100644
index 000000000..26fbff1fc
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_195_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_210-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_210-expected.pdf
new file mode 120000
index 000000000..76fcffbbf
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_210-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_210.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_210-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_210-expected_pdf.png
new file mode 100644
index 000000000..7be9d784a
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_210-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_210.pdf b/result_images/test_triangle_rotation_tick/CW_True_210.pdf
new file mode 100644
index 000000000..723c47856
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_210.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_210_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_210_pdf-failed-diff.png
new file mode 100644
index 000000000..21b6386b7
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_210_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_210_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_210_pdf.png
new file mode 100644
index 000000000..36346b43f
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_210_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_225-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_225-expected.pdf
new file mode 120000
index 000000000..10b3968e6
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_225-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_225.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_225-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_225-expected_pdf.png
new file mode 100644
index 000000000..67d7eb016
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_225-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_225.pdf b/result_images/test_triangle_rotation_tick/CW_True_225.pdf
new file mode 100644
index 000000000..8638252c1
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_225.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_225_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_225_pdf-failed-diff.png
new file mode 100644
index 000000000..c1d528e84
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_225_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_225_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_225_pdf.png
new file mode 100644
index 000000000..ea67984c3
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_225_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_240-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_240-expected.pdf
new file mode 120000
index 000000000..622226c3e
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_240-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_240.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_240-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_240-expected_pdf.png
new file mode 100644
index 000000000..59d7a95f0
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_240-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_240.pdf b/result_images/test_triangle_rotation_tick/CW_True_240.pdf
new file mode 100644
index 000000000..b6775186f
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_240.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_240_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_240_pdf-failed-diff.png
new file mode 100644
index 000000000..508e9ba3c
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_240_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_240_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_240_pdf.png
new file mode 100644
index 000000000..da4f0f0fc
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_240_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_255-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_255-expected.pdf
new file mode 120000
index 000000000..e165c9993
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_255-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_255.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_255-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_255-expected_pdf.png
new file mode 100644
index 000000000..9abf59635
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_255-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_255.pdf b/result_images/test_triangle_rotation_tick/CW_True_255.pdf
new file mode 100644
index 000000000..bef076775
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_255.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_255_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_255_pdf-failed-diff.png
new file mode 100644
index 000000000..8a5e0559b
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_255_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_255_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_255_pdf.png
new file mode 100644
index 000000000..518ca67c0
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_255_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_270-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_270-expected.pdf
new file mode 120000
index 000000000..8e672913d
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_270-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_270.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_270-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_270-expected_pdf.png
new file mode 100644
index 000000000..adca99df0
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_270-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_270.pdf b/result_images/test_triangle_rotation_tick/CW_True_270.pdf
new file mode 100644
index 000000000..46bd67914
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_270.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_270_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_270_pdf-failed-diff.png
new file mode 100644
index 000000000..96c9633eb
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_270_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_270_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_270_pdf.png
new file mode 100644
index 000000000..cd05db1ab
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_270_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_285-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_285-expected.pdf
new file mode 120000
index 000000000..0aa8b2fed
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_285-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_285.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_285-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_285-expected_pdf.png
new file mode 100644
index 000000000..f7457500f
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_285-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_285.pdf b/result_images/test_triangle_rotation_tick/CW_True_285.pdf
new file mode 100644
index 000000000..48a5e835a
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_285.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_285_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_285_pdf-failed-diff.png
new file mode 100644
index 000000000..49bfbc738
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_285_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_285_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_285_pdf.png
new file mode 100644
index 000000000..dbfe641aa
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_285_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_30-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_30-expected.pdf
new file mode 120000
index 000000000..1a1c81d22
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_30-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_30.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_30-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_30-expected_pdf.png
new file mode 100644
index 000000000..ebcaede56
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_30-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_30.pdf b/result_images/test_triangle_rotation_tick/CW_True_30.pdf
new file mode 100644
index 000000000..834160749
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_30.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_300-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_300-expected.pdf
new file mode 120000
index 000000000..1ce0f6980
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_300-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_300.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_300-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_300-expected_pdf.png
new file mode 100644
index 000000000..70baa8d87
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_300-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_300.pdf b/result_images/test_triangle_rotation_tick/CW_True_300.pdf
new file mode 100644
index 000000000..e2c1bc553
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_300.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_300_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_300_pdf-failed-diff.png
new file mode 100644
index 000000000..0d0f3d6f0
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_300_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_300_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_300_pdf.png
new file mode 100644
index 000000000..34eb2c76e
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_300_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_30_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_30_pdf-failed-diff.png
new file mode 100644
index 000000000..ed12ce558
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_30_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_30_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_30_pdf.png
new file mode 100644
index 000000000..f61d60bf2
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_30_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_315-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_315-expected.pdf
new file mode 120000
index 000000000..36f6c72af
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_315-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_315.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_315-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_315-expected_pdf.png
new file mode 100644
index 000000000..2aa9856a9
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_315-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_315.pdf b/result_images/test_triangle_rotation_tick/CW_True_315.pdf
new file mode 100644
index 000000000..f3d0b55c8
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_315.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_315_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_315_pdf-failed-diff.png
new file mode 100644
index 000000000..0d2da2688
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_315_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_315_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_315_pdf.png
new file mode 100644
index 000000000..e93af9013
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_315_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_330-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_330-expected.pdf
new file mode 120000
index 000000000..2bbbd9803
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_330-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_330.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_330-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_330-expected_pdf.png
new file mode 100644
index 000000000..954671dc3
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_330-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_330.pdf b/result_images/test_triangle_rotation_tick/CW_True_330.pdf
new file mode 100644
index 000000000..c3f37fd52
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_330.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_330_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_330_pdf-failed-diff.png
new file mode 100644
index 000000000..b1d0c4627
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_330_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_330_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_330_pdf.png
new file mode 100644
index 000000000..bc96f2ed9
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_330_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_345-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_345-expected.pdf
new file mode 120000
index 000000000..fb2e45cb1
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_345-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_345.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_345-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_345-expected_pdf.png
new file mode 100644
index 000000000..06fed454f
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_345-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_345.pdf b/result_images/test_triangle_rotation_tick/CW_True_345.pdf
new file mode 100644
index 000000000..626f9b0c6
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_345.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_345_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_345_pdf-failed-diff.png
new file mode 100644
index 000000000..12464442e
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_345_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_345_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_345_pdf.png
new file mode 100644
index 000000000..9f59cd41f
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_345_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_360-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_360-expected.pdf
new file mode 120000
index 000000000..a9e736c19
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_360-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_360.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_360-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_360-expected_pdf.png
new file mode 100644
index 000000000..1c3c144ee
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_360-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_360.pdf b/result_images/test_triangle_rotation_tick/CW_True_360.pdf
new file mode 100644
index 000000000..96c93513c
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_360.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_360_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_360_pdf-failed-diff.png
new file mode 100644
index 000000000..8e00eb0d1
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_360_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_360_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_360_pdf.png
new file mode 100644
index 000000000..018811913
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_360_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_45-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_45-expected.pdf
new file mode 120000
index 000000000..c92ef13bb
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_45-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_45.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_45-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_45-expected_pdf.png
new file mode 100644
index 000000000..247e5f208
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_45-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_45.pdf b/result_images/test_triangle_rotation_tick/CW_True_45.pdf
new file mode 100644
index 000000000..fcd15ea90
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_45.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_45_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_45_pdf-failed-diff.png
new file mode 100644
index 000000000..bb22c95e4
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_45_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_45_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_45_pdf.png
new file mode 100644
index 000000000..95b6c4079
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_45_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_60-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_60-expected.pdf
new file mode 120000
index 000000000..1a5ab5b00
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_60-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_60.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_60-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_60-expected_pdf.png
new file mode 100644
index 000000000..f9f4beb1a
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_60-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_60.pdf b/result_images/test_triangle_rotation_tick/CW_True_60.pdf
new file mode 100644
index 000000000..88a85c411
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_60.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_60_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_60_pdf-failed-diff.png
new file mode 100644
index 000000000..caa85af56
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_60_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_60_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_60_pdf.png
new file mode 100644
index 000000000..b66ab7b07
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_60_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_75-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_75-expected.pdf
new file mode 120000
index 000000000..a267e9852
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_75-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_75.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_75-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_75-expected_pdf.png
new file mode 100644
index 000000000..c0baee07c
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_75-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_75.pdf b/result_images/test_triangle_rotation_tick/CW_True_75.pdf
new file mode 100644
index 000000000..6b3fd1443
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_75.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_75_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_75_pdf-failed-diff.png
new file mode 100644
index 000000000..64993eb66
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_75_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_75_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_75_pdf.png
new file mode 100644
index 000000000..89daaa4e7
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_75_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_90-expected.pdf b/result_images/test_triangle_rotation_tick/CW_True_90-expected.pdf
new file mode 120000
index 000000000..45403a638
--- /dev/null
+++ b/result_images/test_triangle_rotation_tick/CW_True_90-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_triangle_rotation_tick/CW_True_90.pdf
\ No newline at end of file
diff --git a/result_images/test_triangle_rotation_tick/CW_True_90-expected_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_90-expected_pdf.png
new file mode 100644
index 000000000..addaf8a2b
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_90-expected_pdf.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_90.pdf b/result_images/test_triangle_rotation_tick/CW_True_90.pdf
new file mode 100644
index 000000000..7be55b97c
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_90.pdf differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_90_pdf-failed-diff.png b/result_images/test_triangle_rotation_tick/CW_True_90_pdf-failed-diff.png
new file mode 100644
index 000000000..e3fcfa81c
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_90_pdf-failed-diff.png differ
diff --git a/result_images/test_triangle_rotation_tick/CW_True_90_pdf.png b/result_images/test_triangle_rotation_tick/CW_True_90_pdf.png
new file mode 100644
index 000000000..4f0c6fe06
Binary files /dev/null and b/result_images/test_triangle_rotation_tick/CW_True_90_pdf.png differ
diff --git a/result_images/test_tribin/base-expected.pdf b/result_images/test_tribin/base-expected.pdf
new file mode 120000
index 000000000..62c2c181a
--- /dev/null
+++ b/result_images/test_tribin/base-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_tribin/base.pdf
\ No newline at end of file
diff --git a/result_images/test_tribin/base-expected_pdf.png b/result_images/test_tribin/base-expected_pdf.png
new file mode 100644
index 000000000..1da30a5dc
Binary files /dev/null and b/result_images/test_tribin/base-expected_pdf.png differ
diff --git a/result_images/test_tribin/base.pdf b/result_images/test_tribin/base.pdf
new file mode 100644
index 000000000..a9e00ab3e
Binary files /dev/null and b/result_images/test_tribin/base.pdf differ
diff --git a/result_images/test_tribin/base_pdf-failed-diff.png b/result_images/test_tribin/base_pdf-failed-diff.png
new file mode 100644
index 000000000..95c21f290
Binary files /dev/null and b/result_images/test_tribin/base_pdf-failed-diff.png differ
diff --git a/result_images/test_tribin/base_pdf.png b/result_images/test_tribin/base_pdf.png
new file mode 100644
index 000000000..ffbfa1264
Binary files /dev/null and b/result_images/test_tribin/base_pdf.png differ
diff --git a/result_images/test_tribin/extent-expected.pdf b/result_images/test_tribin/extent-expected.pdf
new file mode 120000
index 000000000..2e3d0ef45
--- /dev/null
+++ b/result_images/test_tribin/extent-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_tribin/extent.pdf
\ No newline at end of file
diff --git a/result_images/test_tribin/extent-expected_pdf.png b/result_images/test_tribin/extent-expected_pdf.png
new file mode 100644
index 000000000..ccd31d1e1
Binary files /dev/null and b/result_images/test_tribin/extent-expected_pdf.png differ
diff --git a/result_images/test_tribin/extent.pdf b/result_images/test_tribin/extent.pdf
new file mode 100644
index 000000000..10d959e43
Binary files /dev/null and b/result_images/test_tribin/extent.pdf differ
diff --git a/result_images/test_tribin/extent_pdf-failed-diff.png b/result_images/test_tribin/extent_pdf-failed-diff.png
new file mode 100644
index 000000000..95c21f290
Binary files /dev/null and b/result_images/test_tribin/extent_pdf-failed-diff.png differ
diff --git a/result_images/test_tribin/extent_pdf.png b/result_images/test_tribin/extent_pdf.png
new file mode 100644
index 000000000..586ebbb0e
Binary files /dev/null and b/result_images/test_tribin/extent_pdf.png differ
diff --git a/result_images/test_tribin/given_triangles-expected.pdf b/result_images/test_tribin/given_triangles-expected.pdf
new file mode 120000
index 000000000..8e964f3c5
--- /dev/null
+++ b/result_images/test_tribin/given_triangles-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_tribin/given_triangles.pdf
\ No newline at end of file
diff --git a/result_images/test_tribin/given_triangles-expected_pdf.png b/result_images/test_tribin/given_triangles-expected_pdf.png
new file mode 100644
index 000000000..0c660e9d7
Binary files /dev/null and b/result_images/test_tribin/given_triangles-expected_pdf.png differ
diff --git a/result_images/test_tribin/given_triangles.pdf b/result_images/test_tribin/given_triangles.pdf
new file mode 100644
index 000000000..ce2c02258
Binary files /dev/null and b/result_images/test_tribin/given_triangles.pdf differ
diff --git a/result_images/test_tribin/given_triangles_pdf-failed-diff.png b/result_images/test_tribin/given_triangles_pdf-failed-diff.png
new file mode 100644
index 000000000..d120125f1
Binary files /dev/null and b/result_images/test_tribin/given_triangles_pdf-failed-diff.png differ
diff --git a/result_images/test_tribin/given_triangles_pdf.png b/result_images/test_tribin/given_triangles_pdf.png
new file mode 100644
index 000000000..74925bf42
Binary files /dev/null and b/result_images/test_tribin/given_triangles_pdf.png differ
diff --git a/result_images/test_tribin/ternary_lim-expected.pdf b/result_images/test_tribin/ternary_lim-expected.pdf
new file mode 120000
index 000000000..4f82789f0
--- /dev/null
+++ b/result_images/test_tribin/ternary_lim-expected.pdf
@@ -0,0 +1 @@
+/Users/vanelter@qut.edu.au/Documents/UltraPlot/mpltern/tests/baseline_images/test_tribin/ternary_lim.pdf
\ No newline at end of file
diff --git a/result_images/test_tribin/ternary_lim-expected_pdf.png b/result_images/test_tribin/ternary_lim-expected_pdf.png
new file mode 100644
index 000000000..1cdea5e05
Binary files /dev/null and b/result_images/test_tribin/ternary_lim-expected_pdf.png differ
diff --git a/result_images/test_tribin/ternary_lim.pdf b/result_images/test_tribin/ternary_lim.pdf
new file mode 100644
index 000000000..8ff08d765
Binary files /dev/null and b/result_images/test_tribin/ternary_lim.pdf differ
diff --git a/result_images/test_tribin/ternary_lim_pdf-failed-diff.png b/result_images/test_tribin/ternary_lim_pdf-failed-diff.png
new file mode 100644
index 000000000..78f42339c
Binary files /dev/null and b/result_images/test_tribin/ternary_lim_pdf-failed-diff.png differ
diff --git a/result_images/test_tribin/ternary_lim_pdf.png b/result_images/test_tribin/ternary_lim_pdf.png
new file mode 100644
index 000000000..e5b5d2f6c
Binary files /dev/null and b/result_images/test_tribin/ternary_lim_pdf.png differ
diff --git a/result_images/test_tribin/test_bins_and_norm[pdf]-expected.pdf b/result_images/test_tribin/test_bins_and_norm[pdf]-expected.pdf
new file mode 100644
index 000000000..40b5c70c1
Binary files /dev/null and b/result_images/test_tribin/test_bins_and_norm[pdf]-expected.pdf differ
diff --git a/result_images/test_tribin/test_bins_and_norm[pdf]-expected_pdf.png b/result_images/test_tribin/test_bins_and_norm[pdf]-expected_pdf.png
new file mode 100644
index 000000000..9a79842fc
Binary files /dev/null and b/result_images/test_tribin/test_bins_and_norm[pdf]-expected_pdf.png differ
diff --git a/result_images/test_tribin/test_bins_and_norm[pdf].pdf b/result_images/test_tribin/test_bins_and_norm[pdf].pdf
new file mode 100644
index 000000000..40b5c70c1
Binary files /dev/null and b/result_images/test_tribin/test_bins_and_norm[pdf].pdf differ
diff --git a/result_images/test_tribin/test_bins_and_norm[pdf]_pdf.png b/result_images/test_tribin/test_bins_and_norm[pdf]_pdf.png
new file mode 100644
index 000000000..9a79842fc
Binary files /dev/null and b/result_images/test_tribin/test_bins_and_norm[pdf]_pdf.png differ
diff --git a/result_images/test_tribin/test_ternary_normalization[pdf]-expected.pdf b/result_images/test_tribin/test_ternary_normalization[pdf]-expected.pdf
new file mode 100644
index 000000000..d3dc55541
Binary files /dev/null and b/result_images/test_tribin/test_ternary_normalization[pdf]-expected.pdf differ
diff --git a/result_images/test_tribin/test_ternary_normalization[pdf]-expected_pdf.png b/result_images/test_tribin/test_ternary_normalization[pdf]-expected_pdf.png
new file mode 100644
index 000000000..5b56b62c6
Binary files /dev/null and b/result_images/test_tribin/test_ternary_normalization[pdf]-expected_pdf.png differ
diff --git a/result_images/test_tribin/test_ternary_normalization[pdf].pdf b/result_images/test_tribin/test_ternary_normalization[pdf].pdf
new file mode 100644
index 000000000..d3dc55541
Binary files /dev/null and b/result_images/test_tribin/test_ternary_normalization[pdf].pdf differ
diff --git a/result_images/test_tribin/test_ternary_normalization[pdf]_pdf.png b/result_images/test_tribin/test_ternary_normalization[pdf]_pdf.png
new file mode 100644
index 000000000..5b56b62c6
Binary files /dev/null and b/result_images/test_tribin/test_ternary_normalization[pdf]_pdf.png differ
diff --git a/result_images/test_tribin/test_weights[pdf]-expected.pdf b/result_images/test_tribin/test_weights[pdf]-expected.pdf
new file mode 100644
index 000000000..ee27ff152
Binary files /dev/null and b/result_images/test_tribin/test_weights[pdf]-expected.pdf differ
diff --git a/result_images/test_tribin/test_weights[pdf]-expected_pdf.png b/result_images/test_tribin/test_weights[pdf]-expected_pdf.png
new file mode 100644
index 000000000..3b0a293b1
Binary files /dev/null and b/result_images/test_tribin/test_weights[pdf]-expected_pdf.png differ
diff --git a/result_images/test_tribin/test_weights[pdf].pdf b/result_images/test_tribin/test_weights[pdf].pdf
new file mode 100644
index 000000000..ee27ff152
Binary files /dev/null and b/result_images/test_tribin/test_weights[pdf].pdf differ
diff --git a/result_images/test_tribin/test_weights[pdf]_pdf.png b/result_images/test_tribin/test_weights[pdf]_pdf.png
new file mode 100644
index 000000000..3b0a293b1
Binary files /dev/null and b/result_images/test_tribin/test_weights[pdf]_pdf.png differ
diff --git a/test.png b/test.png
new file mode 100644
index 000000000..6751e8df6
Binary files /dev/null and b/test.png differ
diff --git a/ultraplot/axes/plot.py b/ultraplot/axes/plot.py
index b24fd98c9..f661e3d5a 100644
--- a/ultraplot/axes/plot.py
+++ b/ultraplot/axes/plot.py
@@ -10,7 +10,7 @@
import sys
from collections.abc import Callable, Iterable
from numbers import Integral, Number
-from typing import Any, Iterable, Optional, Union
+from typing import Any, Iterable, Mapping, Optional, Sequence, Union
import matplotlib as mpl
import matplotlib.artist as martist
@@ -205,6 +205,83 @@
"""
docstring._snippet_manager["plot.curved_quiver"] = _curved_quiver_docstring
+
+_sankey_docstring = """
+Draw a Sankey diagram.
+
+Parameters
+----------
+flows : sequence of float or flow tuples
+ If a numeric sequence, use Matplotlib's Sankey implementation.
+ Otherwise, expect flow tuples or dicts describing (source, target, value).
+nodes : sequence or dict, optional
+ Node identifiers or dicts with ``id``/``label``/``color`` keys. If omitted,
+ nodes are inferred from flow sources/targets.
+labels : sequence of str, optional
+ Labels for each flow in Matplotlib's Sankey mode.
+orientations : sequence of int, optional
+ Flow orientations (-1: down, 0: right, 1: up) for Matplotlib's Sankey.
+pathlengths : float or sequence of float, optional
+ Path lengths for each flow in Matplotlib's Sankey.
+trunklength : float, optional
+ Length of the trunk between the input and output flows.
+patchlabel : str, optional
+ Label for the main patch in Matplotlib's Sankey mode.
+scale, unit, format, gap, radius, shoulder, offset, head_angle, margin, tolerance : optional
+ Passed to `matplotlib.sankey.Sankey`.
+prior : int, optional
+ Index of a prior diagram to connect to.
+connect : (int, int), optional
+ Flow indices for the prior and current diagram connection.
+rotation : float, optional
+ Rotation angle in degrees.
+node_kw, flow_kw, label_kw : dict-like, optional
+ Style dictionaries for the layered Sankey renderer.
+node_label_kw, flow_label_kw : dict-like, optional
+ Label style dictionaries for node and flow labels in layered mode.
+node_label_box : bool or dict-like, optional
+ If ``True``, draw a rounded box behind node labels. If dict-like, used as
+ the ``bbox`` argument for node label styling.
+style : {'budget', 'pastel', 'mono'}, optional
+ Built-in styling presets for layered mode.
+node_order : sequence, optional
+ Explicit node ordering for layered mode.
+layer_order : sequence, optional
+ Explicit layer ordering for layered mode.
+group_cycle : sequence, optional
+ Cycle for flow group colors (defaults to flow cycle).
+flow_other : float, optional
+ Aggregate flows below this threshold into a single ``other_label``.
+other_label : str, optional
+ Label for the aggregated flow target.
+value_format : str or callable, optional
+ Formatter for flow labels when not explicitly provided.
+node_label_outside : {'auto', True, False}, optional
+ Place node labels outside narrow nodes.
+node_label_offset : float, optional
+ Offset for outside node labels (axes-relative units).
+flow_sort : bool, optional
+ Whether to sort flows by target position to reduce crossings.
+flow_label_pos : float, optional
+ Horizontal placement for single flow labels (0 to 1 along the ribbon).
+ When flow labels overlap, positions are redistributed between 0.25 and 0.75.
+node_labels, flow_labels : bool, optional
+ Whether to draw node or flow labels in layered mode.
+align : {'center', 'top', 'bottom'}, optional
+ Vertical alignment for nodes within each layer in layered mode.
+layers : dict-like, optional
+ Manual layer assignments for nodes in layered mode.
+**kwargs
+ Patch properties passed to `matplotlib.sankey.Sankey.add` in Matplotlib mode.
+
+Returns
+-------
+matplotlib.sankey.Sankey or list or SankeyDiagram
+ The Sankey diagram instance, or a list for multi-diagram usage. For layered
+ mode, returns a `~ultraplot.axes.plot_types.sankey.SankeyDiagram`.
+"""
+
+docstring._snippet_manager["plot.sankey"] = _sankey_docstring
# Auto colorbar and legend docstring
_guide_docstring = """
colorbar : bool, int, or str, optional
@@ -1849,6 +1926,169 @@ def curved_quiver(
stream_container = CurvedQuiverSet(lc, ac)
return stream_container
+ @docstring._snippet_manager
+ def sankey(
+ self,
+ flows: Any,
+ labels: Sequence[str] | None = None,
+ orientations: Sequence[int] | None = None,
+ pathlengths: float | Sequence[float] = 0.25,
+ trunklength: float = 1.0,
+ patchlabel: str = "",
+ *,
+ nodes: Any = None,
+ links: Any = None,
+ node_kw: Mapping[str, Any] | None = None,
+ flow_kw: Mapping[str, Any] | None = None,
+ label_kw: Mapping[str, Any] | None = None,
+ node_label_kw: Mapping[str, Any] | None = None,
+ flow_label_kw: Mapping[str, Any] | None = None,
+ node_label_box: bool | Mapping[str, Any] | None = None,
+ style: str | None = None,
+ node_order: Sequence[Any] | None = None,
+ layer_order: Sequence[int] | None = None,
+ group_cycle: Sequence[Any] | None = None,
+ flow_other: float | None = None,
+ other_label: str = "Other",
+ value_format: str | Callable[[float], str] | None = None,
+ node_label_outside: bool | str = "auto",
+ node_label_offset: float = 0.01,
+ flow_sort: bool = True,
+ flow_label_pos: float = 0.5,
+ node_labels: bool = True,
+ flow_labels: bool = False,
+ align: str = "center",
+ layers: Mapping[Any, int] | None = None,
+ scale: float | None = None,
+ unit: str | None = None,
+ format: str | None = None,
+ gap: float | None = None,
+ radius: float | None = None,
+ shoulder: float | None = None,
+ offset: float | None = None,
+ head_angle: float | None = None,
+ margin: float | None = None,
+ tolerance: float | None = None,
+ prior: int | None = None,
+ connect: tuple[int, int] | None = (0, 0),
+ rotation: float = 0,
+ **kwargs: Any,
+ ) -> Any:
+ """
+ %(plot.sankey)s
+ """
+
+ def _looks_like_links(values):
+ if values is None:
+ return False
+ if isinstance(values, np.ndarray) and values.ndim == 1:
+ return False
+ if isinstance(values, dict):
+ return True
+ if isinstance(values, (list, tuple)) and values:
+ first = values[0]
+ if isinstance(first, dict):
+ return True
+ if isinstance(first, (list, tuple)) and len(first) >= 3:
+ return True
+ return False
+
+ use_layered = nodes is not None or links is not None or _looks_like_links(flows)
+ if use_layered:
+ from .plot_types.sankey import sankey_diagram
+
+ node_kw = node_kw or {}
+ flow_kw = flow_kw or {}
+ label_kw = label_kw or {}
+ if links is None:
+ links = flows
+
+ cycle = rc["axes.prop_cycle"].by_key().get("color", [])
+ if not cycle:
+ cycle = [self._get_lines.get_next_color()]
+
+ return sankey_diagram(
+ self,
+ nodes=nodes,
+ flows=links,
+ layers=layers,
+ flow_cycle=cycle,
+ group_cycle=group_cycle,
+ node_order=node_order,
+ layer_order=layer_order,
+ style=style,
+ flow_other=flow_other,
+ other_label=other_label,
+ value_format=value_format,
+ node_kw=node_kw,
+ flow_kw=flow_kw,
+ label_kw=label_kw,
+ node_label_kw=node_label_kw,
+ flow_label_kw=flow_label_kw,
+ node_label_box=node_label_box,
+ node_label_outside=node_label_outside,
+ node_label_offset=node_label_offset,
+ flow_sort=flow_sort,
+ flow_label_pos=flow_label_pos,
+ node_labels=node_labels,
+ flow_labels=flow_labels,
+ align=align,
+ node_pad=rc["sankey.nodepad"],
+ node_width=rc["sankey.nodewidth"],
+ margin=rc["sankey.margin"],
+ flow_alpha=rc["sankey.flow.alpha"],
+ flow_curvature=rc["sankey.flow.curvature"],
+ node_facecolor=rc["sankey.node.facecolor"],
+ )
+
+ from matplotlib.sankey import Sankey
+
+ sankey_kw = {}
+ if scale is not None:
+ sankey_kw["scale"] = scale
+ if unit is not None:
+ sankey_kw["unit"] = unit
+ if format is not None:
+ sankey_kw["format"] = format
+ if gap is not None:
+ sankey_kw["gap"] = gap
+ if radius is not None:
+ sankey_kw["radius"] = radius
+ if shoulder is not None:
+ sankey_kw["shoulder"] = shoulder
+ if offset is not None:
+ sankey_kw["offset"] = offset
+ if head_angle is not None:
+ sankey_kw["head_angle"] = head_angle
+ if margin is not None:
+ sankey_kw["margin"] = margin
+ if tolerance is not None:
+ sankey_kw["tolerance"] = tolerance
+
+ if "facecolor" not in kwargs and "color" not in kwargs:
+ kwargs["facecolor"] = self._get_lines.get_next_color()
+
+ sankey = Sankey(ax=self, **sankey_kw)
+ add_kw = {
+ "flows": flows,
+ "trunklength": trunklength,
+ "patchlabel": patchlabel,
+ "rotation": rotation,
+ "pathlengths": pathlengths,
+ }
+ if labels is not None:
+ add_kw["labels"] = labels
+ if orientations is not None:
+ add_kw["orientations"] = orientations
+ if prior is not None:
+ add_kw["prior"] = prior
+ if connect is not None:
+ add_kw["connect"] = connect
+
+ sankey.add(**add_kw, **kwargs)
+ diagrams = sankey.finish()
+ return diagrams[0] if len(diagrams) == 1 else diagrams
+
def _call_native(self, name, *args, **kwargs):
"""
Call the plotting method and redirect internal calls to native methods.
diff --git a/ultraplot/axes/plot.py.rej b/ultraplot/axes/plot.py.rej
new file mode 100644
index 000000000..67b7a6e87
--- /dev/null
+++ b/ultraplot/axes/plot.py.rej
@@ -0,0 +1,264 @@
+diff a/ultraplot/axes/plot.py b/ultraplot/axes/plot.py (rejected hunks)
+@@ -10,7 +10,7 @@ import re
+ import sys
+ from collections.abc import Callable, Iterable
+ from numbers import Integral, Number
+-from typing import Any, Iterable, Optional, Union
++from typing import Any, Iterable, Mapping, Optional, Sequence, Union
+
+ import matplotlib as mpl
+ import matplotlib.artist as martist
+@@ -205,6 +205,83 @@ CurvedQuiverSet
+ """
+
+ docstring._snippet_manager["plot.curved_quiver"] = _curved_quiver_docstring
++
++_sankey_docstring = """
++Draw a Sankey diagram.
++
++Parameters
++----------
++flows : sequence of float or flow tuples
++ If a numeric sequence, use Matplotlib's Sankey implementation.
++ Otherwise, expect flow tuples or dicts describing (source, target, value).
++nodes : sequence or dict, optional
++ Node identifiers or dicts with ``id``/``label``/``color`` keys. If omitted,
++ nodes are inferred from flow sources/targets.
++labels : sequence of str, optional
++ Labels for each flow in Matplotlib's Sankey mode.
++orientations : sequence of int, optional
++ Flow orientations (-1: down, 0: right, 1: up) for Matplotlib's Sankey.
++pathlengths : float or sequence of float, optional
++ Path lengths for each flow in Matplotlib's Sankey.
++trunklength : float, optional
++ Length of the trunk between the input and output flows.
++patchlabel : str, optional
++ Label for the main patch in Matplotlib's Sankey mode.
++scale, unit, format, gap, radius, shoulder, offset, head_angle, margin, tolerance : optional
++ Passed to `matplotlib.sankey.Sankey`.
++prior : int, optional
++ Index of a prior diagram to connect to.
++connect : (int, int), optional
++ Flow indices for the prior and current diagram connection.
++rotation : float, optional
++ Rotation angle in degrees.
++node_kw, flow_kw, label_kw : dict-like, optional
++ Style dictionaries for the layered Sankey renderer.
++node_label_kw, flow_label_kw : dict-like, optional
++ Label style dictionaries for node and flow labels in layered mode.
++node_label_box : bool or dict-like, optional
++ If ``True``, draw a rounded box behind node labels. If dict-like, used as
++ the ``bbox`` argument for node label styling.
++style : {'budget', 'pastel', 'mono'}, optional
++ Built-in styling presets for layered mode.
++node_order : sequence, optional
++ Explicit node ordering for layered mode.
++layer_order : sequence, optional
++ Explicit layer ordering for layered mode.
++group_cycle : sequence, optional
++ Cycle for flow group colors (defaults to flow cycle).
++flow_other : float, optional
++ Aggregate flows below this threshold into a single ``other_label``.
++other_label : str, optional
++ Label for the aggregated flow target.
++value_format : str or callable, optional
++ Formatter for flow labels when not explicitly provided.
++node_label_outside : {'auto', True, False}, optional
++ Place node labels outside narrow nodes.
++node_label_offset : float, optional
++ Offset for outside node labels (axes-relative units).
++flow_sort : bool, optional
++ Whether to sort flows by target position to reduce crossings.
++flow_label_pos : float, optional
++ Horizontal placement for single flow labels (0 to 1 along the ribbon).
++ When flow labels overlap, positions are redistributed between 0.25 and 0.75.
++node_labels, flow_labels : bool, optional
++ Whether to draw node or flow labels in layered mode.
++align : {'center', 'top', 'bottom'}, optional
++ Vertical alignment for nodes within each layer in layered mode.
++layers : dict-like, optional
++ Manual layer assignments for nodes in layered mode.
++**kwargs
++ Patch properties passed to `matplotlib.sankey.Sankey.add` in Matplotlib mode.
++
++Returns
++-------
++matplotlib.sankey.Sankey or list or SankeyDiagram
++ The Sankey diagram instance, or a list for multi-diagram usage. For layered
++ mode, returns a `~ultraplot.axes.plot_types.sankey.SankeyDiagram`.
++"""
++
++docstring._snippet_manager["plot.sankey"] = _sankey_docstring
+ # Auto colorbar and legend docstring
+ _guide_docstring = """
+ colorbar : bool, int, or str, optional
+@@ -1849,6 +1926,169 @@ class PlotAxes(base.Axes):
+ stream_container = CurvedQuiverSet(lc, ac)
+ return stream_container
+
++ @docstring._snippet_manager
++ def sankey(
++ self,
++ flows: Any,
++ labels: Sequence[str] | None = None,
++ orientations: Sequence[int] | None = None,
++ pathlengths: float | Sequence[float] = 0.25,
++ trunklength: float = 1.0,
++ patchlabel: str = "",
++ *,
++ nodes: Any = None,
++ links: Any = None,
++ node_kw: Mapping[str, Any] | None = None,
++ flow_kw: Mapping[str, Any] | None = None,
++ label_kw: Mapping[str, Any] | None = None,
++ node_label_kw: Mapping[str, Any] | None = None,
++ flow_label_kw: Mapping[str, Any] | None = None,
++ node_label_box: bool | Mapping[str, Any] | None = None,
++ style: str | None = None,
++ node_order: Sequence[Any] | None = None,
++ layer_order: Sequence[int] | None = None,
++ group_cycle: Sequence[Any] | None = None,
++ flow_other: float | None = None,
++ other_label: str = "Other",
++ value_format: str | Callable[[float], str] | None = None,
++ node_label_outside: bool | str = "auto",
++ node_label_offset: float = 0.01,
++ flow_sort: bool = True,
++ flow_label_pos: float = 0.5,
++ node_labels: bool = True,
++ flow_labels: bool = False,
++ align: str = "center",
++ layers: Mapping[Any, int] | None = None,
++ scale: float | None = None,
++ unit: str | None = None,
++ format: str | None = None,
++ gap: float | None = None,
++ radius: float | None = None,
++ shoulder: float | None = None,
++ offset: float | None = None,
++ head_angle: float | None = None,
++ margin: float | None = None,
++ tolerance: float | None = None,
++ prior: int | None = None,
++ connect: tuple[int, int] | None = (0, 0),
++ rotation: float = 0,
++ **kwargs: Any,
++ ) -> Any:
++ """
++ %(plot.sankey)s
++ """
++
++ def _looks_like_links(values):
++ if values is None:
++ return False
++ if isinstance(values, np.ndarray) and values.ndim == 1:
++ return False
++ if isinstance(values, dict):
++ return True
++ if isinstance(values, (list, tuple)) and values:
++ first = values[0]
++ if isinstance(first, dict):
++ return True
++ if isinstance(first, (list, tuple)) and len(first) >= 3:
++ return True
++ return False
++
++ use_layered = nodes is not None or links is not None or _looks_like_links(flows)
++ if use_layered:
++ from .plot_types.sankey import sankey_diagram
++
++ node_kw = node_kw or {}
++ flow_kw = flow_kw or {}
++ label_kw = label_kw or {}
++ if links is None:
++ links = flows
++
++ cycle = rc["axes.prop_cycle"].by_key().get("color", [])
++ if not cycle:
++ cycle = [self._get_lines.get_next_color()]
++
++ return sankey_diagram(
++ self,
++ nodes=nodes,
++ flows=links,
++ layers=layers,
++ flow_cycle=cycle,
++ group_cycle=group_cycle,
++ node_order=node_order,
++ layer_order=layer_order,
++ style=style,
++ flow_other=flow_other,
++ other_label=other_label,
++ value_format=value_format,
++ node_kw=node_kw,
++ flow_kw=flow_kw,
++ label_kw=label_kw,
++ node_label_kw=node_label_kw,
++ flow_label_kw=flow_label_kw,
++ node_label_box=node_label_box,
++ node_label_outside=node_label_outside,
++ node_label_offset=node_label_offset,
++ flow_sort=flow_sort,
++ flow_label_pos=flow_label_pos,
++ node_labels=node_labels,
++ flow_labels=flow_labels,
++ align=align,
++ node_pad=rc["sankey.nodepad"],
++ node_width=rc["sankey.nodewidth"],
++ margin=rc["sankey.margin"],
++ flow_alpha=rc["sankey.flow.alpha"],
++ flow_curvature=rc["sankey.flow.curvature"],
++ node_facecolor=rc["sankey.node.facecolor"],
++ )
++
++ from matplotlib.sankey import Sankey
++
++ sankey_kw = {}
++ if scale is not None:
++ sankey_kw["scale"] = scale
++ if unit is not None:
++ sankey_kw["unit"] = unit
++ if format is not None:
++ sankey_kw["format"] = format
++ if gap is not None:
++ sankey_kw["gap"] = gap
++ if radius is not None:
++ sankey_kw["radius"] = radius
++ if shoulder is not None:
++ sankey_kw["shoulder"] = shoulder
++ if offset is not None:
++ sankey_kw["offset"] = offset
++ if head_angle is not None:
++ sankey_kw["head_angle"] = head_angle
++ if margin is not None:
++ sankey_kw["margin"] = margin
++ if tolerance is not None:
++ sankey_kw["tolerance"] = tolerance
++
++ if "facecolor" not in kwargs and "color" not in kwargs:
++ kwargs["facecolor"] = self._get_lines.get_next_color()
++
++ sankey = Sankey(ax=self, **sankey_kw)
++ add_kw = {
++ "flows": flows,
++ "trunklength": trunklength,
++ "patchlabel": patchlabel,
++ "rotation": rotation,
++ "pathlengths": pathlengths,
++ }
++ if labels is not None:
++ add_kw["labels"] = labels
++ if orientations is not None:
++ add_kw["orientations"] = orientations
++ if prior is not None:
++ add_kw["prior"] = prior
++ if connect is not None:
++ add_kw["connect"] = connect
++
++ sankey.add(**add_kw, **kwargs)
++ diagrams = sankey.finish()
++ return diagrams[0] if len(diagrams) == 1 else diagrams
++
+ def _call_native(self, name, *args, **kwargs):
+ """
+ Call the plotting method and redirect internal calls to native methods.
diff --git a/ultraplot/axes/plot_types/sankey.py b/ultraplot/axes/plot_types/sankey.py
new file mode 100644
index 000000000..c56efacfc
--- /dev/null
+++ b/ultraplot/axes/plot_types/sankey.py
@@ -0,0 +1,912 @@
+# Helper tools for layered sankey diagrams.
+from __future__ import annotations
+
+from dataclasses import dataclass
+from typing import Any, Callable, Mapping, Sequence
+
+from matplotlib import colors as mcolors
+from matplotlib import patches as mpatches
+from matplotlib import path as mpath
+
+
+@dataclass
+class SankeyDiagram:
+ nodes: dict[Any, mpatches.Patch]
+ flows: list[mpatches.PathPatch]
+ labels: dict[Any, Any]
+ layout: dict[str, Any]
+
+
+def _tint(color: Any, amount: float) -> tuple[float, float, float]:
+ """Return a lightened version of a base color."""
+ r, g, b = mcolors.to_rgb(color)
+ return (
+ (1 - amount) * r + amount,
+ (1 - amount) * g + amount,
+ (1 - amount) * b + amount,
+ )
+
+
+def _normalize_nodes(
+ nodes: Any, flows: Sequence[Mapping[str, Any]]
+) -> tuple[dict[Any, dict[str, Any]], list[Any]]:
+ """Normalize node definitions into a map and stable order list."""
+ # Infer node order from the first occurrence in flows.
+ if nodes is None:
+ order = []
+ seen = set()
+ for flow in flows:
+ for key in (flow["source"], flow["target"]):
+ if key not in seen:
+ seen.add(key)
+ order.append(key)
+ nodes = order
+
+ # Normalize nodes to a dict keyed by node id.
+ node_map = {}
+ order = []
+ if isinstance(nodes, dict):
+ nodes = [{"id": key, **value} for key, value in nodes.items()]
+ for node in nodes:
+ if isinstance(node, dict):
+ node_id = node.get("id", node.get("name"))
+ if node_id is None:
+ raise ValueError("Node dicts must include an 'id' or 'name'.")
+ label = node.get("label", str(node_id))
+ color = node.get("color", None)
+ else:
+ node_id = node
+ label = str(node_id)
+ color = None
+ node_map[node_id] = {"id": node_id, "label": label, "color": color}
+ order.append(node_id)
+ return node_map, order
+
+
+def _normalize_flows(flows: Any) -> list[dict[str, Any]]:
+ """Normalize flow definitions into a list of dicts."""
+ if flows is None:
+ raise ValueError("Flows are required to draw a sankey diagram.")
+ normalized = []
+ for flow in flows:
+ # Support dict flows or tuple-like flows.
+ if isinstance(flow, dict):
+ source = flow["source"]
+ target = flow["target"]
+ value = flow["value"]
+ label = flow.get("label", None)
+ color = flow.get("color", None)
+ else:
+ if len(flow) < 3:
+ raise ValueError(
+ "Flow tuples must have at least (source, target, value)."
+ )
+ source, target, value = flow[:3]
+ label = flow[3] if len(flow) > 3 else None
+ color = flow[4] if len(flow) > 4 else None
+ if value is None or value < 0:
+ raise ValueError("Flow values must be non-negative.")
+ if value == 0:
+ continue
+ # Store a consistent flow record for downstream layout/drawing.
+ normalized.append(
+ {
+ "source": source,
+ "target": target,
+ "value": float(value),
+ "label": label,
+ "color": color,
+ "group": flow.get("group", None) if isinstance(flow, dict) else None,
+ }
+ )
+ if not normalized:
+ raise ValueError("Flows must include at least one non-zero value.")
+ return normalized
+
+
+def _assign_layers(
+ flows: Sequence[Mapping[str, Any]],
+ nodes: Sequence[Any],
+ layers: Mapping[Any, int] | None,
+) -> dict[Any, int]:
+ """Assign layer indices for nodes using a DAG topological pass."""
+ if layers is not None:
+ # Honor explicit layer assignments when provided.
+ layer_map = dict(layers)
+ missing = [node for node in nodes if node not in layer_map]
+ if missing:
+ raise ValueError(f"Missing layer assignments for nodes: {missing}")
+ return layer_map
+
+ # Build adjacency for a simple topological layer assignment.
+ successors = {node: set() for node in nodes}
+ predecessors = {node: set() for node in nodes}
+ for flow in flows:
+ source = flow["source"]
+ target = flow["target"]
+ successors[source].add(target)
+ predecessors[target].add(source)
+
+ layer_map = {node: 0 for node in nodes}
+ indegree = {node: len(preds) for node, preds in predecessors.items()}
+ queue = [node for node, deg in indegree.items() if deg == 0]
+ visited = 0
+ # Kahn's algorithm to assign layers from sources outward.
+ while queue:
+ node = queue.pop(0)
+ visited += 1
+ for succ in successors[node]:
+ layer_map[succ] = max(layer_map[succ], layer_map[node] + 1)
+ indegree[succ] -= 1
+ if indegree[succ] == 0:
+ queue.append(succ)
+ if visited != len(nodes):
+ raise ValueError("Sankey nodes must form a directed acyclic graph.")
+ return layer_map
+
+
+def _compute_layout(
+ nodes: Sequence[Any],
+ flows: Sequence[Mapping[str, Any]],
+ *,
+ node_pad: float,
+ node_width: float,
+ align: str,
+ layers: Mapping[Any, int] | None,
+ margin: float,
+ layer_order: Sequence[int] | None = None,
+) -> tuple[
+ dict[str, Any],
+ dict[Any, list[dict[str, Any]]],
+ dict[Any, list[dict[str, Any]]],
+ dict[Any, float],
+]:
+ """Compute node and flow layout geometry in axes-relative coordinates."""
+ # Split flows into incoming/outgoing for node sizing.
+ flow_in = {node: [] for node in nodes}
+ flow_out = {node: [] for node in nodes}
+ for flow in flows:
+ flow_out[flow["source"]].append(flow)
+ flow_in[flow["target"]].append(flow)
+
+ node_value = {}
+ for node in nodes:
+ incoming = sum(flow["value"] for flow in flow_in[node])
+ outgoing = sum(flow["value"] for flow in flow_out[node])
+ # Nodes size to the larger of in/out totals.
+ node_value[node] = max(incoming, outgoing)
+
+ layer_map = _assign_layers(flows, nodes, layers)
+ max_layer = max(layer_map.values()) if layer_map else 0
+ if layer_order is None:
+ layer_order = sorted(set(layer_map.values()))
+ # Group nodes by layer in the desired order.
+ grouped = {layer: [] for layer in layer_order}
+ for node in nodes:
+ grouped[layer_map[node]].append(node)
+
+ height_available = 1.0 - 2 * margin
+ layer_totals = []
+ for layer, layer_nodes in grouped.items():
+ total = sum(node_value[node] for node in layer_nodes)
+ total += node_pad * max(len(layer_nodes) - 1, 0)
+ layer_totals.append(total)
+ scale = height_available / max(layer_totals) if layer_totals else 1.0
+
+ # Lay out nodes within each layer using the same scale.
+ layout = {"nodes": {}, "scale": scale, "layers": layer_map}
+ for layer in layer_order:
+ layer_nodes = grouped[layer]
+ total = sum(node_value[node] for node in layer_nodes) * scale
+ total += node_pad * max(len(layer_nodes) - 1, 0)
+ if align == "top":
+ start = margin + (height_available - total)
+ elif align == "bottom":
+ start = margin
+ else:
+ start = margin + (height_available - total) / 2
+ y = start
+ for node in layer_nodes:
+ height = node_value[node] * scale
+ layout["nodes"][node] = {
+ "x": margin
+ + (1.0 - 2 * margin - node_width) * (layer / max(max_layer, 1)),
+ "y": y,
+ "width": node_width,
+ "height": height,
+ }
+ y += height + node_pad
+ return layout, flow_in, flow_out, node_value
+
+
+def _ribbon_path(
+ x0: float,
+ y0: float,
+ x1: float,
+ y1: float,
+ thickness: float,
+ curvature: float,
+) -> mpath.Path:
+ """Build a closed Bezier path for a ribbon segment."""
+ dx = x1 - x0
+ if dx <= 0:
+ dx = max(thickness, 0.02)
+ cx0 = x0 + dx * curvature
+ cx1 = x1 - dx * curvature
+ top0 = y0 + thickness / 2
+ bot0 = y0 - thickness / 2
+ top1 = y1 + thickness / 2
+ bot1 = y1 - thickness / 2
+ verts = [
+ (x0, top0),
+ (cx0, top0),
+ (cx1, top1),
+ (x1, top1),
+ (x1, bot1),
+ (cx1, bot1),
+ (cx0, bot0),
+ (x0, bot0),
+ (x0, top0),
+ ]
+ codes = [
+ mpath.Path.MOVETO,
+ mpath.Path.CURVE4,
+ mpath.Path.CURVE4,
+ mpath.Path.CURVE4,
+ mpath.Path.LINETO,
+ mpath.Path.CURVE4,
+ mpath.Path.CURVE4,
+ mpath.Path.CURVE4,
+ mpath.Path.CLOSEPOLY,
+ ]
+ return mpath.Path(verts, codes)
+
+
+def _bezier_point(p0: float, p1: float, p2: float, p3: float, t: float) -> float:
+ """Evaluate a cubic Bezier coordinate at t in [0, 1]."""
+ u = 1 - t
+ return (u**3) * p0 + 3 * (u**2) * t * p1 + 3 * u * (t**2) * p2 + (t**3) * p3
+
+
+def _flow_label_point(
+ x0: float,
+ y0: float,
+ x1: float,
+ y1: float,
+ thickness: float,
+ curvature: float,
+ frac: float,
+) -> tuple[float, float]:
+ """Return a point along the flow centerline for label placement."""
+ dx = x1 - x0
+ if dx <= 0:
+ dx = max(thickness, 0.02)
+ cx0 = x0 + dx * curvature
+ cx1 = x1 - dx * curvature
+ target_x = x0 + (x1 - x0) * frac
+ if x1 == x0:
+ t = frac
+ else:
+ lo, hi = 0.0, 1.0
+ for _ in range(24):
+ mid = (lo + hi) / 2
+ mid_x = _bezier_point(x0, cx0, cx1, x1, mid)
+ if mid_x < target_x:
+ lo = mid
+ else:
+ hi = mid
+ t = (lo + hi) / 2
+ x = _bezier_point(x0, cx0, cx1, x1, t)
+ y = _bezier_point(y0, y0, y1, y1, t)
+ return x, y
+
+
+def _apply_style(
+ style: str | None,
+ *,
+ flow_cycle: Sequence[Any] | None,
+ node_facecolor: Any,
+ flow_alpha: float,
+ flow_curvature: float,
+ node_label_box: bool | Mapping[str, Any] | None,
+ node_label_kw: Mapping[str, Any],
+) -> dict[str, Any]:
+ """Apply a named style preset and merge overrides."""
+ if style is None:
+ return {
+ "flow_cycle": flow_cycle,
+ "node_facecolor": node_facecolor,
+ "flow_alpha": flow_alpha,
+ "flow_curvature": flow_curvature,
+ "node_label_box": node_label_box,
+ "node_label_kw": node_label_kw,
+ }
+ presets = {
+ "budget": dict(
+ node_facecolor="0.8",
+ flow_alpha=0.85,
+ flow_curvature=0.55,
+ node_label_box=True,
+ node_label_kw=dict(fontsize=9, color="0.2"),
+ ),
+ "pastel": dict(
+ node_facecolor="0.88",
+ flow_alpha=0.7,
+ flow_curvature=0.6,
+ node_label_box=True,
+ ),
+ "mono": dict(
+ node_facecolor="0.7",
+ flow_alpha=0.5,
+ flow_curvature=0.45,
+ node_label_box=False,
+ flow_cycle=["0.55"],
+ ),
+ }
+ if style not in presets:
+ raise ValueError(f"Unknown sankey style {style!r}.")
+ preset = presets[style]
+ # Merge preset overrides with caller-provided defaults.
+ return {
+ "flow_cycle": preset.get("flow_cycle", flow_cycle),
+ "node_facecolor": preset.get("node_facecolor", node_facecolor),
+ "flow_alpha": preset.get("flow_alpha", flow_alpha),
+ "flow_curvature": preset.get("flow_curvature", flow_curvature),
+ "node_label_box": preset.get("node_label_box", node_label_box),
+ "node_label_kw": {**preset.get("node_label_kw", {}), **node_label_kw},
+ }
+
+
+def _apply_flow_other(
+ flows: list[dict[str, Any]], flow_other: float | None, other_label: str
+) -> list[dict[str, Any]]:
+ """Aggregate small flows into a single 'Other' target per source."""
+ if flow_other is None:
+ return flows
+ # Collapse small values per source into an "Other" flow.
+ other_sums = {}
+ filtered = []
+ for flow in flows:
+ if flow["value"] < flow_other:
+ other_sums[flow["source"]] = (
+ other_sums.get(flow["source"], 0.0) + flow["value"]
+ )
+ else:
+ filtered.append(flow)
+ flows = filtered
+ for source, other_sum in other_sums.items():
+ if other_sum <= 0:
+ continue
+ flows.append(
+ {
+ "source": source,
+ "target": other_label,
+ "value": other_sum,
+ "label": None,
+ "color": None,
+ "group": None,
+ }
+ )
+ return flows
+
+
+def _ensure_nodes(
+ nodes: Any,
+ flows: Sequence[Mapping[str, Any]],
+ node_order: Sequence[Any] | None,
+) -> tuple[dict[Any, dict[str, Any]], list[Any]]:
+ """Ensure all flow endpoints exist in nodes and validate ordering."""
+ node_map, node_order_default = _normalize_nodes(nodes, flows)
+ # Add any missing flow endpoints to the node list if ordering is implicit.
+ flow_nodes = {flow["source"] for flow in flows} | {flow["target"] for flow in flows}
+ missing_nodes = [node for node in flow_nodes if node not in node_map]
+ if missing_nodes and node_order is not None:
+ raise ValueError("node_order must include every node exactly once.")
+ if missing_nodes:
+ for node in missing_nodes:
+ node_map[node] = {"id": node, "label": str(node), "color": None}
+ node_order_default.append(node)
+ node_order = node_order or node_order_default
+ if set(node_order) != set(node_map.keys()):
+ raise ValueError("node_order must include every node exactly once.")
+ return node_map, node_order
+
+
+def _assign_flow_colors(
+ flows: Sequence[Mapping[str, Any]],
+ flow_cycle: Sequence[Any] | None,
+ group_cycle: Sequence[Any] | None,
+) -> dict[Any, Any]:
+ """Assign colors to flows by group or source."""
+ if flow_cycle is None:
+ flow_cycle = ["0.6"]
+ if group_cycle is None:
+ group_cycle = flow_cycle
+ group_iter = iter(group_cycle)
+ flow_color_map = {}
+ # Assign a stable color per group (or per source if no group).
+ for flow in flows:
+ if flow["color"] is not None:
+ continue
+ group = flow["group"] or flow["source"]
+ if group not in flow_color_map:
+ try:
+ flow_color_map[group] = next(group_iter)
+ except StopIteration:
+ group_iter = iter(group_cycle)
+ flow_color_map[group] = next(group_iter)
+ flow["color"] = flow_color_map[group]
+ return flow_color_map
+
+
+def _sort_flows(
+ flows: Sequence[Mapping[str, Any]],
+ node_order: Sequence[Any],
+ layout: Mapping[str, Any],
+) -> list[dict[str, Any]]:
+ """Sort flows by target position to reduce crossings."""
+ # Order outgoing links by target center to reduce line crossings.
+ node_centers = {
+ node: layout["nodes"][node]["y"] + layout["nodes"][node]["height"] / 2
+ for node in node_order
+ }
+ ordered = []
+ seen = set()
+ for source in node_order:
+ outgoing = [flow for flow in flows if flow["source"] == source]
+ outgoing = sorted(outgoing, key=lambda f: node_centers[f["target"]])
+ for flow in outgoing:
+ ordered.append(flow)
+ seen.add(id(flow))
+ for flow in flows:
+ if id(flow) not in seen:
+ ordered.append(flow)
+ return ordered
+
+
+def _flow_label_text(
+ flow: Mapping[str, Any], value_format: str | Callable[[float], str] | None
+) -> str:
+ """Resolve the text for a flow label."""
+ label_text = flow.get("label", None)
+ if label_text is not None:
+ return label_text
+ if value_format is None:
+ return f"{flow['value']:.3g}"
+ if callable(value_format):
+ return value_format(flow["value"])
+ return value_format.format(flow["value"])
+
+
+def _flow_label_frac(idx: int, count: int, base: float) -> float:
+ """Return alternating label positions around the midpoint."""
+ if count <= 1:
+ return base
+ step = 0.25 if count == 2 else 0.2
+ offset = (idx // 2 + 1) * step
+ frac = base - offset if idx % 2 == 0 else base + offset
+ return min(max(frac, 0.05), 0.95)
+
+
+def _prepare_inputs(
+ *,
+ nodes: Any,
+ flows: Any,
+ flow_other: float | None,
+ other_label: str,
+ node_order: Sequence[Any] | None,
+ style: str | None,
+ flow_cycle: Sequence[Any] | None,
+ node_facecolor: Any,
+ flow_alpha: float,
+ flow_curvature: float,
+ node_label_box: bool | Mapping[str, Any] | None,
+ node_label_kw: Mapping[str, Any],
+ group_cycle: Sequence[Any] | None,
+) -> tuple[
+ list[dict[str, Any]],
+ dict[Any, dict[str, Any]],
+ list[Any],
+ dict[str, Any],
+ dict[Any, Any],
+]:
+ """Normalize inputs, apply style, and assign colors."""
+ # Parse flows and optional "other" aggregation.
+ flows = _normalize_flows(flows)
+ flows = _apply_flow_other(flows, flow_other, other_label)
+ # Ensure nodes include all flow endpoints.
+ node_map, node_order = _ensure_nodes(nodes, flows, node_order)
+ # Apply style presets and merge overrides.
+ style_config = _apply_style(
+ style,
+ flow_cycle=flow_cycle,
+ node_facecolor=node_facecolor,
+ flow_alpha=flow_alpha,
+ flow_curvature=flow_curvature,
+ node_label_box=node_label_box,
+ node_label_kw=node_label_kw,
+ )
+ # Resolve flow colors after style is applied.
+ flow_color_map = _assign_flow_colors(flows, style_config["flow_cycle"], group_cycle)
+ return flows, node_map, node_order, style_config, flow_color_map
+
+
+def _validate_layer_order(
+ layer_order: Sequence[int] | None,
+ flows: Sequence[Mapping[str, Any]],
+ node_order: Sequence[Any],
+ layers: Mapping[Any, int] | None,
+) -> None:
+ """Validate that layer_order is consistent with computed layers."""
+ if layer_order is None:
+ return
+ # Compare explicit ordering with the computed layer set.
+ layer_map = _assign_layers(flows, node_order, layers)
+ if set(layer_order) != set(layer_map.values()):
+ raise ValueError("layer_order must include every layer.")
+
+
+def _layer_positions(
+ layout: Mapping[str, Any], layer_order: Sequence[int] | None
+) -> tuple[dict[Any, int], dict[int, int]]:
+ """Return layer maps and positions for label placement."""
+ # Map layer ids to positions for outside-label placement.
+ layer_map = layout["layers"]
+ if layer_order is not None:
+ layer_position = {layer: idx for idx, layer in enumerate(layer_order)}
+ else:
+ layer_position = {layer: layer for layer in set(layer_map.values())}
+ return layer_map, layer_position
+
+
+def _label_box(
+ node_label_box: bool | Mapping[str, Any] | None,
+) -> dict[str, Any] | None:
+ """Return a bbox dict for node labels, if requested."""
+ if not node_label_box:
+ return None
+ if node_label_box is True:
+ # Default rounded box styling.
+ return dict(
+ boxstyle="round,pad=0.2,rounding_size=0.1",
+ facecolor="white",
+ edgecolor="none",
+ alpha=0.9,
+ )
+ return dict(node_label_box)
+
+
+def _draw_flows(
+ ax,
+ *,
+ flows: Sequence[Mapping[str, Any]],
+ node_order: Sequence[Any],
+ layout: Mapping[str, Any],
+ flow_color_map: Mapping[Any, Any],
+ flow_kw: Mapping[str, Any],
+ label_kw: Mapping[str, Any],
+ flow_label_kw: Mapping[str, Any],
+ flow_labels: bool,
+ value_format: str | Callable[[float], str] | None,
+ flow_label_pos: float,
+ flow_alpha: float,
+ flow_curvature: float,
+) -> tuple[list[mpatches.PathPatch], dict[Any, Any]]:
+ """Draw flow ribbons and optional labels."""
+ flow_patches = []
+ labels_out = {}
+ label_items = []
+ # Track running offsets per node so flows stack without overlap.
+ out_offsets = {node: 0.0 for node in node_order}
+ in_offsets = {node: 0.0 for node in node_order}
+ link_counts = {}
+ link_seen = {}
+ if flow_labels:
+ # Count links so multiple labels on the same link can be spaced.
+ for flow in flows:
+ key = (flow["source"], flow["target"])
+ link_counts[key] = link_counts.get(key, 0) + 1
+ for flow in flows:
+ source = flow["source"]
+ target = flow["target"]
+ thickness = flow["value"] * layout["scale"]
+ src = layout["nodes"][source]
+ tgt = layout["nodes"][target]
+ x0 = src["x"] + src["width"]
+ x1 = tgt["x"]
+ y0 = src["y"] + out_offsets[source] + thickness / 2
+ y1 = tgt["y"] + in_offsets[target] + thickness / 2
+ out_offsets[source] += thickness
+ in_offsets[target] += thickness
+ # Resolve color and build the ribbon patch.
+ color = flow["color"] or flow_color_map.get(flow["group"] or source, "0.6")
+ facecolor = _tint(color, 0.35)
+ path = _ribbon_path(x0, y0, x1, y1, thickness, flow_curvature)
+ base_flow_kw = {"edgecolor": "none", "linewidth": 0.0}
+ base_flow_kw.update(flow_kw)
+ flow_facecolor = base_flow_kw.pop("facecolor", facecolor)
+ patch = mpatches.PathPatch(
+ path,
+ facecolor=flow_facecolor,
+ alpha=flow_alpha,
+ **base_flow_kw,
+ )
+ ax.add_patch(patch)
+ flow_patches.append(patch)
+
+ if flow_labels:
+ # Place label along the ribbon length.
+ label_text = _flow_label_text(flow, value_format)
+ if label_text:
+ key = (source, target)
+ count = link_counts.get(key, 1)
+ idx = link_seen.get(key, 0)
+ link_seen[key] = idx + 1
+ frac = _flow_label_frac(idx, count, flow_label_pos)
+ label_x, label_y = _flow_label_point(
+ x0, y0, x1, y1, thickness, flow_curvature, frac
+ )
+ text = ax.text(
+ label_x,
+ label_y,
+ str(label_text),
+ ha="center",
+ va="center",
+ **{**label_kw, **flow_label_kw},
+ )
+ labels_out[(source, target, idx)] = text
+ label_items.append(
+ {
+ "text": text,
+ "source": source,
+ "target": target,
+ "x0": x0,
+ "x1": x1,
+ "y0": y0,
+ "y1": y1,
+ "thickness": thickness,
+ "curvature": flow_curvature,
+ "frac": frac,
+ "adjusted": False,
+ }
+ )
+
+ if flow_labels and len(label_items) > 1:
+
+ def _set_label_position(item: dict[str, Any], frac: float) -> None:
+ label_x, label_y = _flow_label_point(
+ item["x0"],
+ item["y0"],
+ item["x1"],
+ item["y1"],
+ item["thickness"],
+ item["curvature"],
+ frac,
+ )
+ item["text"].set_position((label_x, label_y))
+ item["frac"] = frac
+
+ for i in range(len(label_items)):
+ for j in range(i + 1, len(label_items)):
+ a = label_items[i]
+ b = label_items[j]
+ if (a["y0"] - b["y0"]) * (a["y1"] - b["y1"]) < 0:
+ if not a["adjusted"] and not b["adjusted"]:
+ _set_label_position(a, 0.25)
+ _set_label_position(b, 0.75)
+ a["adjusted"] = True
+ b["adjusted"] = True
+ elif a["adjusted"] ^ b["adjusted"]:
+ primary = a if a["adjusted"] else b
+ secondary = b if a["adjusted"] else a
+ if abs(primary["frac"] - 0.25) < 1.0e-6:
+ target = 0.75
+ elif abs(primary["frac"] - 0.75) < 1.0e-6:
+ target = 0.25
+ else:
+ target = 0.25
+ _set_label_position(secondary, target)
+ secondary["adjusted"] = True
+ return flow_patches, labels_out
+
+
+def _draw_nodes(
+ ax,
+ *,
+ node_order: Sequence[Any],
+ node_map: Mapping[Any, Mapping[str, Any]],
+ layout: Mapping[str, Any],
+ layer_map: Mapping[Any, int],
+ layer_position: Mapping[int, int],
+ node_facecolor: Any,
+ node_kw: Mapping[str, Any],
+ label_kw: Mapping[str, Any],
+ node_label_kw: Mapping[str, Any],
+ node_label_box: bool | Mapping[str, Any] | None,
+ node_labels: bool,
+ node_label_outside: bool | str,
+ node_label_offset: float,
+) -> tuple[dict[Any, mpatches.Patch], dict[Any, Any]]:
+ """Draw node rectangles and optional labels."""
+ node_patches = {}
+ labels_out = {}
+ for node in node_order:
+ node_info = layout["nodes"][node]
+ facecolor = node_map[node]["color"] or node_facecolor
+ # Draw the node block.
+ base_node_kw = {"edgecolor": "none", "linewidth": 0.0}
+ base_node_kw.update(node_kw)
+ node_face = base_node_kw.pop("facecolor", facecolor)
+ patch = mpatches.FancyBboxPatch(
+ (node_info["x"], node_info["y"]),
+ node_info["width"],
+ node_info["height"],
+ boxstyle="round,pad=0.0,rounding_size=0.008",
+ facecolor=node_face,
+ **base_node_kw,
+ )
+ ax.add_patch(patch)
+ node_patches[node] = patch
+ if node_labels:
+ # Place labels inside or outside based on width and position.
+ box_kw = _label_box(node_label_box)
+ label_x = node_info["x"] + node_info["width"] / 2
+ label_y = node_info["y"] + node_info["height"] / 2
+ ha = "center"
+ if node_label_outside:
+ mode = node_label_outside
+ if mode == "auto":
+ mode = node_info["width"] < 0.04
+ if mode:
+ layer = layer_position[layer_map[node]]
+ if layer == 0:
+ label_x = node_info["x"] - node_label_offset
+ ha = "right"
+ elif layer == max(layer_position.values()):
+ label_x = (
+ node_info["x"] + node_info["width"] + node_label_offset
+ )
+ ha = "left"
+ labels_out[node] = ax.text(
+ label_x,
+ label_y,
+ node_map[node]["label"],
+ ha=ha,
+ va="center",
+ bbox=box_kw,
+ **{**label_kw, **node_label_kw},
+ )
+ return node_patches, labels_out
+
+
+def sankey_diagram(
+ ax,
+ *,
+ nodes=None,
+ flows=None,
+ layers=None,
+ flow_cycle=None,
+ group_cycle=None,
+ node_order=None,
+ layer_order=None,
+ style=None,
+ flow_other=None,
+ other_label="Other",
+ value_format=None,
+ node_pad=0.02,
+ node_width=0.03,
+ node_kw=None,
+ flow_kw=None,
+ label_kw=None,
+ node_label_kw=None,
+ flow_label_kw=None,
+ node_label_box=None,
+ node_labels=True,
+ flow_labels=False,
+ flow_sort=True,
+ flow_label_pos=0.5,
+ node_label_outside="auto",
+ node_label_offset=0.01,
+ align="center",
+ margin=0.05,
+ flow_alpha=0.75,
+ flow_curvature=0.5,
+ node_facecolor="0.75",
+) -> SankeyDiagram:
+ """Render a layered Sankey diagram with optional labels."""
+ node_kw = node_kw or {}
+ flow_kw = flow_kw or {}
+ label_kw = label_kw or {}
+ node_label_kw = node_label_kw or {}
+ flow_label_kw = flow_label_kw or {}
+
+ # Normalize inputs, apply presets, and assign colors.
+ flows, node_map, node_order, style_config, flow_color_map = _prepare_inputs(
+ nodes=nodes,
+ flow_cycle=flow_cycle,
+ flow_other=flow_other,
+ other_label=other_label,
+ node_order=node_order,
+ style=style,
+ node_label_box=node_label_box,
+ node_label_kw=node_label_kw,
+ node_facecolor=node_facecolor,
+ flow_alpha=flow_alpha,
+ flow_curvature=flow_curvature,
+ group_cycle=group_cycle,
+ flows=flows,
+ )
+ node_facecolor = style_config["node_facecolor"]
+ flow_alpha = style_config["flow_alpha"]
+ flow_curvature = style_config["flow_curvature"]
+ node_label_box = style_config["node_label_box"]
+ node_label_kw = style_config["node_label_kw"]
+
+ # Validate optional layer ordering before layout.
+ _validate_layer_order(layer_order, flows, node_order, layers)
+
+ layout, _, _, _ = _compute_layout(
+ node_order,
+ flows,
+ node_pad=node_pad,
+ node_width=node_width,
+ align=align,
+ layers=layers,
+ margin=margin,
+ layer_order=layer_order,
+ )
+
+ layout["groups"] = flow_color_map
+
+ # Cache layer indices for label placement.
+ layer_map, layer_position = _layer_positions(layout, layer_order)
+
+ if flow_sort:
+ # Reorder flows to reduce crossings.
+ flows = _sort_flows(flows, node_order, layout)
+
+ # Draw flows and nodes, then merge their label handles.
+ flow_patches, flow_labels_out = _draw_flows(
+ ax,
+ flows=flows,
+ node_order=node_order,
+ layout=layout,
+ flow_color_map=flow_color_map,
+ flow_kw=flow_kw,
+ label_kw=label_kw,
+ flow_label_kw=flow_label_kw,
+ flow_labels=flow_labels,
+ value_format=value_format,
+ flow_label_pos=flow_label_pos,
+ flow_alpha=flow_alpha,
+ flow_curvature=flow_curvature,
+ )
+ node_patches, node_labels_out = _draw_nodes(
+ ax,
+ node_order=node_order,
+ node_map=node_map,
+ layout=layout,
+ layer_map=layer_map,
+ layer_position=layer_position,
+ node_facecolor=node_facecolor,
+ node_kw=node_kw,
+ label_kw=label_kw,
+ node_label_kw=node_label_kw,
+ node_label_box=node_label_box,
+ node_labels=node_labels,
+ node_label_outside=node_label_outside,
+ node_label_offset=node_label_offset,
+ )
+ labels_out = {**flow_labels_out, **node_labels_out}
+
+ # Lock axes to the unit square.
+ ax.set_xlim(0, 1)
+ ax.set_ylim(0, 1)
+ ax.set_axis_off()
+
+ return SankeyDiagram(
+ nodes=node_patches,
+ flows=flow_patches,
+ labels=labels_out,
+ layout=layout,
+ )
diff --git a/ultraplot/internals/rcsetup.py b/ultraplot/internals/rcsetup.py
index dc8c68463..7177e32a9 100644
--- a/ultraplot/internals/rcsetup.py
+++ b/ultraplot/internals/rcsetup.py
@@ -932,6 +932,37 @@ def copy(self):
_validate_bool,
"Whether to draw arrows at the end of curved quiver lines by default.",
),
+ # Sankey settings
+ "sankey.nodepad": (
+ 0.02,
+ _validate_float,
+ "Vertical padding between nodes in layered sankey diagrams.",
+ ),
+ "sankey.nodewidth": (
+ 0.03,
+ _validate_float,
+ "Node width for layered sankey diagrams (axes-relative units).",
+ ),
+ "sankey.margin": (
+ 0.05,
+ _validate_float,
+ "Margin around layered sankey diagrams (axes-relative units).",
+ ),
+ "sankey.flow.alpha": (
+ 0.75,
+ _validate_float,
+ "Flow transparency for layered sankey diagrams.",
+ ),
+ "sankey.flow.curvature": (
+ 0.5,
+ _validate_float,
+ "Flow curvature for layered sankey diagrams.",
+ ),
+ "sankey.node.facecolor": (
+ "0.75",
+ _validate_color,
+ "Default node facecolor for layered sankey diagrams.",
+ ),
# Stylesheet
"style": (
None,
diff --git a/ultraplot/internals/rcsetup.py.rej b/ultraplot/internals/rcsetup.py.rej
new file mode 100644
index 000000000..5a70a7a1a
--- /dev/null
+++ b/ultraplot/internals/rcsetup.py.rej
@@ -0,0 +1,39 @@
+diff a/ultraplot/internals/rcsetup.py b/ultraplot/internals/rcsetup.py (rejected hunks)
+@@ -932,6 +932,37 @@ _rc_ultraplot_table = {
+ _validate_bool,
+ "Whether to draw arrows at the end of curved quiver lines by default.",
+ ),
++ # Sankey settings
++ "sankey.nodepad": (
++ 0.02,
++ _validate_float,
++ "Vertical padding between nodes in layered sankey diagrams.",
++ ),
++ "sankey.nodewidth": (
++ 0.03,
++ _validate_float,
++ "Node width for layered sankey diagrams (axes-relative units).",
++ ),
++ "sankey.margin": (
++ 0.05,
++ _validate_float,
++ "Margin around layered sankey diagrams (axes-relative units).",
++ ),
++ "sankey.flow.alpha": (
++ 0.75,
++ _validate_float,
++ "Flow transparency for layered sankey diagrams.",
++ ),
++ "sankey.flow.curvature": (
++ 0.5,
++ _validate_float,
++ "Flow curvature for layered sankey diagrams.",
++ ),
++ "sankey.node.facecolor": (
++ "0.75",
++ _validate_color,
++ "Default node facecolor for layered sankey diagrams.",
++ ),
+ # Stylesheet
+ "style": (
+ None,
diff --git a/ultraplot/tests/test_plot.py b/ultraplot/tests/test_plot.py
index 1bcb69684..8846af873 100644
--- a/ultraplot/tests/test_plot.py
+++ b/ultraplot/tests/test_plot.py
@@ -722,6 +722,130 @@ def test_curved_quiver_color_and_cmap(rng, cmap):
return fig
+@pytest.mark.mpl_image_compare
+def test_sankey_basic():
+ """
+ Basic sanity check for Sankey diagrams.
+ """
+ fig, ax = uplt.subplots()
+ diagram = ax.sankey(
+ flows=[1.0, -0.6, -0.4],
+ labels=["in", "out_a", "out_b"],
+ orientations=[0, 1, -1],
+ trunklength=1.1,
+ )
+ from matplotlib.sankey import Sankey
+
+ assert isinstance(diagram, Sankey)
+ assert getattr(diagram, "patch", None) is not None
+ return fig
+
+
+@pytest.mark.mpl_image_compare
+def test_sankey_layered_nodes_flows():
+ """
+ Check that layered sankey accepts nodes and flows.
+ """
+ fig, ax = uplt.subplots()
+ nodes = ["Budget", "Ops", "R&D", "Marketing"]
+ flows = [
+ ("Budget", "Ops", 5),
+ ("Budget", "R&D", 3),
+ ("Budget", "Marketing", 2),
+ ]
+ diagram = ax.sankey(nodes=nodes, flows=flows)
+ assert len(diagram.nodes) == len(nodes)
+ assert len(diagram.flows) == len(flows)
+ return fig
+
+
+@pytest.mark.mpl_image_compare
+def test_sankey_layered_labels_and_style():
+ """
+ Check that style presets and label boxes are accepted.
+ """
+ fig, ax = uplt.subplots()
+ nodes = ["Budget", "Ops", "R&D", "Marketing"]
+ flows = [
+ ("Budget", "Ops", 5),
+ ("Budget", "R&D", 3),
+ ("Budget", "Marketing", 2),
+ ]
+ diagram = ax.sankey(
+ nodes=nodes,
+ flows=flows,
+ style="budget",
+ flow_labels=True,
+ value_format="{:.1f}",
+ node_label_box=True,
+ )
+ flow_label_keys = [key for key in diagram.labels if isinstance(key, tuple)]
+ assert flow_label_keys
+ return fig
+
+
+@pytest.mark.mpl_image_compare
+def test_sankey_basic():
+ """
+ Basic sanity check for Sankey diagrams.
+ """
+ fig, ax = uplt.subplots()
+ diagram = ax.sankey(
+ flows=[1.0, -0.6, -0.4],
+ labels=["in", "out_a", "out_b"],
+ orientations=[0, 1, -1],
+ trunklength=1.1,
+ )
+ from matplotlib.sankey import Sankey
+
+ assert isinstance(diagram, Sankey)
+ assert getattr(diagram, "patch", None) is not None
+ return fig
+
+
+@pytest.mark.mpl_image_compare
+def test_sankey_layered_nodes_flows():
+ """
+ Check that layered sankey accepts nodes and flows.
+ """
+ fig, ax = uplt.subplots()
+ nodes = ["Budget", "Ops", "R&D", "Marketing"]
+ flows = [
+ ("Budget", "Ops", 5),
+ ("Budget", "R&D", 3),
+ ("Budget", "Marketing", 2),
+ ]
+ diagram = ax.sankey(nodes=nodes, flows=flows)
+ assert len(diagram.nodes) == len(nodes)
+ assert len(diagram.flows) == len(flows)
+ return fig
+
+
+@pytest.mark.mpl_image_compare
+def test_sankey_layered_labels_and_style():
+ """
+ Check that style presets and label boxes are accepted.
+ """
+ fig, ax = uplt.subplots()
+ nodes = ["Budget", "Ops", "R&D", "Marketing"]
+ flows = [
+ ("Budget", "Ops", 5),
+ ("Budget", "R&D", 3),
+ ("Budget", "Marketing", 2),
+ ]
+ diagram = ax.sankey(
+ nodes=nodes,
+ flows=flows,
+ style="budget",
+ flow_labels=True,
+ value_format="{:.1f}",
+ node_label_box=True,
+ )
+ flow_label_keys = [key for key in diagram.labels if isinstance(key, tuple)]
+ assert flow_label_keys
+ return fig
+
+
def test_histogram_norms():
"""
Check that all histograms-like plotting functions