Files
MLPproject/.venv/lib/python3.12/site-packages/plotly/matplotlylib/tests/test_renderer.py
2025-10-23 15:44:32 +02:00

87 lines
2.9 KiB
Python

import matplotlib.pyplot as plt
import plotly.tools as tls
def test_native_legend_enabled_when_matplotlib_legend_present():
"""Test that when matplotlib legend is present, Plotly uses native legend."""
fig, ax = plt.subplots()
ax.plot([0, 1], [0, 1], label="Line 1")
ax.plot([0, 1], [1, 0], label="Line 2")
ax.legend()
plotly_fig = tls.mpl_to_plotly(fig)
# Should enable native legend
assert plotly_fig.layout.showlegend == True
# Should have 2 traces with names
assert len(plotly_fig.data) == 2
assert plotly_fig.data[0].name == "Line 1"
assert plotly_fig.data[1].name == "Line 2"
def test_no_fake_legend_shapes_with_native_legend():
"""Test that fake legend shapes are not created when using native legend."""
fig, ax = plt.subplots()
ax.plot([0, 1], [0, 1], "o-", label="Data with markers")
ax.legend()
plotly_fig = tls.mpl_to_plotly(fig)
# Should use native legend
assert plotly_fig.layout.showlegend == True
# Should not create fake legend elements
assert len(plotly_fig.layout.shapes) == 0
assert len(plotly_fig.layout.annotations) == 0
def test_legend_disabled_when_no_matplotlib_legend():
"""Test that legend is not enabled when no matplotlib legend is present."""
fig, ax = plt.subplots()
ax.plot([0, 1], [0, 1], label="Line 1") # Has label but no legend() call
plotly_fig = tls.mpl_to_plotly(fig)
# Should not have showlegend explicitly set to True
# (Plotly's default behavior when no legend elements exist)
assert (
not hasattr(plotly_fig.layout, "showlegend")
or plotly_fig.layout.showlegend != True
)
def test_legend_disabled_when_matplotlib_legend_not_visible():
"""Test that legend is not enabled when no matplotlib legend is not visible."""
fig, ax = plt.subplots()
ax.plot([0, 1], [0, 1], label="Line 1")
legend = ax.legend()
legend.set_visible(False) # Hide the legend
plotly_fig = tls.mpl_to_plotly(fig)
# Should not enable legend when matplotlib legend is hidden
assert (
not hasattr(plotly_fig.layout, "showlegend")
or plotly_fig.layout.showlegend != True
)
def test_multiple_traces_native_legend():
"""Test native legend works with multiple traces of different types."""
fig, ax = plt.subplots()
ax.plot([0, 1, 2], [0, 1, 0], "-", label="Line")
ax.plot([0, 1, 2], [1, 0, 1], "o", label="Markers")
ax.plot([0, 1, 2], [0.5, 0.5, 0.5], "s-", label="Line+Markers")
ax.legend()
plotly_fig = tls.mpl_to_plotly(fig)
assert plotly_fig.layout.showlegend == True
assert len(plotly_fig.data) == 3
assert plotly_fig.data[0].name == "Line"
assert plotly_fig.data[1].name == "Markers"
assert plotly_fig.data[2].name == "Line+Markers"
# Verify modes are correct
assert plotly_fig.data[0].mode == "lines"
assert plotly_fig.data[1].mode == "markers"
assert plotly_fig.data[2].mode == "lines+markers"