Rickshaw est une bibliothèque JavaScript conçue pour la création de graphiques interactifs en temps réel. Ce guide vous présente comment intégrer Rickshaw facilement dans vos projets React et Vue, vous permettant de construire rapidement des interfaces de visualisation de données de niveau professionnel.
Pourquoi choisir Rickshaw ?
Basé sur D3.js, Rickshaw offre une variété de types de graphiques et une grande flexibilité de personnalisation. Ses principaux atouts sont :
- Conception légère : Le fichier principal
rickshaw.jsest compact, minimisant l'impact sur la taille de votre projet. - Diversité de graphiques : Supporte les graphiques linéaires, en aires, à barres, en nuages de points, et plus encore.
- Support des données en temps réel : Idéal pour les flux de données en temps réel, comme les données de surveillance ou l'analyse du comportement utilisateur.
- Configuration flexible : Permet d'ajuster facilement le style des graphiques, les interactions et le traitement des données via une API simple.
Prérequis : Installation et configuration
Avant de commencer, assurez-vous que votre projet dispose des éléments suivants :
- Node.js et npm/yarn installés.
- Un projet React ou Vue de base créé.
Installation de Rickshaw
Installez Rickshaw via npm :
npm install rickshaw --save
Ou clonez le dépôt :
git clone https://gitcode.com/gh_mirrors/ri/rickshaw
Intégration dans un projet React
1. Création du composant graphique
Créez un nouveau composant pour Rickshaw, par exemple RickshawChart.js :
import React, { useEffect, useRef } from 'react';
import Rickshaw from 'rickshaw';
import 'rickshaw/rickshaw.css';
const RickshawChart = ({ dataSeries, chartOptions }) => {
const chartContainerRef = useRef(null);
const graphInstance = useRef(null); // Pour conserver l'instance du graphique
useEffect(() => {
if (!chartContainerRef.current) return;
// Initialisation du graphique
graphInstance.current = new Rickshaw.Graph({
element: chartContainerRef.current,
width: chartOptions.width || 800,
height: chartOptions.height || 400,
series: dataSeries,
renderer: chartOptions.renderer || 'line'
});
// Ajout des axes
const xAxis = new Rickshaw.Graph.Axis.Time({ graph: graphInstance.current });
const yAxis = new Rickshaw.Graph.Axis.Y({
graph: graphInstance.current,
orientation: 'left'
});
// Rendu initial
graphInstance.current.render();
xAxis.render();
yAxis.render();
// Nettoyage lors du démontage du composant
return () => {
if (graphInstance.current) {
graphInstance.current.destroy();
graphInstance.current = null;
}
};
}, [dataSeries, chartOptions]); // Re-crée le graphique si les données ou options changent
return <div ref={chartContainerRef} className="rickshaw-chart-container" />;
};
export default RickshawChart;
2. Utilisation du composant
Importez et utilisez ce composant dans la page de votre tableau de bord :
import React from 'react';
import RickshawChart from './RickshawChart'; // Adaptez le chemin
function DashboardPage() {
// Données d'exemple
const sampleSeriesData = [
{
name: 'Visites',
data: [
{ x: Math.floor(Date.now() / 1000) - 5 * 86400, y: 40 },
{ x: Math.floor(Date.now() / 1000) - 4 * 86400, y: 46 },
{ x: Math.floor(Date.now() / 1000) - 3 * 86400, y: 58 },
{ x: Math.floor(Date.now() / 1000) - 2 * 86400, y: 52 },
{ x: Math.floor(Date.now() / 1000) - 1 * 86400, y: 68 }
],
color: '#FF6347' // Tomate
}
];
const graphConfig = { renderer: 'line', width: 960, height: 350 };
return (
<div className="dashboard-content">
<h1>Analyse du trafic web</h1>
<RickshawChart
dataSeries={sampleSeriesData}
chartOptions={graphConfig}
/>
</div>
);
}
export default DashboardPage;
3. Ajout d'interactions
Intégrez des fonctionnalités interactives comme le survol pour afficher les détails :
// Dans le useEffect, après l'initialisation du graphique
const hoverHandler = new Rickshaw.Graph.HoverDetail({
graph: graphInstance.current,
formatter: (seriesName, x, y) => {
const date = new Date(x * 1000);
return `${seriesName}: ${y} à ${date.toLocaleTimeString()} le ${date.toLocaleDateString()}`;
}
});
Intégration dans un projet Vue
1. Création du composant
Créez un fichier RickshawChart.vue :
<template>
<div ref="chartElement" class="chart-container"></div>
</template>
<script>
import Rickshaw from 'rickshaw';
import 'rickshaw/rickshaw.css';
export default {
name: 'RickshawChartComponent',
props: {
dataSeries: {
type: Array,
required: true
},
chartOptions: {
type: Object,
default: () => ({})
}
},
data() {
return {
rickshawGraph: null,
axes: {}
};
},
mounted() {
this.initializeGraph();
},
watch: {
// Met à jour le graphique si les données ou les options changent
dataSeries: {
deep: true,
handler() {
this.updateOrRecreateGraph();
}
},
chartOptions: {
deep: true,
handler() {
this.updateOrRecreateGraph();
}
}
},
beforeUnmount() {
this.cleanupGraph();
},
methods: {
initializeGraph() {
if (!this.$refs.chartElement) return;
this.rickshawGraph = new Rickshaw.Graph({
element: this.$refs.chartElement,
width: this.chartOptions.width || 800,
height: this.chartOptions.height || 400,
series: this.dataSeries,
renderer: this.chartOptions.renderer || 'line'
});
this.axes.x = new Rickshaw.Graph.Axis.Time({ graph: this.rickshawGraph });
this.axes.y = new Rickshaw.Graph.Axis.Y({ graph: this.rickshawGraph });
this.rickshawGraph.render();
this.axes.x.render();
this.axes.y.render();
},
updateOrRecreateGraph() {
this.cleanupGraph(); // Nettoie l'ancien graphique avant de recréer
this.initializeGraph();
},
cleanupGraph() {
if (this.rickshawGraph) {
this.rickshawGraph.destroy();
this.rickshawGraph = null;
this.axes = {};
}
}
}
};
</script>
<style scoped>
.chart-container {
width: 100%;
height: 100%;
}
</style>
2. Utilisation du composant
Intégrez le composant dans une vue Vue :
<template>
<div class="analytics-view">
<h2>Tendances d'activité utilisateur</h2>
<rickshaw-chart-component
:data-series="userDataSeries"
:chart-options="userChartOptions"
/>
</div>
</template>
<script>
import RickshawChartComponent from '@/components/RickshawChart.vue'; // Ajustez le chemin
export default {
components: {
RickshawChartComponent
},
data() {
return {
userChartOptions: {
renderer: 'area',
width: 900,
height: 380
},
userDataSeries: [
{
name: 'Utilisateurs actifs journaliers',
data: [
{ x: Math.floor(Date.now() / 1000) - 5 * 86400, y: 120 },
{ x: Math.floor(Date.now() / 1000) - 4 * 86400, y: 150 },
{ x: Math.floor(Date.now() / 1000) - 3 * 86400, y: 130 },
{ x: Math.floor(Date.now() / 1000) - 2 * 86400, y: 180 },
{ x: Math.floor(Date.now() / 1000) - 1 * 86400, y: 210 }
],
color: '#5DADE2' // Bleu ciel
}
]
};
}
};
</script>
<style>
.analytics-view {
padding: 20px;
}
</style>
Personnalisation des styles et interactions
Choix du type de graphique
Rickshaw supporte plusieurs types de graphiques. Changez la propriété renderer :
- Graphique linéaire :
renderer: 'line' - Graphique en aires :
renderer: 'area' - Graphique à barres :
renderer: 'bar' - Nuage de points :
renderer: 'scatterplot'
Configuration des couleurs
Utilisez les palettes de couleurs intégrées de Rickshaw :
import Rickshaw from 'rickshaw';
const colorPalette = new Rickshaw.Color.Palette({ scheme: 'colorwheel' });
const styledSeries = data.map((series, index) => ({
...series,
color: colorPalette.color(index)
}));
Chargement et mise à jour des données
Pour les données en temps réel ou les mises à jour dynamiques :
// Dans React, pour mettre à jour les données
const updateGraphData = (newDataSet) => {
setChartData(prevData => {
// Logique pour fusionner ou remplacer les données
return [...newDataSet];
});
};
// Dans Vue, pour mettre à jour les données
this.userDataSeries = [...newDataSet];
// Si le graphique existe déjà, une mise à jour réactive de dataSeries peut suffire,
// sinon, appeler this.updateOrRecreateGraph();
Problèmes courants et solutions
Graphique non affiché ou incorrrect
- Vérifiez la taille du conteneur : Assurez-vous que l'élément parent a une largeur et une hauteur définies.
- Format des données : Confirmez que les valeurs
xetysont numériques et que le format est correct. - Dépendances : Vérifiez que Rickshaw et D3.js sont correctement importés.
Problèmes de performance
- Volume de données : Pour de grandes quantités de données, envisagez des techniques d'échantillonnage.
- Optimisation des rendus : Utilisez des techniques de défilement (throttling) ou d'anti-rebond (debouncing) pour les mises à jour fréquentes.
- Dimensions du graphique : Ajustez la largeur et la hauteur pour éviter de surcharger le rendu.
Compatibilité avec les frameworks
- React : Utilisez
useRefpour accéder aux éléments DOM plutôt que des méthodes commedocument.getElementById. - Vue : Initialisez le graphique dans le hook
mounted(ouonMounteden Composition API). - Nettoyage : Assurez-vous d'appeler la méthode
destroydu graphique lors du démontage des composants pour libérer les ressources.
L'intégration de Rickshaw dans React et Vue est simplifiée grâce à ces approches basées sur les composants. Que vous développiez des tableaux de bord simples ou des systèmes de monitoring complexes, Rickshaw offre les outils nécessaires pour des visualisations de données interactives et performantes.