Guía 16: React - Gestión y visualización datos (MUI-X)#
Actividades previas#
Open-Meteo#
Configure API de Open-Meteo en Open-Meteo API, con:
Seleccione la ubicación de una ciudad de Ecuador.
Marque los indicadores que desea mostrar el dashboard en la sección de Current Weather de la documentación, en este caso: temperatura (Temperature (2 m)), humedad relativa (Relative Humidity (2 m)), temperatura aparente (Apparent Temperature) y velocidad del viento (Wind Speed (10 m)).
Seleccione dos variables meteorológicas por hora, por ejemplo: Temperatura (Temperature (2 m)) y Velocidad del viento (Wind Speed (10 m)), etc.
Seleccione la configuración de las unidades de medida de la API, en este caso: temperatura (Celsius °C), velocidad del viento (km/h) y unidades de precipitación (Millimeter), etc.
Con la URL de la API con los parámetros seleccionados, compruebe la estructura del JSON de salida en su navegador.
Interfaces, tipos de datos y URL#
Genere el tipo de datos TypeScript para el JSON de salida de la API de Open-Meteo, con:
Utilice Transform Tools / JSON to TypeScript.
Coloque el JSON de salida de la API de Open-Meteo en el campo de entrada.
Identifique las diferencias con las interfaces existentes en el archivo src/types/DashboardTypes.tsx.
Actualice o cree nuevas interfaces en el archivo src/types/DashboardTypes.tsx, según sea necesario.
Actualice la URL en hooks/useFetchData.tsx con la URL generada en Open-Meteo.
Ambiente de desarrollo#
Acceda a su proyecto dashboard en Codespaces o en su máquina local.
Cree y utilice la(s) rama(s) de desarrollo.
Instale los paquetes y levante el servidor, con:
npm install npm run dev
Actividades en clases#
TableUI y ChartUI#
Instale los paquetes necesarios para la gestión y visualización de datos, con:
npm install npm install @mui/x-data-grid @mui/x-charts
Revise la documentación MUI X Data Grid y MUI X Charts de MUI X.
Cree los componentes funcionales:
TableUI en el archivo src/components/TableUI.tsx, con el siguiente código:
Ver el código
import Box from '@mui/material/Box'; import { DataGrid, type GridColDef } from '@mui/x-data-grid'; function combineArrays(arrLabels: Array<string>, arrValues1: Array<number>, arrValues2: Array<number>) { return arrLabels.map((label, index) => ({ id: index, label: label, value1: arrValues1[index], value2: arrValues2[index] })); } const columns: GridColDef[] = [ { field: 'id', headerName: 'ID', width: 90 }, { field: 'label', headerName: 'Label', width: 125, }, { field: 'value1', headerName: 'Value 1', width: 125, }, { field: 'value2', headerName: 'Value 2', width: 125, }, { field: 'resumen', headerName: 'Resumen', description: 'No es posible ordenar u ocultar esta columna.', sortable: false, hideable: false, width: 100, valueGetter: (_, row) => `${row.label || ''} ${row.value1 || ''} ${row.value2 || ''}`, }, ]; const arrValues1 = [4000, 3000, 2000, 2780, 1890, 2390, 3490]; const arrValues2 = [2400, 1398, 9800, 3908, 4800, 3800, 4300]; const arrLabels = ['A','B','C','D','E','F','G']; export default function TableUI() { const rows = combineArrays(arrLabels, arrValues1, arrValues2); return ( <Box sx={{ height: 350, width: '100%' }}> <DataGrid rows={rows} columns={columns} initialState={{ pagination: { paginationModel: { pageSize: 5, }, }, }} pageSizeOptions={[5]} disableRowSelectionOnClick /> </Box> ); }
ChartUI en el archivo src/components/ChartUI.tsx, con el siguiente código:
Ver el código
import { LineChart } from '@mui/x-charts/LineChart'; import Typography from '@mui/material/Typography'; const arrValues1 = [4000, 3000, 2000, 2780, 1890, 2390, 3490]; const arrValues2 = [2400, 1398, 9800, 3908, 4800, 3800, 4300]; const arrLabels = ['A','B','C','D','E','F','G']; export default function ChartUI() { return ( <> <Typography variant="h5" component="div"> Chart arrLabels vs arrValues1 & arrValues2 </Typography> <LineChart height={300} series={[ { data: arrValues1, label: 'value1'}, { data: arrValues2, label: 'value2'}, ]} xAxis={[{ scaleType: 'point', data: arrLabels }]} /> </> ); }
Importe los componentes TableUI y ChartUI en el archivo src/App.tsx, con:
... import TableUI from './components/TableUI'; import ChartUI from './components/ChartUI'; function App() { ... return ( <Grid ... > ... {/* Gráfico */} <Grid size={{ xs: 6, md: 6 }} sx={{ display: { xs: "none", md: "block" } }}> <ChartUI /> </Grid> {/* Tabla */} <Grid size={{ xs: 6, md: 6 }} sx={{ display: { xs: "none", md: "block" } }}> <TableUI /> </Grid> ... </Grid> ) }
Compruebe la vista previa del resultado en el navegador.
Renderizado#
Modifique los componentes TableUI y ChartUI para que usen los datos de la API de Open-Meteo.
Asegúrese de que los datos se muestren correctamente en la tabla y el gráfico, considerando el tiempo de carga y el manejo de errores.
Compruebe la vista previa del resultado en el navegador.
Versionamiento#
Versione local y remotamente la(s) rama(s) de desarrollo en el repositorio dashboard.
Genere la(s) solicitud(es) de cambios (pull request) para la rama principal y apruebe los cambios.
Despliegue#
Desde la línea de comandos, ejecute el comando de transpilación y despliegue del sitio web, con:
npm run deploy
De ser necesario, elimine, corrija o comente las secciones de código identificadas por el transpilador.
Vuelva a ejecutar el comando de transpilación y despliegue del sitio web.
Compruebe el resultado en el navegador, con la URL: https://<username>.github.io/dashboard
Conclusiones#
Actividades autónomas#
Recursos extras#
En redes:
Data visualization guide for creating plots for a data visualization project👍
— Avi Kumar Talaviya (@avikumart_) June 27, 2022
Which chart to use in what circumstances?? (See the below image) pic.twitter.com/6EwcE6Ld9N