React LogoVictory

Victory is a set of modular charting components designed for React and React Native. It provides a "modular and declarative" approach, enabling developers to create customizable, interactive, and mobile-friendly charts. Its core features include:

1. Declarative and Component-Based: Leveraging React's component model, Victory allows you to define charts as individual components (e.g., `VictoryChart`, `VictoryAxis`, `VictoryLine`, `VictoryBar`, `VictoryPie`). This enhances code readability and maintainability.
2. Customizability: Victory offers a wide range of props, giving you full control over the appearance, behavior, and styling of your charts. Themes, color schemes, axis labels, and more can be easily configured.
3. Interactivity: You can easily integrate rich interactive features such as animations, tooltips, and event handlers (click, hover, etc.). This enriches the user experience.
4. Data Agnostic: It is not tied to a specific data structure. You can use any data format you prefer to create charts, providing flexibility.
5. Cross-Platform Compatibility: Victory works seamlessly in both React web applications and React Native mobile applications, making it easy to deploy to different platforms from a single codebase.
6. Advanced Features: It meets advanced charting needs such as multiple axes, clustered or stacked charts, custom data formats, and more.

Victory combines the powerful data manipulation and scaling capabilities of D3.js with React's reactive and component-based structure, making it a powerful tool that simplifies complex data visualization tasks.

Example Code

import React from 'react';
import { VictoryChart, VictoryLine, VictoryAxis, VictoryTheme } from 'victory';

function MyLineChart() {
  // Example dataset for quarterly earnings
  const data = [
    { quarter: 1, earnings: 13000 },
    { quarter: 2, earnings: 16500 },
    { quarter: 3, earnings: 14250 },
    { quarter: 4, earnings: 19000 }
  ];

  return (
    <div style={{ padding: '20px', backgroundColor: '#f9f9f9', borderRadius: '8px' }}>
      <h2 style={{ textAlign: 'center', color: '#333' }}>Quarterly Earnings Report</h2>
      <VictoryChart
        theme={VictoryTheme.material} // Apply a pre-defined Material Design theme
        domainPadding={20} // Add padding around the chart's domain
        scale={{ x: "linear" }} // Use a linear scale for the X axis
      >
        {/* Define the X axis for quarters */}
        <VictoryAxis
          tickValues={[1, 2, 3, 4]} // Specify the values where ticks should appear
          tickFormat={["Q1", "Q2", "Q3", "Q4"]} // Format the tick labels
          style={{
            axisLabel: { padding: 30 }, // Styling for the axis label
            tickLabels: { fontSize: 12, padding: 5 } // Styling for the tick labels
          }}
        />
        {/* Define the Y axis for earnings */}
        <VictoryAxis
          dependentAxis // Marks this as a dependent axis (typically the Y-axis)
          tickFormat={(x) => (`$${x / 1000}k`)} // Format tick labels to show currency in thousands
          style={{
            axisLabel: { padding: 40 }, // Styling for the axis label
            tickLabels: { fontSize: 12, padding: 5 } // Styling for the tick labels
          }}
        />
        {/* Create the line chart */}
        <VictoryLine
          data={data} // Pass the data to the line chart
          x="quarter" // Specify the data field for the X axis
          y="earnings" // Specify the data field for the Y axis
          style={{
            data: { stroke: "#4CAF50", strokeWidth: 3 }, // Style the line itself (color, width)
            parent: { border: "1px solid #ccc"} // Style the parent container of the line
          }}
          labels={({ datum }) => `$${datum.earnings}`} // Display the exact earnings value as a label for each point
          labelPlacement="top" // Position the labels above the data points
          styleLabel={{ fontSize: 10, fill: "#333" }} // Style the point labels
        />
      </VictoryChart>
    </div>
  );
}

export default MyLineChart;