📜  ReactJS 中的 VISX 库

📅  最后修改于: 2022-05-13 01:56:37.833000             🧑  作者: Mango

ReactJS 中的 VISX 库

VISX是一个库,它允许我们毫无问题地将设计添加到我们的 React 应用程序中。在下面的示例中,我们展示了如何使用它来将区域对比图添加到我们的 React 应用程序中。

模块安装:我们必须安装Visx库提供的大量模块来制作面积差异图。为此,请从终端运行以下命令。

$ npm install --save @visx/axis @visx/curve 
@visx/gradient @visx/grid @visx/group @visx/mock-data 
@visx/react-spring @visx/responsive @visx/shape 
@visx/scale react-spring

注意: @visx/mock-data库有我们可以在可视化图表中使用的模拟数据。

创建反应应用程序:

第 1 步:使用以下命令创建一个 React 应用程序:

npx create-react-app foldername

第 2 步:创建项目文件夹(即文件夹名称)后,使用以下命令移动到该文件夹:

cd foldername

项目结构:它将如下所示。

项目结构

示例:要添加实心线图,我们编写以下代码。

文件名:App.js

Javascript
import React, { useState, useMemo } from "react";
import AreaClosed from "@visx/shape/lib/shapes/AreaClosed";
import { curveMonotoneX } from "@visx/curve";
import {
  scaleUtc,
  scaleLinear,
  scaleLog,
  scaleBand,
  coerceNumber
} from "@visx/scale";
import { Orientation } from "@visx/axis";
import {
  AnimatedAxis,
  AnimatedGridRows,
  AnimatedGridColumns
} from "@visx/react-spring";
import { LinearGradient } from "@visx/gradient";
import { timeFormat } from "d3-time-format";
  
export const backgroundColor = "#da7cff";
const axisColor = "#fff";
const tickLabelColor = "#fff";
export const labelColor = "#340098";
const gridColor = "#6e0fca";
const margin = {
  top: 40,
  right: 150,
  bottom: 20,
  left: 50
};
  
const tickLabelProps = () => ({
  fill: tickLabelColor,
  fontSize: 12,
  fontFamily: "sans-serif",
  textAnchor: "middle"
});
  
const getMinMax = (vals) => {
  const numericVals = vals.map(coerceNumber);
  return [Math.min(...numericVals),
          Math.max(...numericVals)];
};
  
function Example({
  width: outerWidth = 800,
  height: outerHeight = 800,
  showControls = true
}) {
  const width = outerWidth - margin.left - margin.right;
  const height = outerHeight - margin.top - margin.bottom;
  const [dataToggle] = useState(true);
  const [animationTrajectory] = useState("center");
  
  const axes = useMemo(() => {
    const linearValues = dataToggle ? [0, 2, 4, 6, 8, 10] :
                                      [6, 8, 10, 12];
  
  return [
      {
        scale: scaleLinear({
          domain: getMinMax(linearValues),
          range: [0, width]
        }),
        values: linearValues,
        tickFormat: (v, index, ticks) =>
          index === 0
            ? "first"
            : index === ticks[ticks.length - 1].index
            ? "last"
            : `${v}`,
        label: "linear"
      }
    ];
  }, [dataToggle, width]);
  
  if (width < 10) return null;
  
  const scalePadding = 40;
  const scaleHeight = height / axes.length - scalePadding;
  
  const yScale = scaleLinear({
    domain: [100, 0],
    range: [scaleHeight, 0]
  });
  
  return (
    <>
      
        
        
        
          {axes.map(({ scale, values, label, tickFormat }, i) => (
            
              
              
               [
                  (scale(x) ?? 0) +
                    ("bandwidth" in scale &&
                    typeof scale.bandwidth !== "undefined"
                      ? scale.bandwidth() / 2
                      : 0),
                  yScale(10 + Math.random() * 90)
                ])}
                yScale={yScale}
                curve={curveMonotoneX}
                fill={gridColor}
                fillOpacity={0.2}
              />
              
            
          ))}
        
      
    
  );
}
  
export default function App() {
  return (
    
           
  ); }


说明:我们添加backgroundColor设置基础色调, axisColor为轴心色调, tickLabelColor为 x-hub 刻度名称色调, labelColor为 y-hub 名称色调, gridColor为网络色调。

我们使用tickLabelProps更改内容样式。要添加图表内容,我们添加轴集群。我们从dataToggle对象注册图表的质量, linearValues具有直刻度值。我们有 y-Scale 对象来添加 y-pivot 值。在我们返回的 JSX 中,我们添加了 SVG、 rect square shape 组件,然后在axes中添加。 map回调,我们返回图表。该图表具有带有 SVG 集合的g-组件, AnimatedGridRows具有活跃的格列。

我们将 y-Scale 激励传递给它以显示y 值,stroke设置描边, width设置宽度, AnimatedGridColumns具有框架部分, numTicks允许我们设置 x-hub 上的刻度数。我们有与AnimatedGridColumns段类似的代码来添加部分, AreaClosed有填充的折线图, AnimatedAxis有活跃的 x-pivot。我们使用 labelProps 设置名称样式,并且 tickValues具有刻度值。

运行应用程序的步骤:从项目的根目录使用以下命令运行应用程序:

npm start

输出: