Inconsistent theme updates using `template`
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 18.8k
- Forks
- 2.8k
- Merge medio
- 16 h 26 min
- PR fusionados (30 d)
- 21
Descripción
According to Theming and templates in Python, a figure can be created using a predefined template or updated to match it. However, the way updates happen is confusing if not inconsistent. Consider the examples below for plotly[express] == 6.2.0.
Plotly Express
import plotly.express as px
df = px.data.iris()
# uses the default `plotly` template
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="petal_length", title="Figure 1")
fig.show()
# update to use another template, note that the colour scale is unchanged
fig.update_layout(template="seaborn", title="Figure 2")
fig.show()
# this is not equivalent to Figure 2
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="petal_length", template="seaborn", title="Figure 3")
fig.show()
So Figure 3 is not the same as Figure 2, at least because the colour scales don't match. For custom themes, I can imagine that there may be other components of the figure object that would differ. As far as I know, there is no way to update traces using a template, e.g., fig.update_traces(template="seaborn"), to adjust non-layout settings.
Plotly Graph Object
To make things more confusing, there is a Specifying themes in graph object figures example in the documentation that does the same, but it actually works as expected. Adjusting the example we get:
import plotly.express as px
import plotly.graph_objects as go
df = px.data.iris()
# uses the default `plotly` template
fig = go.Figure(
data=go.Scatter(
x=df["sepal_width"],
y=df["sepal_length"],
mode="markers",
marker={
"color": df["petal_length"],
"showscale": True,
},
)
)
fig.update_layout(title="Figure 4")
fig.show()
# update to use another template, note that the colour scale has changed as expected
fig.update_layout(template="seaborn", title="Figure 5")
fig.show()
However, specifying an explicit colorscale will prevent a template update from setting its own colour scheme:
# same as Figure 4 but with an explicit `colorscale`
fig = go.Figure(
data=go.Scatter(
x=df["sepal_width"],
y=df["sepal_length"],
mode="markers",
marker={
"color": df["petal_length"],
"colorscale": "Viridis", # or any other colour scale
"showscale": True,
},
)
)
fig.update_layout(title="Figure 6")
fig.show()
# no longer matches Figure 5
fig.update_layout(template="seaborn", title="Figure 7")
fig.show()
Suggestions
- I would expect
fig.update_layout(template="seaborn")to have the same effect, regardless of whetherpxorgointerface is used. From this perspective, to result for Figure 2 is a bug (the colour scale should have changed forseaborntemplate). - When an existing figure is updated, the settings from a template should take precedence over any existing settings. So Figure 5 and Figure 7 should produce the same result. This would entail that an update in Figure 7 overwrites whatever the
colorscalesetting Figure 6 has with that of a template provided inupdate_layout.
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Empieza reproduciendo los ejemplos de Plotly Express y graph-object usando template y update_layout, incluido el caso con colorscale explícito. Compara cómo Figure 2/3 y Figure 5/7 resuelven la configuración de template y, después, aclara cuál de los dos comportamientos propuestos es el previsto. Se considera terminado cuando la semántica aceptada de actualización de template es coherente en ambas interfaces y los ejemplos documentados ya no divergen.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- data-visualization
- Tipo de issue
- Error
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Estancado
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 25/100