From 5a8ad51848e7e9cfecf71f3ec61895d865286084 Mon Sep 17 00:00:00 2001 From: Jonas Eschle Date: Mon, 22 Apr 2024 15:54:32 -0400 Subject: [PATCH 1/4] enh: add LHCb3 style, raw, to be discussed --- docs/source/gallery/styles.rst | 14 +++++ src/mplhep/styles/__init__.py | 4 +- src/mplhep/styles/lhcb.py | 111 +++++++++++++++++++++++++++++++++ tests/test_styles.py | 16 +++-- 4 files changed, 140 insertions(+), 5 deletions(-) diff --git a/docs/source/gallery/styles.rst b/docs/source/gallery/styles.rst index ea9dc66b..1b36222e 100644 --- a/docs/source/gallery/styles.rst +++ b/docs/source/gallery/styles.rst @@ -107,6 +107,20 @@ LHCb2 style .. image:: ../_static/_generated/LHCb2/band/pos0.png :width: 45% +LHCb3 style (new, long-term) + +.. image:: ../../_static/_generated/LHCb3/fill/pos0.png + :width: 45% + +.. image:: ../../_static/_generated/LHCb3/step/pos0.png + :width: 45% + +.. image:: ../../_static/_generated/LHCb3/errorbar/pos0.png + :width: 45% + +.. image:: ../../_static/_generated/LHCb3/band/pos0.png + :width: 45% + ALICE ------------ diff --git a/src/mplhep/styles/__init__.py b/src/mplhep/styles/__init__.py index 0514ce47..75967f4b 100644 --- a/src/mplhep/styles/__init__.py +++ b/src/mplhep/styles/__init__.py @@ -17,7 +17,7 @@ from .atlas import ATLAS, ATLAS1, ATLAS2, ATLASAlt, ATLASTex from .cms import CMS, ROOT, CMSTex, ROOTTex from .dune import DUNE, DUNE1, DUNETex, DUNETex1 -from .lhcb import LHCb, LHCb1, LHCb2, LHCbTex, LHCbTex1, LHCbTex2 +from .lhcb import LHCb, LHCb1, LHCb2, LHCb3, LHCbTex, LHCbTex1, LHCbTex2, LHCbTex3 from .plothist import PLOTHIST __all__ = ( @@ -38,9 +38,11 @@ "LHCb", "LHCb1", "LHCb2", + "LHCb3", "LHCbTex", "LHCbTex1", "LHCbTex2", + "LHCbTex3", "ROOTTex", "fabiola", "fira", diff --git a/src/mplhep/styles/lhcb.py b/src/mplhep/styles/lhcb.py index de140f74..368c2e1f 100644 --- a/src/mplhep/styles/lhcb.py +++ b/src/mplhep/styles/lhcb.py @@ -222,6 +222,117 @@ "pgf.rcfonts": False, } +colors3 = [ + "#0078FF", + "#FF6600", + "#0AAFB6", + "#FF3333", + "#0000FF", + "#00CC00", + "#BF8040", + "#FF33CC", + "#FF7733", + "#BFD1D4", +] + +LHCb3 = { + # Plot properties + "axes.labelsize": 32, + "axes.linewidth": 2, + "axes.facecolor": "white", + # Custom colors + "axes.prop_cycle": cycler("color", colors2), + "axes.formatter.min_exponent": 3, + "axes.titlesize": 28, + # Errorbar properties + "errorbar.capsize": 2.5, + # Figure properties + "figure.figsize": (12, 9), + "figure.dpi": 100, + # Outer frame color + "figure.facecolor": "white", + "figure.autolayout": True, + # Set default font to Times New Roman + "font.family": "serif", + "font.serif": ["Tex Gyre Termes"], + "font.cursive": ["Tex Gyre Termes"], + "mathtext.fontset": "custom", + "mathtext.rm": "Tex Gyre Termes", + "mathtext.bf": "Tex Gyre Termes:bold", + "mathtext.sf": "Tex Gyre Termes", + "mathtext.it": "Tex Gyre Termes:italic", + "mathtext.tt": "Tex Gyre Termes", + "mathtext.cal": "Tex Gyre Termes", + "font.size": 14, + "font.weight": 400, + # Draw the legend on a solid background + "legend.frameon": False, + "legend.fancybox": True, + # Inherit the background color from the plot + "legend.facecolor": "inherit", + "legend.numpoints": 1, + "legend.labelspacing": 0.2, + "legend.fontsize": 28, + "legend.title_fontsize": 28, + # Automatically choose the best location + "legend.loc": "best", + # Space between the handles and their labels + "legend.handletextpad": 0.75, + # Space between the borders of the plot and the legend + "legend.borderaxespad": 1.0, + # Lines settings + "lines.linewidth": 3.3, + "lines.markeredgewidth": 1.5, + "lines.markersize": 16, + "lines.elinewidth": 1.5, + # Saved figure settings + "savefig.bbox": "tight", + "savefig.pad_inches": 0.3, + "savefig.format": "pdf", + # Ticks settings + # xticks + "xtick.minor.visible": True, + "xtick.top": True, + "xtick.major.size": 14, + "xtick.minor.size": 7, + "xtick.major.width": 2, + "xtick.minor.width": 2, + "xtick.major.pad": 10, + "xtick.minor.pad": 10, + "xtick.labelsize": 30, + "xtick.direction": "in", + # yticks + "ytick.minor.visible": True, + "ytick.right": True, + "ytick.major.size": 14, + "ytick.minor.size": 7, + "ytick.major.width": 2, + "ytick.minor.width": 2, + "ytick.major.pad": 10, + "ytick.minor.pad": 10, + "ytick.labelsize": 30, + "ytick.direction": "in", + # Legend frame border size + # WARNING: this affects every patch object + # (i.e. histograms and so on) + "patch.linewidth": 2, + "xaxis.labellocation": "right", + "yaxis.labellocation": "top", +} + +# Filter extra (labellocation) items if needed +LHCb3 = {k: v for k, v in LHCb3.items() if k in mpl.rcParams} + +LHCbTex3 = { + **LHCb3, + # Use LaTeX rendering by default + # (overrides default font) + "text.usetex": True, + # Use the LaTeX version of Times New Roman + "text.latex.preamble": r"\usepackage{txfonts}", + "pgf.rcfonts": False, +} + # alias LHCb Style lhcb_depr_msg = ( diff --git a/tests/test_styles.py b/tests/test_styles.py index 4c19d16e..64979ab0 100644 --- a/tests/test_styles.py +++ b/tests/test_styles.py @@ -112,9 +112,11 @@ def test_style_plothist(): mh.style.DUNE, mh.style.LHCb1, mh.style.LHCb2, + mh.style.LHCb3, + mh.style.LHCb, mh.style.ROOT, ], - ids=["ALICE", "ATLAS", "CMS", "DUNE1", "DUNE", "LHCb1", "LHCb2", "ROOT"], + ids=["ALICE", "ATLAS", "CMS", "DUNE1", "DUNE", "LHCb1", "LHCb2", "LHCb3", "LHCb", "ROOT"], ) def test_use_style(fig_test, fig_ref, mplhep_style): mh.rcParams.clear() @@ -151,9 +153,11 @@ def test_use_style_LHCb_dep(fig_test, fig_ref): (mh.style.DUNE, "DUNE"), (mh.style.LHCb1, "LHCb1"), (mh.style.LHCb2, "LHCb2"), + (mh.style.LHCb2, "LHCb3"), + (mh.style.LHCb2, "LHCb"), (mh.style.ROOT, "ROOT"), ], - ids=["ALICE", "ATLAS", "CMS", "DUNE1", "DUNE", "LHCb1", "LHCb2", "ROOT"], + ids=["ALICE", "ATLAS", "CMS", "DUNE1", "DUNE", "LHCb1", "LHCb2", "LHCb3", "LHCb", "ROOT"], ) def test_use_style_str_alias(fig_test, fig_ref, mplhep_style, str_alias): mh.rcParams.clear() @@ -177,9 +181,11 @@ def test_use_style_str_alias(fig_test, fig_ref, mplhep_style, str_alias): (mh.style.DUNE, "DUNE"), (mh.style.LHCb1, "LHCb1"), (mh.style.LHCb2, "LHCb2"), + (mh.style.LHCb2, "LHCb3"), + (mh.style.LHCb2, "LHCb"), (mh.style.ROOT, "ROOT"), ], - ids=["ALICE", "ATLAS", "CMS", "DUNE1", "DUNE", "LHCb1", "LHCb2", "ROOT"], + ids=["ALICE", "ATLAS", "CMS", "DUNE1", "DUNE", "LHCb1", "LHCb2", "LHCb3", "LHCb", "ROOT"], ) def test_use_style_self_consistent(fig_test, fig_ref, mplhep_style, str_alias): mh.rcParams.clear() @@ -203,9 +209,11 @@ def test_use_style_self_consistent(fig_test, fig_ref, mplhep_style, str_alias): (mh.style.DUNE, "DUNE"), (mh.style.LHCb1, "LHCb1"), (mh.style.LHCb2, "LHCb2"), + (mh.style.LHCb2, "LHCb3"), + (mh.style.LHCb2, "LHCb"), (mh.style.ROOT, "ROOT"), ], - ids=["ALICE", "ATLAS", "CMS", "DUNE1", "DUNE", "LHCb1", "LHCb2", "ROOT"], + ids=["ALICE", "ATLAS", "CMS", "DUNE1", "DUNE", "LHCb1", "LHCb2", "LHCb3", "LHCb", "ROOT"], ) def test_use_style_style_list(fig_test, fig_ref, mplhep_style, str_alias): mh.rcParams.clear() From d63fea2e2e7231f2bcf2ef6863848c38e6b630b3 Mon Sep 17 00:00:00 2001 From: Jonas Eschle Date: Tue, 3 Jun 2025 16:02:07 +0200 Subject: [PATCH 2/4] enh: reduce margins in plot --- src/mplhep/styles/lhcb.py | 2 ++ tests/baseline/test_style_lhcb3.png | Bin 0 -> 40092 bytes 2 files changed, 2 insertions(+) create mode 100644 tests/baseline/test_style_lhcb3.png diff --git a/src/mplhep/styles/lhcb.py b/src/mplhep/styles/lhcb.py index 368c2e1f..674b4080 100644 --- a/src/mplhep/styles/lhcb.py +++ b/src/mplhep/styles/lhcb.py @@ -240,6 +240,8 @@ "axes.labelsize": 32, "axes.linewidth": 2, "axes.facecolor": "white", + "axes.xmargin": 0.0, + "axes.ymargin": 0.0, # Custom colors "axes.prop_cycle": cycler("color", colors2), "axes.formatter.min_exponent": 3, diff --git a/tests/baseline/test_style_lhcb3.png b/tests/baseline/test_style_lhcb3.png new file mode 100644 index 0000000000000000000000000000000000000000..030bee75828b2e870a7bb873c82a0b1d42683987 GIT binary patch literal 40092 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

EjQ(J4##Xq#9@V$l)i;Hwo5ZZTU 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 literal 0 HcmV?d00001 From 94e3ac5de95ab533a446970d012f2694199fc69d Mon Sep 17 00:00:00 2001 From: Jonas Eschle Date: Mon, 17 Nov 2025 14:46:32 +0000 Subject: [PATCH 3/4] test: add baseline --- tests/baseline/test_hist_visual_fill.png | Bin 0 -> 11400 bytes tests/baseline/test_hist_visual_multiple.png | Bin 0 -> 21318 bytes tests/baseline/test_hist_visual_single.png | Bin 0 -> 16693 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/baseline/test_hist_visual_fill.png create mode 100644 tests/baseline/test_hist_visual_multiple.png create mode 100644 tests/baseline/test_hist_visual_single.png diff --git a/tests/baseline/test_hist_visual_fill.png b/tests/baseline/test_hist_visual_fill.png new file mode 100644 index 0000000000000000000000000000000000000000..ca6d7b4461aebff8b88de01093047b26c709d8c5 GIT binary patch literal 11400 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 literal 0 HcmV?d00001 diff --git a/tests/baseline/test_hist_visual_multiple.png b/tests/baseline/test_hist_visual_multiple.png new file mode 100644 index 0000000000000000000000000000000000000000..a0a337ce1d0b87df4d5957ed4dd33555dbfad23d GIT binary patch literal 21318 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 M{AHO8>1%iY7vqFSQvd(} literal 0 HcmV?d00001 diff --git a/tests/baseline/test_hist_visual_single.png b/tests/baseline/test_hist_visual_single.png new file mode 100644 index 0000000000000000000000000000000000000000..7007eb4ae8c5727c5135fa2fe6462bb794f9455a GIT binary patch literal 16693 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 w{v0P9J#2Q@zvo;3qG Date: Mon, 17 Nov 2025 14:49:12 +0000 Subject: [PATCH 4/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/test_styles.py | 52 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/tests/test_styles.py b/tests/test_styles.py index 0cb822dd..e48590e1 100644 --- a/tests/test_styles.py +++ b/tests/test_styles.py @@ -116,7 +116,18 @@ def test_style_plothist(): mh.style.LHCb, mh.style.ROOT, ], - ids=["ALICE", "ATLAS", "CMS", "DUNE1", "DUNE", "LHCb1", "LHCb2", "LHCb3", "LHCb", "ROOT"], + ids=[ + "ALICE", + "ATLAS", + "CMS", + "DUNE1", + "DUNE", + "LHCb1", + "LHCb2", + "LHCb3", + "LHCb", + "ROOT", + ], ) def test_use_style(fig_test, fig_ref, mplhep_style): mh.rcParams.clear() @@ -157,7 +168,18 @@ def test_use_style_LHCb_dep(fig_test, fig_ref): (mh.style.LHCb2, "LHCb"), (mh.style.ROOT, "ROOT"), ], - ids=["ALICE", "ATLAS", "CMS", "DUNE1", "DUNE", "LHCb1", "LHCb2", "LHCb3", "LHCb", "ROOT"], + ids=[ + "ALICE", + "ATLAS", + "CMS", + "DUNE1", + "DUNE", + "LHCb1", + "LHCb2", + "LHCb3", + "LHCb", + "ROOT", + ], ) def test_use_style_str_alias(fig_test, fig_ref, mplhep_style, str_alias): mh.rcParams.clear() @@ -185,7 +207,18 @@ def test_use_style_str_alias(fig_test, fig_ref, mplhep_style, str_alias): (mh.style.LHCb2, "LHCb"), (mh.style.ROOT, "ROOT"), ], - ids=["ALICE", "ATLAS", "CMS", "DUNE1", "DUNE", "LHCb1", "LHCb2", "LHCb3", "LHCb", "ROOT"], + ids=[ + "ALICE", + "ATLAS", + "CMS", + "DUNE1", + "DUNE", + "LHCb1", + "LHCb2", + "LHCb3", + "LHCb", + "ROOT", + ], ) def test_use_style_self_consistent(fig_test, fig_ref, mplhep_style, str_alias): mh.rcParams.clear() @@ -213,7 +246,18 @@ def test_use_style_self_consistent(fig_test, fig_ref, mplhep_style, str_alias): (mh.style.LHCb2, "LHCb"), (mh.style.ROOT, "ROOT"), ], - ids=["ALICE", "ATLAS", "CMS", "DUNE1", "DUNE", "LHCb1", "LHCb2", "LHCb3", "LHCb", "ROOT"], + ids=[ + "ALICE", + "ATLAS", + "CMS", + "DUNE1", + "DUNE", + "LHCb1", + "LHCb2", + "LHCb3", + "LHCb", + "ROOT", + ], ) def test_use_style_style_list(fig_test, fig_ref, mplhep_style, str_alias): mh.rcParams.clear()