.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "plotly/auto_examples/plot_plotly_demo_styles.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_plotly_auto_examples_plot_plotly_demo_styles.py: Plotly Style Demo ================= This script demonstrates some available styles. .. GENERATED FROM PYTHON SOURCE LINES 7-167 .. image-sg:: /plotly/auto_examples/images/sphx_glr_plot_plotly_demo_styles_001.png :alt: plot plotly demo styles :srcset: /plotly/auto_examples/images/sphx_glr_plot_plotly_demo_styles_001.png :class: sphx-glr-single-img .. code-block:: Python # External imports import io import numpy as np from PIL import Image import plotly import plotly.graph_objects as go import plotly.io as pio # Internal imports import postprocessing.plotly as pp_plty def gaussian(x, mu, sig): return 1.0 / (np.sqrt(2.0 * np.pi) * sig) * np.exp(-np.power((x - mu) / sig, 2.0) / 2) def main(): # Get styles styles = pp_plty.utils.get_available_styles() # Generate analytic gaussian distribution x_min = -3 x_max = 3 x_line = np.linspace(x_min, x_max, 1000) y_line = gaussian(x_line, 0, 1) mask = (x_line >= -1) & (x_line <= 1) x_fill = np.concatenate(([x_line[mask][0]], x_line[mask], [x_line[mask][-1]])) y_fill = np.concatenate(([0], y_line[mask], [0])) # Generate some fake "measured" data points with some noise np.random.seed(0) x_rand = np.random.uniform(x_min, x_max, 45) y_rand = gaussian(x_rand, 0, 1) + np.random.normal(0, 0.02, len(x_rand)) y_rand[y_rand < 0] += 0.05 # Create a version of the plot with each niceplots style and the default plotly style figure_bytes = [] for formatting in ["default"] + styles: # Use the style to determine plot properties pio.templates[formatting] = pp_plty.get_style(formatting) pio.templates.default = formatting if formatting != "default": colors = pp_plty.get_colors(rcParams=True) bg_color = colors["Background"] label_color = colors["Label"] colors = list(colors.values()) else: # colors = plotly.colors.DEFAULT_PLOTLY_COLORS colors = plotly.colors.qualitative.Plotly bg_color = "white" label_color = "gray" # Initialize figure fig = go.Figure() # Create scatter traces for the line and markers fig.add_trace(go.Scatter(x=x_line, y=y_line, mode="lines", name="Calculated", line=dict(color=colors[0]))) fig.add_trace(go.Scatter(x=x_rand, y=y_rand, mode="markers", name="Measured", marker=dict(color=colors[1]))) # Add a shaded +/- 1 std dev region fig.add_trace( go.Scatter( x=x_fill, y=y_fill, fill="toself", fillcolor=label_color, opacity=0.2, line=dict(color="rgba(0,0,0,0)"), # Hide the line name="68.27%", showlegend=False, ), ) # Add annotations fig.add_annotation(text="Calculated", x=-1.5, y=0.2, showarrow=False, font=dict(color=fig.data[0].line.color)) fig.add_annotation(text="Measured", x=0.7, y=0.395, showarrow=False, font=dict(color=fig.data[1].marker.color)) fig.add_annotation(text="68.27%", x=0, y=0.085, showarrow=False, font=dict(color=label_color)) fig.add_annotation( x=-1, y=0.07, ax=0.0, ay=0.07, standoff=0, xref="x", yref="y", axref="x", ayref="y", arrowhead=2, arrowsize=1, arrowwidth=2, arrowcolor=label_color, xanchor="left", ) fig.add_annotation( x=1, y=0.07, ax=0.0, ay=0.07, standoff=0, xref="x", yref="y", axref="x", ayref="y", arrowhead=2, arrowsize=1, arrowwidth=2, arrowcolor=label_color, xanchor="right", ) # Customize each subplot's appearance fig.update_xaxes( title_text="$\\text{Some variable, }x$", tickvals=[x_min, -1, 0, 1, x_max], range=[x_min - 0.025, x_max + 0.025], ) fig.update_yaxes( title_text="$\\mathbb{E}(x, \\mu=0, \\sigma=1)$", tickvals=[0, 0.4], range=[0 - 0.01, 0.4 + 0.01] ) if formatting != "default": fig.update_layout(paper_bgcolor=bg_color, plot_bgcolor=bg_color) # Adjust layout settings for better spacing # fig.update_traces(cliponaxis=False) fig.update_layout( width=1000, height=400, title=formatting, showlegend=False, margin=dict(l=50, r=50, t=50, b=75), ) # Store figure img_bytes = io.BytesIO() pio.write_image(fig, img_bytes, format="png") img_bytes.seek(0) figure_bytes.append(img_bytes.getvalue()) # Convert byte data to PIL images images = [Image.open(io.BytesIO(b)) for b in figure_bytes] # Combine images vertically total_height = sum(img.height for img in images) max_width = max(img.width for img in images) combined_image = Image.new("RGBA", (max_width, total_height)) # Paste each image into the combined image y_offset = 0 for img in images: combined_image.paste(img, (0, y_offset)) y_offset += img.height # Save the combined image combined_image.save("plotly_demo_styles.png") if __name__ == "__main__": main() .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 4.656 seconds) .. _sphx_glr_download_plotly_auto_examples_plot_plotly_demo_styles.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_plotly_demo_styles.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_plotly_demo_styles.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_plotly_demo_styles.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_