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"