R ggplotly to Python plotly conversion issues (with beginnings of a possible fix)
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
Hello Plotly team! I want to make graphs in R’s ggplotly and then run existing Plotly Python code to reformat them. However, I’m getting errors when importing a ggplotly JSON created in R into Plotly in Python.
To fix these errors, I have to resort to either running code to fix them in the JSON (2a below) or setting pio.read_json()’s skip_invalid parameter to true (2b below). , I believe the JSON is valid because 1) The JSON renders correctly in Plotly.js 2) The JSON comes from simple graphs made in ggplotly.
R code:
library(ggplot2)
library(plotly)
# Data
a = data.frame(x = (0:4), y = c(2, 4, 1, 6, 8), group="A")
b = data.frame(x = (0:4), y = c(3, 2, 5, 4, 7), group="B")
data <- rbind(a, b)
# Graph
fig <- ggplot(data, aes(x, y, color = group)) + geom_line()
#Convert to ggplotly, save as JSON, and export
fig_ggplotly <- ggplotly(fig)
fig_ggplotly_json<-plotly_json(fig_ggplotly, FALSE)
write(fig_ggplotly_json,'fig_ggplotly.json')
2a: Python code - Errors when using json.load( )
import json
import sys
with open(“fig_ggplotly.json", "r") as f:
fig_ggplotly_json = json.load(f)
print(fig_ggplotly_json)
go.Figure(fig_ggplotly_json) # throws errors; solved with ggplotly_to_plotly.py
# Example of invalid parameter:
fig_ggplotly_json['layout']['font']['family'] # shows value as ‘’. Does not throw error.
2b: Python code - Using pio.read_json() with skip_invalid=True
import json
import sys
import plotly.io as pio
with open("fig_ggplotly.json", "r") as f:
fig_ggplotly_pio = pio.read_json(f, skip_invalid=True)
# Example of invalid parameter that gets completely eliminated using skip_invalid, causing later issues:
fig_ggplotly_pio.to_dict()['layout']['font']['family'] #throws KeyError
Skipping elements of the JSON seems to be inviting a loss of fidelity. Indeed, the reformatting code I apply has issues handling some elements due to the skipped invalid parameters. I’ve identified a number of specific elements that are not compatible with Plotly.py and would appreciate it if Plotly.py were to handle this valid input correctly. The ggplotly_to_plotly conversion code, which highlights many of the problem areas for basic graphs, can be found here.
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
Comienza reproduciendo la exportación de R ggplotly proporcionada e importándola con pio.read_json() y go.Figure() de Python. Lee el gist enlazado ggplotly_to_plotly.py para conocer las incompatibilidades identificadas. Se considera completado cuando los JSON compatibles de ggplotly se importan sin skip_invalid=True, preservando campos como layout.font.family.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python, r
- Área
- data-visualization
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 35/100