maidr 1.8.1__tar.gz → 1.9.0__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.
- {maidr-1.8.1 → maidr-1.9.0}/CHANGELOG.md +8 -0
- {maidr-1.8.1 → maidr-1.9.0}/PKG-INFO +1 -1
- {maidr-1.8.1 → maidr-1.9.0}/maidr/__init__.py +1 -1
- {maidr-1.8.1 → maidr-1.9.0}/maidr/api.py +17 -12
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/maidr.py +88 -37
- {maidr-1.8.1 → maidr-1.9.0}/pyproject.toml +1 -1
- {maidr-1.8.1 → maidr-1.9.0}/uv.lock +1 -1
- {maidr-1.8.1 → maidr-1.9.0}/.commitlintrc.cjs +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/.editorconfig +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/.github/copilot-instructions.md +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/.github/workflows/ci.yml +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/.github/workflows/docs.yml +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/.github/workflows/release.yml +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/.gitignore +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/.pre-commit-config.yaml +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/.vscode/extensions.json +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/.vscode/settings.json +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/CONDUCT.md +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/CONTRIBUTING.md +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/LICENSE +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/README.md +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/docs/.gitignore +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/docs/CNAME +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/docs/_environment +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/docs/_extensions/machow/interlinks/.gitignore +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/docs/_extensions/machow/interlinks/_extension.yml +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/docs/_extensions/machow/interlinks/interlinks.lua +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/docs/_extensions/shafayetShafee/line-highlight/_extension.yml +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/docs/_extensions/shafayetShafee/line-highlight/line-highlight.lua +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/docs/_extensions/shafayetShafee/line-highlight/resources/css/line-highlight.css +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/docs/_extensions/shafayetShafee/line-highlight/resources/js/line-highlight.js +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/docs/_quarto.yml +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/docs/examples.qmd +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/docs/index.qmd +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/docs/styles.css +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/bar/example_bar_plot.ipynb +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/bar/matplotlib/example_mpl_bar_plot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/bar/seaborn/example_sns_bar_plot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/box/example_box_plot.ipynb +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/box/matplotlib/example_mpl_box.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/box/seaborn/example_sns_box.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/candle_stick/legacy_candlestick_example.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/candle_stick/mplfinance_candlestick_example.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/candle_stick/test_data_daily_current_year.csv +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/candle_stick/test_data_daily_mixed_years.csv +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/candle_stick/test_data_hourly.csv +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/candle_stick/test_data_minute.csv +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/candle_stick/test_data_weekly.csv +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/candle_stick/volcandat.csv +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/count/example_count_plot.ipynb +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/count/seaborn/example_sns_count_plot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/dodged/matplotlib/example_mpl_dodged.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/dodged/seaborn/example_sns_dodged.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/facet-subplots/matplotlib/example_mpl_facet_bar_plot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/facet-subplots/matplotlib/example_mpl_facet_combined_plot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/facet-subplots/seaborn/example_sns_facet_bar_plot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/facet-subplots/seaborn/example_sns_facet_combined_plot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/flask/test_flask_app.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/heatmap/example_heatmap_plot.ipynb +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/heatmap/matplotlib/example_mpl_heatmap.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/heatmap/seaborn/example_sns_heatmap.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/histogram/example_histogram_plot.ipynb +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/histogram/matplotlib/example_mpl_hist.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/histogram/matplotlib/histogram_with_kde_matplotlib.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/histogram/seaborn/example_sns_hist.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/histogram/seaborn/histogram_with_kde_seaborn.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/kde/example_kde_plots.ipynb +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/kde/matplotlib/multiple_kde_matplotlib.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/kde/matplotlib/single_kde_matplotlib.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/kde/seaborn/multiple_kde_seaborn.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/kde/seaborn/single_kde_seaborn.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/line/example_line_plot.ipynb +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/line/matplotlib/example_mpl_line.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/line/seaborn/example_sns_line.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/multilayer/example_mpl_multilayer.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/multilayer/example_multilayer_plot.ipynb +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/multiline/example_multiline_plot.ipynb +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/multiline/matplotlib/example_mpl_multiline.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/multiline/seaborn/example_sns_multiline.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/multipanel/example_multipanel_plot.ipynb +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/multipanel/matplotlib/example_mpl_multipanel.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/multipanel/seaborn/example_sns_multipanel.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/quarto/demo.qmd +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/reg/example_reg_plots.ipynb +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/reg/matplotlib/example_matplotlib_smooth_plot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/reg/seaborn/example_sns_reg.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/scatter/example_scatter_plot.ipynb +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/scatter/matplotlib/example_mpl_scatter.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/scatter/seaborn/example_sns_scatter.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/shiny/example_shiny_scatter.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/stacked/matplotlib/example_mpl_stacked.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/stacked/seaborn/example_sns_stacked.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/example/streamlit/example_streamlit_app.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/__init__.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/context_manager.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/enum/__init__.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/enum/library.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/enum/maidr_key.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/enum/plot_type.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/enum/smooth_keywords.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/figure_manager.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/plot/__init__.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/plot/barplot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/plot/boxplot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/plot/candlestick.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/plot/grouped_barplot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/plot/heatmap.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/plot/histogram.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/plot/lineplot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/plot/maidr_plot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/plot/maidr_plot_factory.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/plot/mplfinance_barplot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/plot/mplfinance_lineplot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/plot/regplot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/core/plot/scatterplot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/exception/__init__.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/exception/extraction_error.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/patch/__init__.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/patch/barplot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/patch/boxplot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/patch/candlestick.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/patch/clear.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/patch/common.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/patch/heatmap.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/patch/highlight.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/patch/histogram.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/patch/kdeplot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/patch/lineplot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/patch/mplfinance.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/patch/regplot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/patch/scatterplot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/util/__init__.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/util/datetime_conversion.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/util/dedup_utils.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/util/environment.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/util/mixin/__init__.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/util/mixin/extractor_mixin.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/util/mixin/merger_mixin.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/util/mplfinance_utils.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/util/plot_detection.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/util/regression_line_utils.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/util/svg_utils.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/widget/__init__.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/maidr/widget/shiny.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/tests/__init__.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/tests/conftest.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/tests/core/__init__.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/tests/core/enum/__init__.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/tests/core/plot/__init__.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/tests/core/test_figure_manager.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/tests/core/test_maidr_plot.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/tests/core/test_maidr_plot_factory.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/tests/fixture/__init__.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/tests/fixture/library_factory.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/tests/fixture/matplotlib_factory.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/tests/fixture/seaborn_factory.py +0 -0
- {maidr-1.8.1 → maidr-1.9.0}/tox.ini +0 -0
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
## v1.9.0 (2025-10-31)
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
- Add data_in_svg parameter for save_html ([#257](https://github.com/xability/py-maidr/pull/257),
|
|
9
|
+
[`17d65ee`](https://github.com/xability/py-maidr/commit/17d65eee06ac3209ef3a91ebd623a5a6d0b16e79))
|
|
10
|
+
|
|
11
|
+
|
|
4
12
|
## v1.8.1 (2025-10-16)
|
|
5
13
|
|
|
6
14
|
### Bug Fixes
|
|
@@ -14,12 +14,12 @@ from maidr.core.figure_manager import FigureManager
|
|
|
14
14
|
def _get_plot_or_current(plot: Any | None) -> Any:
|
|
15
15
|
"""
|
|
16
16
|
Get the plot object or current matplotlib figure if plot is None.
|
|
17
|
-
|
|
17
|
+
|
|
18
18
|
Parameters
|
|
19
19
|
----------
|
|
20
20
|
plot : Any or None
|
|
21
21
|
The plot object. If None, returns the current matplotlib figure.
|
|
22
|
-
|
|
22
|
+
|
|
23
23
|
Returns
|
|
24
24
|
-------
|
|
25
25
|
Any
|
|
@@ -28,7 +28,7 @@ def _get_plot_or_current(plot: Any | None) -> Any:
|
|
|
28
28
|
if plot is None:
|
|
29
29
|
# Lazy import matplotlib.pyplot when needed
|
|
30
30
|
import matplotlib.pyplot as plt
|
|
31
|
-
|
|
31
|
+
|
|
32
32
|
return plt.gcf()
|
|
33
33
|
return plot
|
|
34
34
|
|
|
@@ -48,7 +48,7 @@ def render(plot: Any | None = None) -> Tag:
|
|
|
48
48
|
The rendered HTML representation of the plot.
|
|
49
49
|
"""
|
|
50
50
|
plot = _get_plot_or_current(plot)
|
|
51
|
-
|
|
51
|
+
|
|
52
52
|
ax = FigureManager.get_axes(plot)
|
|
53
53
|
if isinstance(ax, list):
|
|
54
54
|
for axes in ax:
|
|
@@ -82,7 +82,7 @@ def show(
|
|
|
82
82
|
The display result.
|
|
83
83
|
"""
|
|
84
84
|
plot = _get_plot_or_current(plot)
|
|
85
|
-
|
|
85
|
+
|
|
86
86
|
ax = FigureManager.get_axes(plot)
|
|
87
87
|
if isinstance(ax, list):
|
|
88
88
|
for axes in ax:
|
|
@@ -95,10 +95,11 @@ def show(
|
|
|
95
95
|
|
|
96
96
|
def save_html(
|
|
97
97
|
plot: Any | None = None,
|
|
98
|
-
*,
|
|
98
|
+
*,
|
|
99
99
|
file: str,
|
|
100
|
-
lib_dir: str | None = "lib",
|
|
101
|
-
include_version: bool = True
|
|
100
|
+
lib_dir: str | None = "lib",
|
|
101
|
+
include_version: bool = True,
|
|
102
|
+
data_in_svg: bool = True,
|
|
102
103
|
) -> str:
|
|
103
104
|
"""
|
|
104
105
|
Save a MAIDR plot as HTML file.
|
|
@@ -113,6 +114,8 @@ def save_html(
|
|
|
113
114
|
Directory name for libraries.
|
|
114
115
|
include_version : bool, default True
|
|
115
116
|
Whether to include version information.
|
|
117
|
+
data_in_svg : bool, default True
|
|
118
|
+
Controls where the MAIDR JSON payload is placed in the HTML or SVG.
|
|
116
119
|
|
|
117
120
|
Returns
|
|
118
121
|
-------
|
|
@@ -120,19 +123,21 @@ def save_html(
|
|
|
120
123
|
The path to the saved HTML file.
|
|
121
124
|
"""
|
|
122
125
|
plot = _get_plot_or_current(plot)
|
|
123
|
-
|
|
126
|
+
|
|
124
127
|
ax = FigureManager.get_axes(plot)
|
|
125
128
|
htmls = []
|
|
126
129
|
if isinstance(ax, list):
|
|
127
130
|
for axes in ax:
|
|
128
131
|
maidr = FigureManager.get_maidr(axes.get_figure())
|
|
129
|
-
htmls.append(maidr._create_html_doc(use_iframe=False))
|
|
132
|
+
htmls.append(maidr._create_html_doc(use_iframe=False, data_in_svg=data_in_svg))
|
|
130
133
|
return htmls[-1].save_html(
|
|
131
134
|
file, libdir=lib_dir, include_version=include_version
|
|
132
135
|
)
|
|
133
136
|
else:
|
|
134
137
|
maidr = FigureManager.get_maidr(ax.get_figure())
|
|
135
|
-
return maidr.save_html(
|
|
138
|
+
return maidr.save_html(
|
|
139
|
+
file, lib_dir=lib_dir, include_version=include_version, data_in_svg=data_in_svg
|
|
140
|
+
)
|
|
136
141
|
|
|
137
142
|
|
|
138
143
|
def stacked(plot: Axes | BarContainer) -> Maidr:
|
|
@@ -150,6 +155,6 @@ def close(plot: Any | None = None) -> None:
|
|
|
150
155
|
The plot object to close. If None, uses the current matplotlib figure.
|
|
151
156
|
"""
|
|
152
157
|
plot = _get_plot_or_current(plot)
|
|
153
|
-
|
|
158
|
+
|
|
154
159
|
ax = FigureManager.get_axes(plot)
|
|
155
160
|
FigureManager.destroy(ax.get_figure())
|
|
@@ -72,7 +72,12 @@ class Maidr:
|
|
|
72
72
|
return self._create_html_tag(use_iframe=True)
|
|
73
73
|
|
|
74
74
|
def save_html(
|
|
75
|
-
self,
|
|
75
|
+
self,
|
|
76
|
+
file: str,
|
|
77
|
+
*,
|
|
78
|
+
lib_dir: str | None = "lib",
|
|
79
|
+
include_version: bool = True,
|
|
80
|
+
data_in_svg: bool = True,
|
|
76
81
|
) -> str:
|
|
77
82
|
"""
|
|
78
83
|
Save the HTML representation of the figure with MAIDR to a file.
|
|
@@ -86,9 +91,11 @@ class Maidr:
|
|
|
86
91
|
(relative to the file's directory).
|
|
87
92
|
include_version : bool, default=True
|
|
88
93
|
Whether to include the version number in the dependency folder name.
|
|
94
|
+
data_in_svg : bool, default=True
|
|
95
|
+
Controls where the MAIDR JSON payload is placed in the output HTML or SVG.
|
|
89
96
|
"""
|
|
90
97
|
html = self._create_html_doc(
|
|
91
|
-
use_iframe=False
|
|
98
|
+
use_iframe=False, data_in_svg=data_in_svg
|
|
92
99
|
) # Always use direct HTML for saving
|
|
93
100
|
return html.save_html(file, libdir=lib_dir, include_version=include_version)
|
|
94
101
|
|
|
@@ -180,8 +187,17 @@ class Maidr:
|
|
|
180
187
|
else:
|
|
181
188
|
webbrowser.open(f"file://{html_file_path}")
|
|
182
189
|
|
|
183
|
-
def _create_html_tag(self, use_iframe: bool = True) -> Tag:
|
|
184
|
-
"""Create the MAIDR HTML using HTML tags.
|
|
190
|
+
def _create_html_tag(self, use_iframe: bool = True, data_in_svg: bool = True) -> Tag:
|
|
191
|
+
"""Create the MAIDR HTML using HTML tags.
|
|
192
|
+
|
|
193
|
+
Parameters
|
|
194
|
+
----------
|
|
195
|
+
use_iframe : bool, default=True
|
|
196
|
+
Whether to render the plot inside an iframe (for notebooks and similar envs).
|
|
197
|
+
data_in_svg : bool, default=True
|
|
198
|
+
If True, the MAIDR JSON is embedded in the root <svg> under attribute 'maidr'.
|
|
199
|
+
If False, a <script>var maidr = {...}</script> tag is injected instead.
|
|
200
|
+
"""
|
|
185
201
|
tagged_elements: list[Any] = [
|
|
186
202
|
element for plot in self._plots for element in plot.elements
|
|
187
203
|
]
|
|
@@ -191,16 +207,31 @@ class Maidr:
|
|
|
191
207
|
for _ in plot.elements:
|
|
192
208
|
selector_ids.append(self.selector_ids[i])
|
|
193
209
|
|
|
210
|
+
# Build schema once so id stays consistent across SVG and global var
|
|
211
|
+
schema = self._flatten_maidr()
|
|
212
|
+
|
|
194
213
|
with HighlightContextManager.set_maidr_elements(tagged_elements, selector_ids):
|
|
195
|
-
svg = self._get_svg()
|
|
196
|
-
|
|
214
|
+
svg = self._get_svg(embed_data=data_in_svg, schema=schema)
|
|
215
|
+
|
|
216
|
+
# Generate external payload if data is not embedded in SVG
|
|
217
|
+
maidr = None
|
|
218
|
+
if not data_in_svg:
|
|
219
|
+
maidr = f"\nvar maidr = {json.dumps(schema, indent=2)}\n"
|
|
197
220
|
|
|
198
221
|
# Inject plot's svg and MAIDR structure into html tag.
|
|
199
222
|
return Maidr._inject_plot(svg, maidr, self.maidr_id, use_iframe)
|
|
200
223
|
|
|
201
|
-
def _create_html_doc(self, use_iframe: bool = True) -> HTMLDocument:
|
|
202
|
-
"""Create an HTML document from Tag objects.
|
|
203
|
-
|
|
224
|
+
def _create_html_doc(self, use_iframe: bool = True, data_in_svg: bool = True) -> HTMLDocument:
|
|
225
|
+
"""Create an HTML document from Tag objects.
|
|
226
|
+
|
|
227
|
+
Parameters
|
|
228
|
+
----------
|
|
229
|
+
use_iframe : bool, default=True
|
|
230
|
+
Whether to render the plot inside an iframe (for notebooks and similar envs).
|
|
231
|
+
data_in_svg : bool, default=True
|
|
232
|
+
See _create_html_tag for details on payload placement strategy.
|
|
233
|
+
"""
|
|
234
|
+
return HTMLDocument(self._create_html_tag(use_iframe, data_in_svg), lang="en")
|
|
204
235
|
|
|
205
236
|
def _merge_plots_by_subplot_position(self) -> list[MaidrPlot]:
|
|
206
237
|
"""
|
|
@@ -312,10 +343,23 @@ class Maidr:
|
|
|
312
343
|
for cell in subplot_grid[i]
|
|
313
344
|
]
|
|
314
345
|
|
|
315
|
-
return {
|
|
346
|
+
return {
|
|
347
|
+
"id": Maidr._unique_id(),
|
|
348
|
+
"subplots": subplot_grid,
|
|
349
|
+
}
|
|
316
350
|
|
|
317
|
-
def _get_svg(self) -> HTML:
|
|
318
|
-
"""Extract the chart SVG from ``matplotlib.figure.Figure``.
|
|
351
|
+
def _get_svg(self, embed_data: bool = True, schema: dict | None = None) -> HTML:
|
|
352
|
+
"""Extract the chart SVG from ``matplotlib.figure.Figure``.
|
|
353
|
+
|
|
354
|
+
Parameters
|
|
355
|
+
----------
|
|
356
|
+
embed_data : bool, default=True
|
|
357
|
+
If True, embed the MAIDR JSON schema as an attribute named 'maidr' on
|
|
358
|
+
the root <svg> element. If False, do not embed JSON in the SVG.
|
|
359
|
+
schema : dict | None, default=None
|
|
360
|
+
If provided, this schema will be used (ensuring a consistent id across
|
|
361
|
+
the page). If None, a new schema will be generated.
|
|
362
|
+
"""
|
|
319
363
|
svg_buffer = io.StringIO()
|
|
320
364
|
self._fig.savefig(svg_buffer, format="svg")
|
|
321
365
|
str_svg = svg_buffer.getvalue()
|
|
@@ -323,12 +367,14 @@ class Maidr:
|
|
|
323
367
|
etree.register_namespace("svg", "http://www.w3.org/2000/svg")
|
|
324
368
|
tree_svg = etree.fromstring(str_svg.encode(), parser=None)
|
|
325
369
|
root_svg = None
|
|
326
|
-
# Find the `svg` tag and
|
|
370
|
+
# Find the `svg` tag and optionally embed MAIDR data.
|
|
327
371
|
for element in tree_svg.iter(tag="{http://www.w3.org/2000/svg}svg"):
|
|
328
|
-
if
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
)
|
|
372
|
+
current_schema = schema if schema is not None else self._flatten_maidr()
|
|
373
|
+
# Ensure SVG id matches schema id in both modes
|
|
374
|
+
if isinstance(current_schema, dict) and "id" in current_schema:
|
|
375
|
+
element.attrib["id"] = str(current_schema["id"]) # ensure match
|
|
376
|
+
if embed_data:
|
|
377
|
+
element.attrib["maidr"] = json.dumps(current_schema, indent=2)
|
|
332
378
|
root_svg = element
|
|
333
379
|
break
|
|
334
380
|
|
|
@@ -355,36 +401,41 @@ class Maidr:
|
|
|
355
401
|
return str(uuid.uuid4())
|
|
356
402
|
|
|
357
403
|
@staticmethod
|
|
358
|
-
def _inject_plot(plot: HTML, maidr: str, maidr_id, use_iframe: bool = True) -> Tag:
|
|
404
|
+
def _inject_plot(plot: HTML, maidr: str | None, maidr_id, use_iframe: bool = True) -> Tag:
|
|
359
405
|
"""Embed the plot and associated MAIDR scripts into the HTML structure."""
|
|
360
406
|
# Get the latest version from npm registry
|
|
361
407
|
MAIDR_TS_CDN_URL = "https://cdn.jsdelivr.net/npm/maidr@latest/dist/maidr.js"
|
|
362
408
|
|
|
363
409
|
script = f"""
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
}}
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
410
|
+
(function() {{
|
|
411
|
+
var existing = document.querySelector('script[src="{MAIDR_TS_CDN_URL}"]');
|
|
412
|
+
if (!existing) {{
|
|
413
|
+
var s = document.createElement('script');
|
|
414
|
+
s.src = '{MAIDR_TS_CDN_URL}';
|
|
415
|
+
s.onload = function() {{ if (window.main) window.main(); }};
|
|
416
|
+
document.head.appendChild(s);
|
|
417
|
+
}} else {{
|
|
418
|
+
if (document.readyState === 'loading') {{
|
|
419
|
+
document.addEventListener('DOMContentLoaded', function() {{ if (window.main) window.main(); }});
|
|
420
|
+
}} else {{
|
|
421
|
+
if (window.main) window.main();
|
|
422
|
+
}}
|
|
423
|
+
}}
|
|
424
|
+
}})();
|
|
378
425
|
"""
|
|
379
426
|
|
|
380
|
-
|
|
427
|
+
children = [
|
|
381
428
|
tags.link(
|
|
382
429
|
rel="stylesheet",
|
|
383
430
|
href="https://cdn.jsdelivr.net/npm/maidr@latest/dist/maidr_style.css",
|
|
384
|
-
)
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
431
|
+
)
|
|
432
|
+
]
|
|
433
|
+
if maidr is not None:
|
|
434
|
+
children.append(tags.script(maidr, type="text/javascript"))
|
|
435
|
+
children.append(tags.script(script, type="text/javascript"))
|
|
436
|
+
children.append(tags.div(plot))
|
|
437
|
+
|
|
438
|
+
base_html = tags.div(*children)
|
|
388
439
|
|
|
389
440
|
# is_quarto = os.getenv("IS_QUARTO") == "True"
|
|
390
441
|
|
|
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
|
{maidr-1.8.1 → maidr-1.9.0}/docs/_extensions/shafayetShafee/line-highlight/line-highlight.lua
RENAMED
|
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
|
{maidr-1.8.1 → maidr-1.9.0}/example/facet-subplots/matplotlib/example_mpl_facet_combined_plot.py
RENAMED
|
File without changes
|
|
File without changes
|
{maidr-1.8.1 → maidr-1.9.0}/example/facet-subplots/seaborn/example_sns_facet_combined_plot.py
RENAMED
|
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
|
|
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
|