Plotly
Plotly és una llibreria per generar gràfics interactius amb JavaScript.
Introducció
Plotly.js és una llibreria que ens permet crear gràfics interactius.
L’usuari també pot interactuar amb aquests gràfics des del navegador, per obtenir informació addicional que seria més difícil presentar en una imatge fixe, i en general la experiència és més atractiva.
Pots consultar aquest projecte: https://gitlab.com/xtec/ts/plotly
Entorn de treball
Hi ha dues formes de treballar amb Plotly.
La més clàssica és el projecte de Python Plotly Express. Aquesta encara és prou comú degut a que va ser la primera que es va crear, i també perquè el seu ús resulta més senzill per a perfils professionals que no tenen prou coneixements de creació de desenvolupament web.
En canvi, a nosaltres com a especialistes en desenvolupament web ens interessa Plotly Javascript.
Ens interessa delegar la creació del gràfic al client (al navegador, que usa Javascript), ja que pel servidor és molt costós dibuixar gràfics, el servidor ja té prou feina gestionant grans volums de dades! 😀`
Entorn de treball
Crea un projecte react:
Afegeix les dependències:
Modifica el fitxer App.tsx:
x:,
y:,
mode: "lines",
},
];
;
return ;
}Ja tens el teu primer gràfic 😀 !
{% panel %}
{% endpanel %}Atributs
Els gràfics “plotly.js” es descriuen de manera declarativa amb objectes JSON.
Per cada aspecte del gràfic (els colors, les quadrícules, les dades, etc.) tens un atribut JSON.
A l’hora de descriure el gràfic els atributs s’agrupen en dues categories:
-
traces. Objectes que descriuen una única sèrie de dades en un gràfic -
layout. Atributs que s’apliquen a la resta del gràfic, com ara el títol, l’eix o les anotacions.
Els “traces” es classifiquen per tipus de gràfic (per exemple, “scatter” o “heatmap”).
També tens un altre atribut opcional de configuració: config.
A continuació tens un exemple semblant a l’inicial:
x:,
y:,
},
];
xaxis: title: text: "Year"
}
},
yaxis: title: text: "Percent"
}
}
};
return ;
}Com a altres llibreries, el tipus de gràfic predefinit és el de línies:
{% panel %}
{% endpanel %}Tipus de gràfics.
En aquest enllaç tens tots els tipus de gràfics que pots utilitzar: https://plotly.com/javascript/
A continuació veurem alguns exemples.
Gràfic de barres
https://plotly.com/javascript/reference/bar/
Crea aquest gràfic de barres:
{% panel %}
{% endpanel %}
Dades
x:
y: {% sol %}
x:,
y:,
type: "bar",
},
]
title: text: "Diagrama de barres",
font: size: 40
}
}
}
return ;
}{% endsol %}
També pots crear gràfics de barres apilades.
Aquí tens une exemple amb les dones i homes d’un estudi de l’Alzheimer que es realitzarà en diversos hospitals:
{% panel %}
{% endpanel %}Dades
x:
y:
y: {% sol %}
type: 'bar',
x:,
y:,
name: 'Homes'
},
type: 'bar',
x:,
y:,
name: 'Dones'
}
]
title: text: 'Pacients estudi Alzheimer'
},
font:
};
return ;
}{% endsol %}
Box
https://plotly.com/javascript/reference/box/
Un dels gràfics més útils en estadística són els plotbox o diagrames de caixes i cues.
Són tant útils com les corbes gaussianes.
Ens permeten veure a un cop d’ull mesures centrals i de dispersió d’una mostra.
{% panel %}
{% endpanel %}Dades
x: {% sol %}
x:,
type: 'box',
name: 'Set 1'
}
]
title: text: 'Horizontal Box Plot'
}
}
return ;
}{% endsol %}
choropleth
https://plotly.com/javascript/tile-county-choropleth/
Plotly també destaca per ser una llibreria que et permet crear gràfics amb mapes fàcilment.
Imaginem-nos que tenim les taxes d’atur 5 països d’Europa de l’agost del 2024.
const = ;
const = ;Doncs per dibuixar el codi és tant senzill com organitzar les dades al mapa de la següent manera.
- locationmode Atribut literal que permet definir la forma en la que informar els països. Els valors disponibles són:
ISO-3,USA-statesicountry names. - locations Llista de noms de països, en el format definit abans.
- z La informació numèrica de cada pais (taxa d’atur en el nostre cas)
- text El text de la llegenda que surt quan ens posem a sobre de cada país.
Aquí teniu més informació sobre els codis ISO-3:
https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3
Aquesta solució només permet fer gràfics de països.
{% panel %}
{% endpanel %}
{% sol %}
type: 'choropleth',
locationmode: 'country names',
locations: countries,
z: unemp_rate,
text: countries,
autocolorscale: true
}]
title: ,
geo: scope: 'europe',
projection:
}
}
return ;
}{% endsol %}
CSV
https://www.ine.es/dyngs/INEbase/listaoperaciones.htm
https://immunizationdata.who.int/global?topic=&location=
- https://www.ine.es/prodyser/microdatos.htm
- https://typescript.tv/hands-on/parsing-csv-files-in-typescript-with-papa-parse/
- https://www.basedash.com/blog/how-to-use-papaparse-with-typescript
- https://www.escuelafrontend.com/data-fetching-con-react
Functions
https://plotly.com/javascript/plotlyjs-function-reference/
TODO
- https://medium.com/@davidjohnakim/using-plotly-js-with-react-f792ab426248
- https://plotly.com/javascript/reference/index/
- https://plotly.com/javascript/react/
- https://open-innovations.org/data/geojson.html
- https://docs.google.com/document/d/1u90XI23NT6qDCb28IIsuUcKAUt_8XNgYe_lKSiT2Zfk
- https://dmitripavlutin.com/javascript-fetch-async-await/
- https://dev.to/colocodes/how-to-debug-a-react-app-51l4
- https://blog.tericcabrel.com/read-csv-node-typescript/
- https://medium.com/@bhanu.mt.1501/api-calls-in-react-js-342a09d5315f
- https://www.c-sharpcorner.com/article/how-to-pretty-print-json-with-reactjs/
- https://www.escuelafrontend.com/data-fetching-con-react