echarts 3d柱状图

3d柱状图主要是创建左右两个面,也就是两个柱子,左右两个面颜色稍微要有点不一样,形成一点点对比就行,然后上下用 type: "pictorialBar" 象形柱图来实现底部和顶部的效果,下面代码可以复制到echarts官网运行,会看到一个渐变到透明的3d柱子

在这里插入图片描述

const industryColor = {
  type: 'linear',
  x: 1,
  y: 0,
  x2: 1,
  y2: 1,
  colorStops: [
    {
      offset: 0,
      color: '#6CB5EB'
    },
    {
      offset: 1,
      color: 'rgba(9,36,83,0.27)'
    }
  ]
};

const industryData = [22, 35, 30, 22, 60, 56];
var option = {
  backgroundColor: 'rgba(0, 0, 0, 0.6)',
  animation: false,
  tooltip: {
    trigger: 'axis',
    axisPointer: {
      type: 'shadow'
    }
  },
  grid: {
    left: '0%',
    right: '4%',
    bottom: '0%',
    top: '10px',
    containLabel: true
  },
  xAxis: {
    type: 'category',
    data: ['种植业', '养殖业', '旅游业', '服务业'],
    axisLabel: {
      color: '#E6F7FF'
    },
    axisLine: {
      show: true,
      lineStyle: {
        color: 'rgba(255, 255, 2555, 0.1)'
      }
    },
    axisTick: {
      show: false
    },
    animation: false
  },
  yAxis: {
    type: 'value',
    axisLabel: {
      color: '#E6F7FF'
    },
    splitLine: {
      show: true,
      lineStyle: {
        color: 'rgba(255,255,255,0.2)'
      }
    },
    animation: false
  },
  series: [
    {
      name: '产业结构',
      type: 'bar',
      barWidth: 9,
      data: industryData,
      itemStyle: {
        //柱子左面
        normal: {
          // 重要的是color配置:线性渐变, 从上往下
          color: {
            type: 'linear',
            x: 1,
            y: 0,
            x2: 1,
            y2: 1,
            colorStops: [
              {
                offset: 0,
                color: '#6CB5EB'
              },
              {
                offset: 0.8,
                color: 'rgba(9, 36, 83, 0.54)'
              }
            ]
          }
        }
      },
      tooltip: {
        show: false
      }
    },
    {
      name: '产业结构',
      tooltip: {
        show: true,
        padding: 100,
        position: [-10, '50%'],
        borderWidth: 100
      },
      type: 'bar',
      barWidth: 13,
      barCategoryGap: '60%',
      itemStyle: {
        //柱子右面
        normal: {
          // 重要的是color配置:线性渐变, 从上往下
          color: industryColor,
          borderWidth: 0.3,
          borderColor: 'rgba(9, 36, 83, 0.1)'
        }
      },
      data: industryData,
      // 间隔为0
      barGap: 0,
      z: 5
    },
    {
      z: 10,
      name: '产业结构',
      // 这里是柱子的顶部,type: "pictorialBar" 可以自定义图形或者使用内置选项
      type: 'pictorialBar',
      symbolPosition: 'end',
      data: industryData,
      symbol: 'diamond',
      symbolOffset: [0, -10],
      symbolRotate: 90,
      symbolSize: [3.5, 19.6],
      itemStyle: {
        normal: {
          borderWidth: 0,
          color: 'rgba(124, 201, 250, 1)'
        }
      },
      tooltip: {
        show: false
      }
    }
  ]
};

普通的3d柱子,可以用一个柱子,做从左到右的渐变。或者用两个柱子,和上面透明渐变一样从上到下渐变
在这里插入图片描述

var colorArr = ['#0C628C', '#3887D5', '#2570BB'];
var color = {
  type: 'linear',
  x: 0,
  x2: 1,
  y: 0,
  y2: 0,
  colorStops: [
    {
      offset: 0,
      color: colorArr[0]
    },
    {
      offset: 0.5,
      color: colorArr[0]
    },
    {
      offset: 0.5,
      color: colorArr[1]
    },
    {
      offset: 1,
      color: colorArr[1]
    }
  ]
};

const industryData = [22, 35, 30, 25];
var option = {
  backgroundColor: 'rgba(0, 0, 0, 0.6)',
  tooltip: {
    trigger: 'axis',
    axisPointer: {
      type: 'shadow' // 'shadow' as default; can also be 'line' or 'shadow'
    }
  },
  grid: {
    left: '0%',
    right: '4%',
    bottom: '0%',
    top: '10px',
    containLabel: true
  },
  xAxis: {
    type: 'category',
    data: ['种植业', '养殖业', '旅游业', '服务业'],
    axisLabel: {
      color: '#E6F7FF'
    },
    axisLine: {
      show: true,
      lineStyle: {
        color: 'rgba(255, 255, 2555, 0.1)'
      }
    },
    axisTick: {
      show: false
    }
  },
  yAxis: {
    type: 'value',
    axisLabel: {
      color: '#E6F7FF'
    },
    splitLine: {
      show: true,
      lineStyle: {
        color: 'rgba(255,255,255,0.2)'
      }
    }
  },
  series: [
    {
      itemStyle: {
        normal: {
          // 这里是用一个柱子,从左到右的渐变。也可以用两个柱子做从上往下的渐变,和上面的透明渐变一样用法
          color
        }
      },
      data: industryData,
      type: 'bar',
      barWidth: 18,
      z: 2,
      name: '产业结构'
    },
    {
      z: 1,
      name: '产业结构',
      // 柱子底部
      type: 'pictorialBar',
      data: industryData,
      symbol: 'diamond',
      symbolOffset: [0, 4],
      symbolSize: [20, 8],
      itemStyle: {
        normal: {
          color: color
        }
      },
      tooltip: {
        show: false
      }
    },
    {
      z: 3,
      name: '产业结构',
      type: 'pictorialBar',
      // 柱子顶部
      symbolPosition: 'end',
      data: industryData,
      symbol: 'diamond',
      symbolOffset: [0, -11],
      symbolRotate: 90,
      symbolSize: [8, 19],
      itemStyle: {
        normal: {
          borderWidth: 2,
          color: colorArr[2]
        }
      },
      tooltip: {
        show: false
      }
    }
  ]
};

带阴影的3d柱子,主要是上要创建两个x轴,阴影的x轴要不显示。然后创建两个3d的柱子,阴影的柱子要用xAxisIndex关联上阴影的x轴
在这里插入图片描述

const situationColor = {
  type: 'linear',
  x: 1,
  y: 0,
  x2: 1,
  y2: 1,
  colorStops: [
    {
      offset: 0,
      color: '#4EF6F6'
    },
    {
      offset: 0.4,
      color: '#4EF6F6'
    },
    {
      offset: 1,
      color: 'rgba(2, 29, 54, 0.78)'
    }
  ]
};

const industryData = [22, 35, 30, 25];
var option = {
  backgroundColor: 'rgba(0, 0, 0, 0.6)',
  tooltip: {
    trigger: 'axis',
    axisPointer: {
      // Use axis to trigger tooltip
      type: 'shadow' // 'shadow' as default; can also be 'line' or 'shadow'
    }
  },
  grid: {
    left: '0%',
    right: '4%',
    bottom: '0%',
    top: '20px',
    containLabel: true
  },
  // 多个x轴
  xAxis: [
    {
      type: 'category',
      data: ['7月', '8月', '9月', '10月'],
      axisLine: {
        show: false,
        lineStyle: {
          color: '#E6F2FE'
        }
      },
      axisTick: {
        show: false
      },
    },
    // 第二个当作阴影柱子的轴,不显示
    {
      type: 'category',
      data: ['7月', '8月', '9月', '10月'],
      axisLine: {
        show: false,
        lineStyle: {
          color: '#E6F2FE'
        }
      },
      axisTick: {
        show: false
      },
      show: false
    }
  ],
  yAxis: {
    type: 'value',
    axisLine: {
      lineStyle: {
        color: '#E6F2FE'
      }
    },
    splitLine: {
      show: true,
      lineStyle: {
        color: 'rgba(255,255,255,0.2)'
      }
    }
  },
  series: [
    {
      name: '村名情意',
      type: 'bar',
      showSymbol: false,
      hoverAnimation: false,
      barWidth: 7,
      data: industryData,
      itemStyle: {
        //实体柱子左面
        normal: {
          borderWidth: 0,
          color: {
            type: 'linear',
            x: 1,
            y: 0,
            x2: 1,
            y2: 1,
            colorStops: [
              {
                offset: 0,
                color: '#267A7B'
              },
              {
                offset: 0.5,
                color: '#267A7B'
              },

              {
                offset: 1,
                color: 'rgba(2, 29, 54, 0.7)'
              }
            ]
          }
        }
      },
      tooltip: {
        show: false
      },

      z: 3
    },
    {
      name: '村名情意',
      tooltip: {
        show: true
      },
      type: 'bar',
      barWidth: 8,
      itemStyle: {
        //实体柱子右面
        normal: {
          color: situationColor,
          borderWidth: 0
        }
      },
      data: industryData,
      barGap: 0,
      z: 5
    },
    {
      //实体柱子顶部
      z: 10,
      name: '村名情意',
      type: 'pictorialBar',
      symbolPosition: 'end',
      data: industryData,
      symbol: 'diamond',
      symbolOffset: [0, -8],
      symbolRotate: 90,
      symbolSize: [3, 15.5],
      itemStyle: {
        normal: {
          borderWidth: 0,
          color: '#4EF6F6'
        }
      },
      tooltip: {
        show: false
      }
    },
    {
      //实体柱子底部
      z: 1,
      name: '村名情意',
      type: 'pictorialBar',
      symbolPosition: 'start',
      data: industryData,
      symbol: 'diamond',
      symbolOffset: [0, 7.8],
      symbolRotate: 90,
      symbolSize: [5, 15],
      itemStyle: {
        normal: {
          borderWidth: 0,
          color: 'rgba(2, 29, 54, 0.9)'
        }
      }
    },
    {
      //阴影柱子左面
      name: 'a',
      // 关联x轴的第二个轴
      xAxisIndex: 1,
      type: 'bar',
      showSymbol: false,
      hoverAnimation: false,
      barWidth: 7,
      // data 要拿到整组数据的最大值
      data: Array(industryData.length).fill(Math.max(...industryData)),
      itemStyle: {
        normal: {
          borderWidth: 0,
          color: 'rgba(31, 82, 86, 0.85)',
        }
      },
      tooltip: {
        show: false
      },
      z: 1,
    },
    {
      //阴影柱子右面
      name: 'a',
      // 关联x轴的第二个轴
      xAxisIndex: 1,
      tooltip: {
        show: false
      },
      type: 'bar',
      barWidth: 8,
      itemStyle: {
        normal: {
          color: 'rgba(53, 140, 144, 0.9)',
          borderWidth: 0,
        }
      },
      // data 要拿到整组数据的最大值
      data: Array(industryData.length).fill(Math.max(...industryData)),
      z: 1,
    },
    {
      //阴影柱子顶部
      z: 10,
      name: 'a',
      type: 'pictorialBar',
      symbolPosition: 'end',
      // data 要拿到整组数据的最大值
      data: Array(industryData.length).fill(Math.max(...industryData)),
      symbol: 'diamond',
      symbolOffset: [0, -8.2],
      symbolRotate: 90,
      symbolSize: [3, 15.5],
      itemStyle: {
        normal: {
          borderWidth: 0,
          color: 'rgba(53, 140, 144, 0.9)'
        }
      },
      tooltip: {
        show: false
      }
    }
  ]
};

有时柱子会带一些图标,也可以用type: "pictorialBar" 象形柱图来实现,比如下图发光的小图标。这里不需要用3d,需要渐变
在这里插入图片描述


var option = {
  backgroundColor: 'rgba(0, 0, 0, 0.6)',
  tooltip: {
    trigger: "axis",
    axisPointer: {
      type: "shadow",
    },
  },
  grid: {
    left: "0%",
    right: "43px",
    bottom: "0%",
    top: 0,
    containLabel: true,
  },

  xAxis: {
    type: "value",
    show: false,
    axisLine: {
      lineStyle: {
        color: "#E6F2FE",
      },
    },
  },
  yAxis: {
    type: "category",
    data: ["财务公开", "村务公开", "党务公开", "新媒体宣传", "党员在线教育"],
    axisLine: {
      show: false,
      lineStyle: {
        color: "#E6F2FE",
      },
      formatter: "{value} 个",
    },
    axisTick: {
      show: false,
    },
  },
  series: [
    {
      
      itemStyle: {
        normal: {
          label: {
            show: true,
            position: [340, 0],
            valueAnimation: true,
            color: "#01DAEA",
            formatter: "{c}个",
          },
          barBorderRadius: [0, 0, 50, 0],
          color: {
            type: "linear",
            x: 0,
            y: 0,
            x2: 1,
            y2: 1,
            colorStops: [
              {
                offset: 0,
                color: "#0A74F0", // 0% 处的颜色
              },
              {
                offset: 1,
                color: "#49EFFF", // 100% 处的颜色
              },
            ],
          },
        },
      },
      data: [91, 78, 157, 435, 672],
      type: "bar",
      showBackground: true,
      barWidth: 12,
      backgroundStyle: {
        color: "rgba(255, 255, 255, 0.2)",
      },
    },
    {
    	
      data: [91, 78, 157, 435, 672],
      type: "pictorialBar",
      symbolPosition: "end",
      symbolRotate: 7,
      // 发光的小图标 这里是base64的形式,也可以用网络图片
      symbol:
        "image://data:image/png;base64,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",
      symbolOffset: [20, 0],
      symbolSize: [36, 26],
      z: 10,
    },
  ],
};

更多echarts图表,可以参考echarts热门组件ppchart

在React中使用ECharts生成柱形图和饼图可以通过以下步骤实现: 1. 安装ECharts 可以通过npm安装ECharts: ``` npm install echarts --save ``` 2. 引入ECharts 在需要使用ECharts的组件中引入ECharts: ```jsx import echarts from 'echarts'; ``` 3. 创建ECharts实例 在React组件的生命周期函数componentDidMount中创建ECharts实例: ```jsx componentDidMount() { // 基于准备好的dom,初始化echarts实例 const myChart = echarts.init(document.getElementById('myChart')); // 绘制图表 myChart.setOption({...}); } ``` 4. 绘制柱形图 以下是一个简单的柱形图的绘制代码示例: ```jsx componentDidMount() { const myChart = echarts.init(document.getElementById('myChart')); myChart.setOption({ xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] }, yAxis: { type: 'value' }, series: [{ data: [820, 932, 901, 934, 1290, 1330, 1320], type: 'bar' }] }); } ``` 5. 绘制饼图 以下是一个简单的饼图的绘制代码示例: ```jsx componentDidMount() { const myChart = echarts.init(document.getElementById('myChart')); myChart.setOption({ series : [ { name: '访问来源', type: 'pie', radius: '55%', data:[ {value:235, name:'视频广告'}, {value:274, name:'联盟广告'}, {value:310, name:'邮件营销'}, {value:335, name:'直接访问'}, {value:400, name:'搜索引擎'} ] } ] }); } ``` 以上是一个简单的使用ECharts在React中绘制柱形图和饼图的过程,具体的图表样式和数据可以根据实际需求进行调整。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值