echarts树图

 <div 
    id="brinsonTreeChart" 
    ref="brinsoTreeChartRef" 
    style="width: 100%; height: 250px;">
 </div>

 data () {
   return {
     // treeData: null,
     treeData: {
       "name": "基金收益",
       "returnRate": "58.84",
       "type": "root",
       "children": [
          {
            "name": "基准收益率",
            "returnRate": "20.64",
            "type": "sub",
            "children": []
          },
          {
            "name": "超额收益",
            "returnRate": "38.21",
            "type": "sub",
            "children": [
                {
                    "name": "行业配置",
                    "returnRate": "38.34",
                    "type": "final",
                    "children": []
                },
                {
                    "name": "个股选择",
                    "returnRate": "-21.64",
                    "type": "final",
                    "children": []
                },
                {
                    "name": "交互项",
                    "returnRate": "21.50",
                    "type": "final",
                    "children": []
                }
            ]
          }
        ]
     }
   }
 },
 mounted() {
    this.initTreeChart()
  },

methods: {
initTreeChart () {
      var chartDom = document.getElementById('brinsonTreeChart');
      this.chart = echarts.init(chartDom);
      let option 
      if (!this.treeData) {
        option = {
          title: {
            text: '暂无数据',
            x: 'center',
            y: 'center',
            textStyle: {
              fontSize: 14,
              fontWeight: 'normal',
            }
          }
        }
      } else {
        option = {
          tooltip: {
            // show: false,
            trigger: 'item',
            triggerOn: 'mousemove',
            color: '#fff',
            backgroundColor: 'rgba( 0, 0, 0,0.7)',
            borderColor: 'rgba( 0, 0, 0,0.7)',
            formatter: function(params) {
              // console.log(params,'params----------');
              let str = ''
              str = `<span style='color: #fff;'>${params.data.name}:  ${params.data.returnRate}%</span>`
              return str;
            }
          },
          series: [{
            type: 'tree',
            data: this.recursionFun([this.treeData]),
            layout: 'orthogonal', // 正交布局(水平 和 垂直)
            orient: 'TB', // 只有 layout = 'orthogonal' 的时候,该配置项才生效。取值分别为 从左到右('LR') , 从右到左('RL'), 从上到下('TB'), 从下到上('BT')。配置项值 'horizontal' 等同于 'LR', 'vertical' 等同于 'TB'
            // orient: 'vertical', // 树整体的方向,horizontal 横向;vertical 竖向
            nodePadding: 20, // nodePadding的数组值为[10, 20],表示第一层节点与第二层节点之间的水平间距为10,垂直间距为 20; 发现不起作用!!!
            layerPadding: 40,  // 发现不起作用!!!
            edgeShape: 'polyline', // 设置连接线曲线还是折线,默认情况下是曲线,curve曲线 polyline直线
            symbol: 'none', // 节点标记形状 roundRect、rect
            // symbolSize: [120, 60], // 设置框的大小
            // symbolSize: 80, // 设置框的大小
            // left: '2%',
            // right: '2%',
            // top: '2%',
            // bottom: '20%',
            initialTreeDepth: 10, // 默认树展开的层数
            // 线条的颜色
            lineStyle: {
              color: '#ccc',
              type: 'solid',
              width: 2,
            },
            label: {
              show: true,
              position: 'inside',
              verticalAlign: 'middle',
              align: 'center',
              // width: 80,
              overflow: 'truncate',
              ellipsis: '...',
              formatter: function(params) {
                // console.log(params,'params----------');
                return `{name|${params.data.name}}` + '\n' + `{returnRate|${params.data.returnRate + '%'}}`
              },
              rich: {
                name: {
                  color: '#fff',
                  fontSize: 13,
                  align: 'center',
                  lineHeight: 35,
                  padding: [0, 3]
                },
                returnRate: {
                  color: '#fff',
                  fontSize: 13,
                  align: 'center',
                  lineHeight: 5,
                },
              },
            },
            expandAndCollapse: true, // 子树折叠和展开的交互,默认打开
            animationDuration: 550, // 初始动画的时长
            animationDurationUpdate: 750, // 数据更新动画的时长
          }],  
        }
      }
      
      this.chart.setOption(option,true);
    },

    // 递归处理树图数据
    recursionFun(data) {
      for (let i = 0; i < data.length; i++) {
          // 根据level标识符判断
          if (data[i].type === 'root') {
            data[i].label = {
              width: 80,
              height: 50,
              backgroundColor: '#5391db',
              borderRadius: 5,
              fontSize: 15,
            }
          } else if (data[i].type === 'sub') {
            data[i].label = {
              width: 80,
              height: 50,
              backgroundColor: '#e2835a',
              borderRadius: 5,
            }
          } else if (data[i].type === 'final') {
            data[i].label = {
              width:80,
              height: 50,
              backgroundColor: '#D9A41F',
              borderRadius: 5,
            }
          } else {
          }
          if (data[i].children && data[i].children.length > 0) {
              this.recursionFun(data[i].children);
          }
      }
      return data;
    },
}

效果图:
在这里插入图片描述

echarts是一种数据可视化表,用于展示树形结构的数据关系。通过节点和边的连接方式,清晰地显示出数据之间的层级关系。 在echarts中,的相关参数可以通过echarts官方网站提供的文档进行了解。这个文档中详细介绍了的配置项和用法,可以根据自己的需求进行参数的调整和设置。 如果想要实现点击节点收缩的功能,可以使用提供的js脚本。根据引用的说明,需要替换原来的echarts.js文件或在原echarts.js中添加一句代码。可以在压缩包中找到相关的引用介绍和使用说明。 总之,echarts是一种功能强大的数据可视化工具,可以用于展示树形结构的数据关系,并且可以通过配置参数和使用相关的js脚本实现各种交互功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [echarts-tree(带查询条件的导航)](https://blog.youkuaiyun.com/WZY_snail/article/details/107343887)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [echarts实现点击收缩子节点](https://download.youkuaiyun.com/download/sinat_25528181/9507939)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值