Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Colorscales in templates are not valid list of lists, which breaks `plotly.colors.sample_colorscale`

Abierto
#4,808 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
42/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
python

Línea de trabajo

Comienza con plotly.colors.validate_colorscale y sample_colorscale; después, rastrea cómo plotly.io.templates expone los valores de layout.colorscale mediante ColorscaleValidator. Compara el resultado integrado de tipo list-of-lists con el resultado de tipo tuple-of-tuples de la plantilla y la ruta de coerción existente; se considera terminado cuando los colores de las plantillas se pueden pasar a sample_colorscale sin el error de validación indicado.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug P3

Hello! I have something which is maybe a bug. It's certainly how I expected plotly.py to work, although maybe it's just a known limitation of how layout templates work.

Plotly comes with various colorscales built in, which work great:

import plotly
rainbow = plotly.colors.get_colorscale("rainbow")
# gives
[[0.0, 'rgb(150,0,90)'],
 [0.125, 'rgb(0,0,200)'],
 [0.25, 'rgb(0,25,255)'],
 [0.375, 'rgb(0,152,255)'],
 [0.5, 'rgb(44,255,150)'],
 [0.625, 'rgb(151,255,0)'],
 [0.75, 'rgb(255,234,0)'],
 [0.875, 'rgb(255,111,0)'],
 [1.0, 'rgb(255,0,0)']]

This is a list of lists and works as expected: plotly.colors.validate_colorscale(rainbow) passes.

Now I'd like to extract the colorscale from a template. This where things don't work as expected:

diverging  = plotly.io.templates["plotly"].layout.colorscale.diverging
# gives
((0, '#8e0152'),
 (0.1, '#c51b7d'),
 (0.2, '#de77ae'),
 (0.3, '#f1b6da'),
 (0.4, '#fde0ef'),
 (0.5, '#f7f7f7'),
 (0.6, '#e6f5d0'),
 (0.7, '#b8e186'),
 (0.8, '#7fbc41'),
 (0.9, '#4d9221'),
 (1, '#276419'))

This is a tuple of tuples and does not pass plotly.colors.validate_colorscale(diverging), which raises:

_plotly_utils.exceptions.PlotlyError: A valid colorscale must be a list.

It's easy to convert this into a valid colorscale as diverging = [list(x) for x in diverging] but it seems strange that this is necessary.

Should the colorscale coming from a template be a list of lists already? Or should validate_colorscale accept tuple of tuples as valid? The real reason this matters is because plotly.colors.sample_colorscale runs validate_colorscale under the hood, which raises an error and means that sample_colorscale doesn't work.


Side note

AFAICT there's no way register a new colorscale in plotly other than through a template. plotly.colors.named_colorscales comes from _plotly_utils.basevalidators.ColorscaleValidator.named_colorscales, but that's private and has no method for adding a new scale.

ColorscaleValidator("", "").validate_coerce(diverging) works to do the tuple of tuples to list of lists conversion, but again it's not public, and it seems weird that it would be necessary to run any coercion on a colorscale coming from a template anyway.

Lenguaje dominante
Python
Estrellas
18.8k
Forks
2.8k
Merge medio
13 h 41 min
PR fusionados (30 d)
21

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de plotly/plotly.py

Todos los issues de plotly/plotly.py

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.