plotly / plotly/plotly.py

Multiple legends are not independent in their placement and placement is not consistent

Offen
#4,367 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug P3
Vorherrschende Sprache
Python
Sterne
18.8k
Forks
2.8k
Ø Merge
16 Std. 26 Min.
Gemergte PRs (30 T.)
21

Beschreibung

I am currently experimenting with the new-ish multi-legend feature. Unfortunately I seem to have stumbled across a case in which the legends are not behaving independently even though it is not clear why.

The following code demonstrates this:

from copy import deepcopy
import plotly.graph_objects as go

error_fig = {
    'data': [
        {
            'legend': 'legend2',
            'showlegend': True,
            'type': 'scatter',
            'x': [0, 1],
            'xaxis': 'x2',
            'y': [0, -1],
            'yaxis': 'y2'
        },
        {
            'legend': 'legend3',
            'showlegend': True,
            'type': 'scatter',
            'x': [0, 1],
            'xaxis': 'x3',
            'y': [0, 1],
            'yaxis': 'y3'
        },
        {
            'legend': 'legend3',
            'showlegend': True,
            'type': 'scatter',
            'x': [0, 1],
            'xaxis': 'x3',
            'y': [0, -1],
            'yaxis': 'y3'
        },
        {
            'legend': 'legend3',
            'showlegend': True,
            'type': 'scatter',
            'x': [0, 1],
            'xaxis': 'x3',
            'y': [0, 1],
            'yaxis': 'y3'
        },
        {
            'legend': 'legend3',
            'showlegend': True,
            'type': 'scatter',
            'x': [0, 1],
            'xaxis': 'x3',
            'y': [0, 1],
            'yaxis': 'y3'
        }
    ],
    'layout': {
        'legend2': {
            'orientation': 'v',
            'visible': True,
            'x': 0.515,
            'xanchor': 'left',
            'xref': 'paper',
            'y': 0.3,
            'yanchor': 'top',
            'yref': 'paper'
        },
        'legend3': {
            'entrywidth': 0.2,
            'entrywidthmode': 'fraction',
            'orientation': 'h',
            'visible': True,
            'x': 0.95,
            'xanchor': 'left',
            'xref': 'paper',
            'y': 1.0,
            'yanchor': 'top',
            'yref': 'paper'
        },
        'xaxis2': {'anchor': 'y2', 'domain': [0, 0.5]},
        'xaxis3': {'anchor': 'y3', 'domain': [0.45, 0.95]},
        'yaxis2': {'anchor': 'x2', 'domain': [0, 0.3]},
        'yaxis3': {'anchor': 'x3', 'domain': [0.7, 1.0]}
    }
}


correct_fig = deepcopy(error_fig)
correct_fig["layout"]["legend3"]["x"] = 1

fig_correct = go.Figure(correct_fig)
fig_correct.show()

fig_error = go.Figure(error_fig)
fig_error.show()

Where fig_correct produces this output upon png-download (The issue also exists in interactive mode with varying severity based on screen size):
correct

fig_error produces this:
error

Which for me makes no sense as the only change that occurred was the placement of legend3 along x. I would therefore not expect legend2 to move. Additionally, for me it does not make any sense, why any large movement should occur at all, as I only changed the x-coordinate of legend3 by 0.05 .

For me the Issue only occurs when using "orientation": "h".


I am on Python 3.11.1
My pip dump:

Package    Version
---------- -------
packaging  23.1
pip        22.3.1
plotly     5.17.0
setuptools 65.5.0
tenacity   8.2.3

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Führen Sie zunächst die bereitgestellte Python-Reproduktion mit Plotly 5.17.0 aus und vergleichen Sie die horizontalen Multi-Legenden-Layouts im interaktiven Modus und in der PNG-Ausgabe. Da keine Quelldatei oder kein Test genannt ist, verfolgen Sie die Einstiegspunkte für die Legendenplatzierung und das Layout-Rendering anhand der Reproduktion; als erledigt gilt die Aufgabe, wenn das Verschieben von legend3 legend2 nicht mehr unerwartet verschiebt oder eine unverhältnismäßige Bewegung verursacht.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
data-visualization
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
38/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.