未等月圆 2024-07-28 11:19 采纳率: 100%
浏览 52
已结题

为什么echarts极坐标柱形图的图形显示的特别小呢

为什么echarts极坐标柱形图的图形显示的特别小呢,改什么都没用
如果只给series的data传一组数据的话图形大小就是正常的,但是我想要legengd图例分别显示出来,只能给series多组数据
假如给data传包含所有数据对象数组 ,大小就是正常的,但是就无法达到我想要的分别显示华东华北等legend图例的效果

img

img

这是props.data.abnormals里的数据

img

这是出问题的数据

img

const getSeriesData = () => {
  // const series:any|[] = []
  const series = JSON.parse(JSON.stringify(props.data.abnormals)).map((item: any) => {

    return {
      type: 'bar',
      name: item.name,
      data: [{value:item.value}],
      coordinateSystem: 'polar', // 使用极坐标
    }

  })  
  return series
}

 const options = {
    polar: {
      radius: '100%'

    },
    angleAxis: {
      // 设置角度最大值为数据最大值的两倍,即可实现半圆效果
      max: '1000',

      startAngle: 90, // 圆弧起始角度
    
      // axisTick: {
      //   show: false // 隐藏坐标轴刻度
      // },
      // axisLine: {
      //   show: false // 隐藏坐标轴轴线
      // },
      // splitLine: {
      //   show: false // 隐藏区域分隔线
      // },
      // axisLabel: {
      //   show: false // 隐藏坐标轴刻度标签
      // },
      clockwise: false
    },
    radiusAxis: {
      type: 'category',
      min:'200',
      // 是否显示坐标轴刻度
      axisTick: {
        show: false
      },
      // 是否显示坐标轴轴线。
      axisLine: {
        show: false
      },
      // 是否显示刻度标签。
      axisLabel: {
        show: false,
        // overflow: 'truncate', // 截断,并在末尾显示ellipsis配置的文本,默认为...
        // interval: 0, // 不重叠展示完整标签
        // margin: -40,
        // color: '#9eb1c8'
      },
      data: props.data.abnormals.map((item: any) => {
        return item.name
      })
    },
    tooltip: {
      show: true,
      trigger: 'item',
      formatter: '{b}:{c}'
    },
    grid: {
      top: 0,
      right: 0,
      bottom: 0,
      left: 0,
      // 把标签包含进去
      containLabel: true
    },
    legend: {
      show: true,
      // 图例色块
      icon: 'circle',
      // 位置
      top: '14%',
      left: '60%',
      // 展示数据
      data: props.data.abnormals.map((item: any) => {
        return item.name
      }),
      // // 总宽度(一列)
      width: 5,
      // // 每个色块的宽
      itemWidth: 10,
      // // 每个色块的高度
      itemHeight: 10,
      // // item 间距
      itemGap: 5,
      // 展示内容
      formatter: function (name: any) {
        return '{title|' + name + '}'
      },
      // 字体配置
      textStyle: {
        rich: {
          title: {
            fontSize: 12,
            lineHeight: 1,
            color: '#fff'
          }
        }
      }
    },
    series:getSeriesData()

  • 写回答

18条回答 默认 最新

  • 叫兽-郭老师 新星创作者: Java技术领域 2024-07-28 11:37
    关注

    🕖上午好,题主!目前:🟢[在线]
    📢参考通义千问、由郭老师整理提供!
    📣今日诗号:惆怅东栏一株雪,人生看得几清明。

    你遇到的问题是 ECharts 极坐标柱形图在使用多组数据模拟图例效果时,图形显示过小的原因。这通常是因为每组数据只有一个数据点,导致柱形的宽度被极坐标系的角度分割得过小。

    以下是一种解决方案,结合你的代码和描述,提供完整的代码和解释:

    const options = {
      polar: {
        radius: '80%' // 适当调整半径,为图形留出更多空间
      },
      angleAxis: {
        max: '1000', // 根据数据调整最大角度
        startAngle: 90,
        clockwise: false,
        axisLine: {
          show: false // 隐藏角度轴线,使图形更清晰
        },
        axisTick: {
          show: false // 隐藏角度轴刻度
        },
        splitLine: {
          show: false // 隐藏网格线
        }
      },
      radiusAxis: {
        type: 'category',
        // min: '200', // 可以根据需要设置最小值
        axisTick: {
          show: false
        },
        axisLine: {
          show: false
        },
        axisLabel: {
          show: true, // 显示区域标签
          color: '#9eb1c8' 
        },
        data: props.data.abnormals.map((item: any) => item.name)
      },
      tooltip: {
        show: true,
        trigger: 'item',
        formatter: '{b}:{c}'
      },
      grid: {
        top: 0,
        right: 0,
        bottom: 0,
        left: 0,
        containLabel: true
      },
      legend: {
        show: true,
        icon: 'circle',
        top: '14%',
        left: '60%',
        data: props.data.abnormals.map((item: any) => item.name),
        width: 5,
        itemWidth: 10,
        itemHeight: 10,
        itemGap: 5,
        formatter: function (name: any) {
          return '{title|' + name + '}';
        },
        textStyle: {
          rich: {
            title: {
              fontSize: 12,
              lineHeight: 1,
              color: '#fff'
            }
          }
        }
      },
      series: props.data.abnormals.map((item: any) => ({
        type: 'bar',
        name: item.name,
        data: Array(props.data.abnormals.length).fill(null).map((_, index) => 
                index === props.data.abnormals.findIndex(d => d.name === item.name) ? item.value : null),
        coordinateSystem: 'polar'
      }))
    };
    

    解释:

    1. 数据处理: 关键在于 series 数据的处理方式。我们使用 Array(props.data.abnormals.length).fill(null) 创建一个与区域数量相同的数组,并在对应的位置填充数据,其他位置保持为 null。这样,每个系列都包含所有区域的数据,但只有一个区域的值是非空的,从而实现期望的图例和图形效果。
    2. 调整半径:polar.radius 设置为小于 100% 的值,例如 '80%',可以为图形留出更多空间,避免柱形过小。
    3. 隐藏不必要的元素: 隐藏角度轴线、刻度和网格线可以使图形更清晰,并将注意力集中在数据柱上。

    通过以上调整,你就可以在 ECharts 极坐标柱形图中使用多组数据模拟图例效果,并解决图形显示过小的问题了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(17条)

报告相同问题?

问题事件

  • 系统已结题 8月12日
  • 已采纳回答 8月4日
  • 赞助了问题酬金15元 7月28日
  • 修改了问题 7月28日
  • 展开全部