3d圆柱柱状图

描述:当前是关于Echarts图表中的 柱状图 示例。
 
            // mock 数据
const dataArr = {
   xdata: ['01-01', '01-02', '01-03', '01-04', '01-05', '01-06', '01-07'],
   result: [
      { name: '天河', data: [320, 435, 490, 340, 320, 270, 360] },
      { name: '海珠', data: [150, 220, 210, 310, 140, 180, 288] },
      { name: '荔湾', data: [250, 120, 240, 280, 240, 180, 288] },
      { name: '黄埔', data: [180, 420, 370, 250, 210, 180, 288] },
      { name: '越秀', data: [130, 210, 340, 240, 220, 180, 288] },
      { name: '白云', data: [210, 260, 230, 220, 260, 180, 288] },
   ]
}
const diamondData = dataArr.result.reduce((pre, cur, index) => {
   pre[index] = cur.data.map((el, id) => el + (pre[index - 1] ? pre[index - 1][id] : 0))
   return pre
}, [])

const color = [
   [{ offset: 0, color: "#dc0707", }, { offset: 1, color: "#af0808", }],
   [{ offset: 0, color: "#f67c20", }, { offset: 1, color: "#cc681e", }],
   [{ offset: 0, color: "#efff37", }, { offset: 1, color: "#d5e700", }],
   [{ offset: 0, color: "#32ffee", }, { offset: 1, color: "#00e8d5", }],
   [{ offset: 0, color: "#46c9ff", }, { offset: 1, color: "#00b4ff", }],
   [{ offset: 0, color: "#54a0ff", }, { offset: 1, color: "#1f83ff", }],
]

let series = dataArr.result.reduce((p, c, i, array) => {
   p.push({
      z: i + 1,
      stack: true,
      type: 'bar',
      name: c.name,
      barWidth: 30,
      data: c.data,
      itemStyle: {
         color:
            { type: 'linear', x: 0, x2: 0, y: 0, y2: 1, colorStops: color[i] }
      },
   }, {
      z: i + 10,
      name: c.name,
      type: 'pictorialBar',
      symbolPosition: 'end',
      symbol: 'circle',
      symbolOffset: [0, '-50%'],
      symbolSize: [30, 15],
      data: diamondData[i],
      itemStyle: {
         // color: {
         // 	type: 'linear',
         // 	x: 0, x2: 0, y: 0, y2: 1,
         // 	colorStops: color[i + 1]
         // },
         color: color[i + 1] ? color[i + 1][0].color : null
      },
      tooltip: { show: false },
   })

   return p
}, [])


// 最上边顶
series.push({
   name: dataArr.result[dataArr.result.length - 1].name,
   z: 20,
   type: "pictorialBar",
   symbolPosition: "end",
   data: diamondData[diamondData.length - 1],
   symbol: "circle",
   symbolOffset: ["0%", "-50%"],
   symbolSize: [30, 15],
   itemStyle: {
      color: color[color.length - 1][0].color
   },
   tooltip: { show: false },
})

// 最下边底
series.push({
   name: dataArr.result[0].name,
   z: 30,
   type: "pictorialBar",
   symbolPosition: "start",
   data: diamondData[0],
   symbol: "circle",
   symbolOffset: ["0%", "50%"],
   symbolSize: [30, 15],
   itemStyle: {
      color: color[0][0].color
   },
   tooltip: { show: false },
})

// 背景柱子
series.push({
   z: 2,
   type: 'bar',
   barWidth: 30,
   data: diamondData[0].map(m => 2300),
   barGap: '-100%',
   itemStyle: {
      color:
      {
         type: 'linear', x: 0, x2: 0, y: 0, y2: 1,
         colorStops: [{ offset: 0, color: "rgba(90,90,90,.2)", }, { offset: 0.5, color: "rgba(90,90,90,.2)", }, { offset: 0.5, color: "rgba(90,90,90,.1)", }, { offset: 1, color: "rgba(90,90,90,.1)", }],
      }
   },
}, {
   z: 3,
   type: "pictorialBar",
   symbolPosition: "end",
   data: diamondData[0].map(m => 2300),
   symbol: "circle",
   symbolOffset: ["0%", "-50%"],
   symbolSize: [30, 15],
   itemStyle: {
      color: 'rgba(90,90,90,0.6)'
   },
   tooltip: { show: false },
})

// 渲染
option = {
   tooltip: { trigger: "axis" },
   xAxis: {
      axisTick: { show: true },
      axisLine: { lineStyle: { color: 'rgba(255,255,255, .2)' } },
      axisLabel: { textStyle: { fontSize: 12, color: '#fff' }, },
      data: dataArr.xdata
   },
   yAxis: [{
      splitLine: { lineStyle: { color: 'rgba(255,255,255, .05)' } },
      axisLine: { show: false, },
      axisLabel: { textStyle: { fontSize: 16, color: '#fff' } }
   }],
   grid: { top: '10%', left: '10%', right: '3%', bottom: '15%' },
   legend: {
      data: dataArr.result.map(item => item.name),
      textStyle: { fontSize: 14, color: '#fff' },
      itemWidth: 25,
      itemHeight: 15,
      itemGap: 15,
      bottom: '5%',
   },
   backgroundColor: 'rgba(0, 0, 0, .8)',
   series: series
}