绘制图形组件库

1.Echarts

  • 安装
npm install --save echarts-for-react
  • demo
import React, { Component } from 'react';

// 引入 ECharts 主模块
import echarts from 'echarts/lib/echarts';
// 引入柱状图
import  'echarts/lib/chart/bar';
// 引入提示框和标题组件
import 'echarts/lib/component/tooltip';
import 'echarts/lib/component/title';

export default class EchartsTest extends Component {
    componentDidMount() {
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));
        // 绘制图表
        myChart.setOption({
            title: { text: 'ECharts 入门示例' },
            tooltip: {},
            xAxis: {
                data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
            },
            yAxis: {},
            series: [{
                name: '销量',
                type: 'bar',
                data: [5, 20, 36, 10, 10, 20]
            }]
        });
    }
    render() {
        return (
            <div id="main" style={{ width: 400, height: 400 }}></div>
        );
    }
}

Echarts-体验

官方教程:[五分钟上手ECharts]

  • 下载echarts https://github.com/apache/incubator-echarts/tree/4.5.0

使用步骤:

  1. 引入echarts dist/echarts.min.js
  2. 准备一个具备大小的DOM容器
<div id="main" style="width: 600px;height:400px;"></div>
  1. 初始化echarts实例对象
var myChart = echarts.init(document.getElementById('main'));
  1. 指定配置项和数据(option)
var option = {
    xAxis: {
        type: 'category',
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    },
    yAxis: {
        type: 'value'
    },
    series: [{
        data: [820, 932, 901, 934, 1290, 1330, 1320],
        type: 'line'
    }]
};
  1. 将配置项设置给echarts实例对象
myChart.setOption(option);

11-Echarts-基础配置

需要了解的主要配置:series xAxis yAxis grid tooltip title legend color

  • series

    • 系列列表。每个系列通过 type 决定自己的图表类型
    • 大白话:图标数据,指定什么类型的图标,可以多个图表重叠。
  • xAxis:直角坐标系 grid 中的 x 轴

    • boundaryGap: 坐标轴两边留白策略 true,这时候刻度只是作为分隔线,标签和数据点都会在两个刻度之间的带(band)中间。
  • yAxis:直角坐标系 grid 中的 y 轴

  • grid:直角坐标系内绘图网格。

  • title:标题组件

  • tooltip:提示框组件

  • legend:图例组件

  • color:调色盘颜色列表

    数据堆叠,同个类目轴上系列配置相同的stack值后 后一个系列的值会在前一个系列的值上相加。

12- 柱状图图表

  • 官网找到类似实例, 适当分析,并且引入到HTML页面中
  • 根据需求定制图表
  1. 引入到html页面中
// 柱状图1模块
(function() {
  // 实例化对象
  let myChart = echarts.init(document.querySelector(".bar .chart"));
  // 指定配置和数据
  let option = {
    color: ["#3398DB"],
    tooltip: {
      trigger: "axis",
      axisPointer: {
        // 坐标轴指示器,坐标轴触发有效
        type: "shadow" // 默认为直线,可选为:'line' | 'shadow'
      }
    },
    grid: {
      left: "3%",
      right: "4%",
      bottom: "3%",
      containLabel: true
    },
    xAxis: [
      {
        type: "category",
        data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
        axisTick: {
          alignWithLabel: true
        }
      }
    ],
    yAxis: [
      {
        type: "value"
      }
    ],
    series: [
      {
        name: "直接访问",
        type: "bar",
        barWidth: "60%",
        data: [10, 52, 200, 334, 390, 330, 220]
      }
    ]
  };

  // 把配置给实例对象
  myChart.setOption(option);
})();
  1. 根据需求定制

    • 修改图表柱形颜色 #2f89cf

    • 修改图表大小 top 为 10px bottom 为 4% grid决定我们的柱状图的大小

    color: ["#2f89cf"],
    grid: {
      left: "0%",
      top: "10px",
      right: "0%",
      bottom: "4%",
      containLabel: true
    },
    
    • X轴相关设置 xAxis
      • 文本颜色设置为 rgba(255,255,255,.6) 字体大小为 12px
      • X轴线的样式 不显示
        // 设置x轴标签文字样式
       // x轴的文字颜色和大小
             axisLabel: {
               color: "rgba(255,255,255,.6)",
               fontSize: "12"
             },
        //  x轴样式不显示
        axisLine: {
            show: false
            // 如果想要设置单独的线条样式 
            // lineStyle: {
            //    color: "rgba(255,255,255,.1)",
            //    width: 1,
            //    type: "solid"
           }
        }
    
    • Y 轴相关定制
      • 文本颜色设置为 rgba(255,255,255,.6) 字体大小为 12px
      • Y 轴线条样式 更改为 1像素的 rgba(255,255,255,.1) 边框
      • 分隔线的颜色修饰为 1像素的 rgba(255,255,255,.1)
    // y 轴文字标签样式
    axisLabel: {
       textStyle: {
          color: "rgba(255,255,255,.6)",
           fontSize: "12"
       }
    },
     // y轴线条样式
     axisLine: {
          lineStyle: {
             color: "rgba(255,255,255,.1)",
             // width: 1,
             // type: "solid"
          }
    5232},
     // y 轴分隔线样式
    splitLine: {
        lineStyle: {
           color: "rgba(255,255,255,.1)"
         }
    }
    
    • 修改柱形为圆角以及柱子宽度 series 里面设置
    series: [
          {
            name: "直接访问",
            type: "bar",
            // 修改柱子宽度
            barWidth: "35%",
            data: [10, 52, 200, 334, 390, 330, 220],
            itemStyle: {
              // 修改柱子圆角
              barBorderRadius: 5
            }
          }
        ]
      };
    
    • 更换对应数据
    // x轴中更换data数据
     data: [ "旅游行业","教育培训", "游戏行业", "医疗行业", "电商行业", "社交行业", "金融行业" ],
    // series 更换数据
     data: [200, 300, 300, 900, 1500, 1200, 600]
    
  • 让图表跟随屏幕自适应
  window.addEventListener("resize", function() {
    myChart.resize();
  });

中间布局

 <div class="no">
                <div class="no-hd">
                    <ul>
                        <li>125811</li>
                        <li>104563</li>
                    </ul>
                </div>
                <div class="no-bd">
                    <ul>
                        <li>前端需求人数</li>
                        <li>市场供应人数</li>
                    </ul>
                </div>
            </div>
            <div class="map">
                <div class="chart"></div>
                <div class="map1"></div>
                <div class="map2"></div>
                <div class="map3"></div>
            </div>

中间样式

/* 声明字体*/
@font-face {
  font-family: electronicFont;
  src: url(../font/DS-DIGIT.TTF);
}
.no {
  background: rgba(101, 132, 226, 0.1);
  padding: 0.1875rem;
  .no-hd {
    position: relative;
    border: 1px solid rgba(25, 186, 139, 0.17);
    &::before {
      content: "";
      position: absolute;
      width: 30px;
      height: 10px;
      border-top: 2px solid #02a6b5;
      border-left: 2px solid #02a6b5;
      top: 0;
      left: 0;
    }
    &::after {
      content: "";
      position: absolute;
      width: 30px;
      height: 10px;
      border-bottom: 2px solid #02a6b5;
      border-right: 2px solid #02a6b5;
      right: 0;
      bottom: 0;
    }
    ul {
      display: flex;
      li {
        position: relative;
        flex: 1;
        text-align: center;
        height: 1rem;
        line-height: 1rem;
        font-size: 0.875rem;
        color: #ffeb7b;
        padding: 0.05rem 0;
        font-family: electronicFont;
        font-weight: bold;
        &:first-child::after {
          content: "";
          position: absolute;
          height: 50%;
          width: 1px;
          background: rgba(255, 255, 255, 0.2);
          right: 0;
          top: 25%;
        }
      }
    }
  }
  .no-bd ul {
    display: flex;
    li {
      flex: 1;
      height: 0.5rem;
      line-height: 0.5rem;
      text-align: center;
      font-size: 0.225rem;
      color: rgba(255, 255, 255, 0.7);
      padding-top: 0.125rem;
    }
  }
}
.map {
  position: relative;
  height: 10.125rem;
  .chart {
    position: absolute;
    top: 0;
    left: 0;
    z-index: 5;
    height: 10.125rem;
    width: 100%;
  }
  .map1,
  .map2,
  .map3 {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 6.475rem;
    height: 6.475rem;
    background: url(../images/map.png) no-repeat;
    background-size: 100% 100%;
    opacity: 0.3;
  }
  .map2 {
    width: 8.0375rem;
    height: 8.0375rem;
    background-image: url(../images/lbx.png);
    opacity: 0.6;
    animation: rotate 15s linear infinite;
    z-index: 2;
  }
  .map3 {
    width: 7.075rem;
    height: 7.075rem;
    background-image: url(../images/jt.png);
    animation: rotate1 10s linear infinite;
  }

  @keyframes rotate {
    from {
      transform: translate(-50%, -50%) rotate(0deg);
    }
    to {
      transform: translate(-50%, -50%) rotate(360deg);
    }
  }
  @keyframes rotate1 {
    from {
      transform: translate(-50%, -50%) rotate(0deg);
    }
    to {
      transform: translate(-50%, -50%) rotate(-360deg);
    }
  }
}

2.G2

  • 安装
npm install @antv/g2 --save
  • demo
import React, { Component } from 'react'
import { Chart } from '@antv/g2';
export default class index extends Component {
    
    componentDidMount(){
        //纸质柱状图
        this.func()
    }
    func(){
        //基础数据
        const data = [
        { type: '未知', value: 654, percent: 0.02 },
        { type: '17 岁以下', value: 654, percent: 0.02 },
        { type: '18-24 岁', value: 4400, percent: 0.2 },
        { type: '25-29 岁', value: 5300, percent: 0.24 },
        { type: '30-39 岁', value: 6200, percent: 0.28 },
        { type: '40-49 岁', value: 3300, percent: 0.14 },
        { type: '50 岁以上', value: 1500, percent: 0.06 },
        ];
        //新建一个图表
        const chart = new Chart({
             container: 'container',
             autoFit: true,
             height: 500,
             padding: [50, 20, 50, 20],
        });
        chart.data(data);
              chart.scale('value', {
              alias: '销售额(元)',
        });

        chart.axis('type', {
        tickLine: {
            alignTick: false,
        },
        });
        chart.axis('value', false);

        chart.tooltip({
        showMarkers: false,
        });
        chart.interval().position('type*value');
        chart.interaction('element-active');

        // 添加文本标注
        data.forEach((item) => {
        chart
            .annotation()
            .text({
            position: [item.type, item.value],
            content: item.value,
            style: {
                textAlign: 'center',
            },
            offsetY: -30,
            })
            .text({
            position: [item.type, item.value],
            content: (item.percent * 100).toFixed(0) + '%',
            style: {
                textAlign: 'center',
            },
            offsetY: -62,
            });
        });
        chart.render();

    }
    render() {
      
        return (
            //图表容器
            <div id="container"></div>
        )
    }
}

3. BizCharts

  • 安装
在这里插入代码片
  • demo
import React, { Component } from "react";
//引入 BizCharts
import { Chart, Interval, Tooltip } from "bizcharts";
export default class Test extends Component {
  render() {
    const data = [
      { year: "1951 年", sales: 38 },
      { year: "1952 年", sales: 52 },
      { year: "1956 年", sales: 61 },
      { year: "1957 年", sales: 45 },
      { year: "1958 年", sales: 48 },
      { year: "1959 年", sales: 38 },
      { year: "1960 年", sales: 38 },
      { year: "1962 年", sales: 38 },
    ];
    return (
      <Chart
        height={400}
        autoFit
        data={data}
        interactions={["active-region"]}
        padding={[30, 30, 10, 50]}
      >
        <Interval position="year*sales" />
        <Tooltip shared />
      </Chart>
    );
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值