jarvisplot 1.4.1__tar.gz → 1.4.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/JarvisPLOT.egg-info/PKG-INFO +1 -1
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/JarvisPLOT.egg-info/SOURCES.txt +1 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/PKG-INFO +1 -1
- jarvisplot-1.4.2/jarvisplot/Figure/design_runtime.py +137 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/figure.py +3 -10
- {jarvisplot-1.4.1/jarvisplot/cards/a4paper/4x1 → jarvisplot-1.4.2/jarvisplot/cards/a4paper/2x1}/rect.json +4 -0
- {jarvisplot-1.4.1/jarvisplot/cards/gambit → jarvisplot-1.4.2/jarvisplot/cards/a4paper}/2x1/ternary.json +3 -0
- {jarvisplot-1.4.1/jarvisplot/cards/a4paper/4x1 → jarvisplot-1.4.2/jarvisplot/cards/gambit/2x1}/ternary.json +17 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/pyproject.toml +1 -1
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/JarvisPLOT.egg-info/dependency_links.txt +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/JarvisPLOT.egg-info/entry_points.txt +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/JarvisPLOT.egg-info/requires.txt +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/JarvisPLOT.egg-info/top_level.txt +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/README.md +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/__init__.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/adapters_rect.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/adapters_ternary.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/cards/std_axes_adapter_config.json +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/colorbar_runtime.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/config_runtime.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/data_pipelines.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/density_cell_runtime.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/dynesty_runtime.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/figure_types.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/helper.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/interp_2d_runtime.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/interp_natural_neighbor.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/interp_natural_neighbor_exact.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/layer_runtime.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/layout_runtime.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/method_registry.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/posterior_density_runtime.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/posterior_hpd.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/posterior_mesh.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/preprocessor.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/preprocessor_runtime.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/profile_runtime.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/Figure/style_runtime.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/__init__.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cache_store.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/a4paper/1x1/ternary.json +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/a4paper/2x1/dynesty_runplot.json +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/a4paper/2x1/rect5x1.json +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/a4paper/2x1/rect_cmap.json +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/a4paper/2x1/ternary_cmap.json +0 -0
- {jarvisplot-1.4.1/jarvisplot/cards/a4paper/2x1 → jarvisplot-1.4.2/jarvisplot/cards/a4paper/4x1}/rect.json +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/a4paper/4x1/rect_cmap.json +0 -0
- {jarvisplot-1.4.1/jarvisplot/cards/a4paper/2x1 → jarvisplot-1.4.2/jarvisplot/cards/a4paper/4x1}/ternary.json +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/a4paper/4x1/ternary_cmap.json +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/args.json +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/colors/colormaps.json +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/default/output.json +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/flowchart/default.json +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/gambit/1x1/ternary.json +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/gambit/2x1/rect_cmap.json +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/gambit/2x1/ternary_cmap.json +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/icons/JarvisHEP.png +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/icons/flowchart/JarvisHEP.png +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/icons/flowchart/calculator.png +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/icons/flowchart/inputfile.png +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/icons/flowchart/opera.png +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/icons/flowchart/outputfile.png +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/icons/flowchart/sampler.png +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/icons/gambit.png +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/icons/gambit_small.png +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cards/style_preference.json +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/cli.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/client.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/config.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/core.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/core_assets.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/core_runtime.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/data_loader.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/data_loader_hdf5.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/data_loader_runtime.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/data_loader_summary.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/flowchart.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/inner_func.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/memtrace.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/utils/__init__.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/utils/cmaps.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/utils/dataframes.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/utils/expression.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/utils/interpolator.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/jarvisplot/utils/pathing.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/setup.cfg +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/tests/test_data_loader_contracts.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/tests/test_density_cell_transform.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/tests/test_docs_status_labels.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/tests/test_figure_contracts.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/tests/test_figure_type_expander.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/tests/test_flowchart_renderer.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/tests/test_interp_2d_transform.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/tests/test_interp_natural_neighbor.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/tests/test_interpolator_contracts.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/tests/test_jpcontour_methods.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/tests/test_parse_data_metadata.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/tests/test_pathing_contracts.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/tests/test_posterior_hpd.py +0 -0
- {jarvisplot-1.4.1 → jarvisplot-1.4.2}/tests/test_template_json.py +0 -0
|
@@ -28,6 +28,7 @@ jarvisplot/Figure/colorbar_runtime.py
|
|
|
28
28
|
jarvisplot/Figure/config_runtime.py
|
|
29
29
|
jarvisplot/Figure/data_pipelines.py
|
|
30
30
|
jarvisplot/Figure/density_cell_runtime.py
|
|
31
|
+
jarvisplot/Figure/design_runtime.py
|
|
31
32
|
jarvisplot/Figure/dynesty_runtime.py
|
|
32
33
|
jarvisplot/Figure/figure.py
|
|
33
34
|
jarvisplot/Figure/figure_types.py
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Design-reference debug overlay for Jarvis-PLOT figures.
|
|
3
|
+
|
|
4
|
+
When a figure is rendered with ``debug: true`` in the YAML, this module draws a
|
|
5
|
+
dimension overlay on top of the finished figure: every axes defined by the style
|
|
6
|
+
card is outlined and annotated with
|
|
7
|
+
|
|
8
|
+
- its name (``ax`` / ``axc`` / ``axtri`` / ``ax0`` ...),
|
|
9
|
+
- its position rect ``[left, bottom, width, height]`` in figure fractions
|
|
10
|
+
(exactly the ``Frame.axes.<name>.rect`` value from the style JSON card), and
|
|
11
|
+
- its width / height converted to centimetres from ``figure.figsize``.
|
|
12
|
+
|
|
13
|
+
The primary axes additionally gets margin dimension lines (left / top / bottom
|
|
14
|
+
insets), and colorbar axes get a gap dimension to the primary axes.
|
|
15
|
+
|
|
16
|
+
The overlay never participates in data rendering; it is a read-only annotation
|
|
17
|
+
layer added just before the figure is saved. All drawing is wrapped so a
|
|
18
|
+
failure here can never break a normal plot.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
from __future__ import annotations
|
|
22
|
+
|
|
23
|
+
import matplotlib as mpl
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# overlay palette
|
|
27
|
+
_DIM = "#0A7FB6" # blue dimension lines + labels
|
|
28
|
+
_BOX = "#111111" # axes outline
|
|
29
|
+
_NAME = "#1A237E" # axes name + rect text
|
|
30
|
+
_MARGIN = "#FF3FA4" # pink figure border / caption
|
|
31
|
+
|
|
32
|
+
# order in which we look for the "primary" axes to fully dimension
|
|
33
|
+
_PRIMARY_ORDER = ("ax", "ax0", "ax1", "axtri")
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def _raw(ax):
|
|
37
|
+
"""Return the underlying matplotlib Axes for an adapter or raw Axes."""
|
|
38
|
+
return getattr(ax, "ax", ax)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _position(ax):
|
|
42
|
+
try:
|
|
43
|
+
bb = _raw(ax).get_position()
|
|
44
|
+
return float(bb.x0), float(bb.y0), float(bb.width), float(bb.height)
|
|
45
|
+
except Exception:
|
|
46
|
+
return None
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def draw_design_reference(fig) -> None:
|
|
50
|
+
"""Draw the dimension overlay onto ``fig`` (a JarvisPLOT Figure wrapper)."""
|
|
51
|
+
try:
|
|
52
|
+
_draw(fig)
|
|
53
|
+
except Exception as exc: # never break a real plot because of the overlay
|
|
54
|
+
logger = getattr(fig, "logger", None)
|
|
55
|
+
if logger is not None:
|
|
56
|
+
try:
|
|
57
|
+
logger.debug(f"design-reference overlay skipped: {exc}")
|
|
58
|
+
except Exception:
|
|
59
|
+
pass
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def _draw(fig) -> None:
|
|
63
|
+
F = fig.fig
|
|
64
|
+
w_in, h_in = (float(v) for v in F.get_size_inches())
|
|
65
|
+
w_cm, h_cm = w_in * 2.54, h_in * 2.54
|
|
66
|
+
|
|
67
|
+
ov = F.add_axes([0.0, 0.0, 1.0, 1.0], zorder=10_000)
|
|
68
|
+
ov.set_xlim(0.0, 1.0)
|
|
69
|
+
ov.set_ylim(0.0, 1.0)
|
|
70
|
+
ov.set_axis_off()
|
|
71
|
+
ov.patch.set_alpha(0.0)
|
|
72
|
+
|
|
73
|
+
def label(x, y, text, *, color=_DIM, size=5.0, ha="center", va="center",
|
|
74
|
+
rotation=0, weight="normal", family="monospace", boxed=True):
|
|
75
|
+
bbox = dict(boxstyle="square,pad=0.12", fc="white", ec="none", alpha=0.82) if boxed else None
|
|
76
|
+
ov.text(x, y, text, color=color, fontsize=size, ha=ha, va=va,
|
|
77
|
+
rotation=rotation, fontweight=weight, family=family, bbox=bbox,
|
|
78
|
+
zorder=10_002, clip_on=False)
|
|
79
|
+
|
|
80
|
+
def dim(x0, y0, x1, y1, text, *, vertical=False):
|
|
81
|
+
ov.annotate("", xy=(x1, y1), xytext=(x0, y0),
|
|
82
|
+
arrowprops=dict(arrowstyle="<|-|>", color=_DIM, lw=0.7,
|
|
83
|
+
shrinkA=0, shrinkB=0, mutation_scale=6),
|
|
84
|
+
zorder=10_001)
|
|
85
|
+
label((x0 + x1) / 2.0, (y0 + y1) / 2.0, text,
|
|
86
|
+
rotation=90 if vertical else 0)
|
|
87
|
+
|
|
88
|
+
# figure border + size caption
|
|
89
|
+
ov.add_patch(mpl.patches.Rectangle((0, 0), 1, 1, fill=False, ec=_MARGIN,
|
|
90
|
+
lw=0.9, zorder=10_001))
|
|
91
|
+
label(0.5, 0.995, f"design reference · figure {w_cm:.2f} cm × {h_cm:.2f} cm",
|
|
92
|
+
color=_MARGIN, size=6.0, va="top", weight="bold", family="DejaVu Sans")
|
|
93
|
+
|
|
94
|
+
# total figure height marker on the far left
|
|
95
|
+
dim(0.012, 0.0, 0.012, 1.0, f"{h_cm:.2f} cm", vertical=True)
|
|
96
|
+
|
|
97
|
+
# pick the primary axes to fully dimension
|
|
98
|
+
primary = next((n for n in _PRIMARY_ORDER if n in fig.axes), None)
|
|
99
|
+
primary_pos = _position(fig.axes[primary]) if primary else None
|
|
100
|
+
|
|
101
|
+
for name, ax in fig.axes.items():
|
|
102
|
+
pos = _position(ax)
|
|
103
|
+
if pos is None:
|
|
104
|
+
continue
|
|
105
|
+
l, b, w, h = pos
|
|
106
|
+
|
|
107
|
+
# outline only, so the real plot underneath keeps its true colors
|
|
108
|
+
ov.add_patch(mpl.patches.Rectangle((l, b), w, h, fill=False, ec=_BOX,
|
|
109
|
+
lw=0.9, zorder=10_001))
|
|
110
|
+
|
|
111
|
+
# name + rect + cm sizes — anchored so the text stays inside the figure
|
|
112
|
+
if l + w / 2.0 > 0.6: # axes sits in the right half
|
|
113
|
+
tx, ha = min(l + w, 0.992), "right"
|
|
114
|
+
else:
|
|
115
|
+
tx, ha = max(l + 0.012, 0.008), "left"
|
|
116
|
+
ty = min(b + h - 0.015, 0.93)
|
|
117
|
+
label(tx, ty, name, color=_NAME, size=7.0, ha=ha, va="top",
|
|
118
|
+
weight="bold", boxed=True)
|
|
119
|
+
label(tx, ty - 0.057,
|
|
120
|
+
f"[{l:.3f}, {b:.3f}, {w:.3f}, {h:.3f}]\n"
|
|
121
|
+
f"width: {w * w_cm:.3f} cm height: {h * h_cm:.3f} cm",
|
|
122
|
+
color=_NAME, size=4.6, ha=ha, va="top", boxed=True)
|
|
123
|
+
|
|
124
|
+
if name == primary:
|
|
125
|
+
yt = b + h
|
|
126
|
+
# left inset (figure left edge → axes left edge), drawn along the top edge
|
|
127
|
+
dim(0.0, yt, l, yt, f"{l * w_cm:.3f} cm")
|
|
128
|
+
# top inset (axes top edge → figure top)
|
|
129
|
+
dim(l, yt, l, 1.0, f"{(1.0 - yt) * h_cm:.3f} cm", vertical=True)
|
|
130
|
+
# bottom inset (figure bottom → axes bottom edge)
|
|
131
|
+
dim(l, 0.0, l, b, f"{b * h_cm:.3f} cm", vertical=True)
|
|
132
|
+
elif name.startswith("axc") and primary_pos is not None:
|
|
133
|
+
# gap between the primary axes' right edge and this colorbar's left edge
|
|
134
|
+
pl, pb, pw, ph = primary_pos
|
|
135
|
+
ygap = b + h / 2.0
|
|
136
|
+
if l > pl + pw:
|
|
137
|
+
dim(pl + pw, ygap, l, ygap, f"{(l - (pl + pw)) * w_cm:.3f} cm")
|
|
@@ -13,6 +13,7 @@ from .adapters_ternary import TernaryAxesAdapter
|
|
|
13
13
|
from .method_registry import resolve_callable
|
|
14
14
|
from .style_runtime import resolve_style_bundle_payload
|
|
15
15
|
from .config_runtime import apply_figure_config
|
|
16
|
+
from .design_runtime import draw_design_reference
|
|
16
17
|
from .layer_runtime import (
|
|
17
18
|
load_layer_runtime_data as runtime_load_layer_runtime_data,
|
|
18
19
|
release_layer_runtime_data as runtime_release_layer_runtime_data,
|
|
@@ -975,16 +976,8 @@ class Figure:
|
|
|
975
976
|
def plot(self):
|
|
976
977
|
self.render()
|
|
977
978
|
# for layer in self.layers:
|
|
978
|
-
if self.debug:
|
|
979
|
-
|
|
980
|
-
# Demo of Scatter Clip
|
|
981
|
-
x = np.linspace(-1, 2, 121)
|
|
982
|
-
y = np.linspace(-1, 2, 121)
|
|
983
|
-
X, Y = np.meshgrid(x, y)
|
|
984
|
-
self.axtri.scatter(x=X.ravel() + 0.5 * Y.ravel(), y=Y.ravel(), marker='.', s=1, facecolor="#0277BA", edgecolor="None")
|
|
985
|
-
|
|
986
|
-
# Demo of Plot Clip
|
|
987
|
-
self.axtri.plot(x=[-1, 0.5, 0.5, 2], y=[-1.1, 0.6, 0.3, 1.8], linestyle="-", color="#0277BA")
|
|
979
|
+
if self.debug:
|
|
980
|
+
draw_design_reference(self)
|
|
988
981
|
self.savefig()
|
|
989
982
|
import matplotlib.pyplot as plt
|
|
990
983
|
plt.close(self.fig)
|
|
@@ -124,6 +124,23 @@
|
|
|
124
124
|
"va":"center"
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
|
+
},
|
|
128
|
+
"axlogo": {
|
|
129
|
+
"file": "&JP/jarvisplot/cards/icons/gambit_small.png",
|
|
130
|
+
"text": [
|
|
131
|
+
{
|
|
132
|
+
"x": 0.0,
|
|
133
|
+
"y": -0.5,
|
|
134
|
+
"s": "GAMBIT 2.7",
|
|
135
|
+
"ha": "left",
|
|
136
|
+
"va": "bottom",
|
|
137
|
+
"color": "black",
|
|
138
|
+
"fontfamily": "Fira code",
|
|
139
|
+
"fontsize": 5.0,
|
|
140
|
+
"fontstyle": "normal",
|
|
141
|
+
"fontweight": "normal"
|
|
142
|
+
}
|
|
143
|
+
]
|
|
127
144
|
}
|
|
128
145
|
},
|
|
129
146
|
"Style": {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|