From e1707375a06474932f5242be4a3ee3b410841138 Mon Sep 17 00:00:00 2001 From: Auguste Baum Date: Tue, 29 Oct 2024 12:29:40 +0100 Subject: [PATCH] fix(docs): Add screenshot of cross-validation plot This is a quick fix to address #594. In the end, I took a screenshot manually (by using the "Download plot as png" button of the Plotly widget) and displayed it with matplotlib. Here are all the alternatives I considered, and what didn't work with them: - Use SVG instead of PNG - For that, I'd need to use Plotly's `fig.write_image`, and the library that Plotly uses for this, Kaleido, is currently broken: https://github.com/plotly/Kaleido/issues/210 - Export plotly figure to a file during the example and read it - For that I also need Plotly's `fig.write_image` - Use Pillow for displaying, instead of matplotlib (which is not really made for that) - Only matplotlib is supported by sphinx-gallery, the library that renders the examples --- examples/plot_03_cross_validate.py | 15 +++++++++++++++ .../plot_03_cross_validate_plot_screenshot.png | Bin 0 -> 32790 bytes 2 files changed, 15 insertions(+) create mode 100644 examples/plot_03_cross_validate_plot_screenshot.png diff --git a/examples/plot_03_cross_validate.py b/examples/plot_03_cross_validate.py index 7a02f65a..1a420b31 100644 --- a/examples/plot_03_cross_validate.py +++ b/examples/plot_03_cross_validate.py @@ -36,3 +36,18 @@ cv_results = cross_validate(lasso, X, y, cv=3, project=my_project_gs) my_project_gs.get_item("cross_validation").plot + +# %% +# Because Plotly graphs currently do not yet properly render in our docs engine due to `a bug in Plotly `_, +# we also show a screenshot below. +# Alternatively, if you zoom in or out in your browser window, the Plotly graph should display properly again. + +import matplotlib.pyplot as plt +import matplotlib.image as mpimg + +img = mpimg.imread("plot_03_cross_validate_plot_screenshot.png") +fig, ax = plt.subplots() +# fig.tight_layout(pad=0.01) +fig.subplots_adjust(left=0.01, right=0.99, bottom=0.01, top=0.99) +ax.axis("off") +ax.imshow(img) diff --git a/examples/plot_03_cross_validate_plot_screenshot.png b/examples/plot_03_cross_validate_plot_screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..a83c66ba992d8ec90095c3df681788a5d62df91b GIT binary patch literal 32790 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 literal 0 HcmV?d00001