!!!###!!!title=透视组合图表——VisActor/VTable 教程文档!!!###!!!!!!###!!!description=透视组合图是一种数据可视化技术,它将相同类型的图表按照一定的规则进行排列组合,形成一个大的图表,每个小图表呈现一部分数据。透视组合图常用于将大量数据分组展示,以便更好地观察和比较不同数据之间的关系。透视组合图的优点在于它可以同时呈现多个数据维度,使得用户可以更全面地了解数据之间的关系。此外,透视组合图还可以通过调整子图表的排列方式和大小,使得用户可以更方便地比较不同数据之间的差异。!!!###!!!

透视组合图表简介

透视组合图是一种数据可视化技术,它将相同类型的图表按照一定的规则进行排列组合,形成一个大的图表,每个小图表呈现一部分数据。透视组合图常用于将大量数据分组展示,以便更好地观察和比较不同数据之间的关系。 透视组合图的优点在于它可以同时呈现多个数据维度,使得用户可以更全面地了解数据之间的关系。此外,透视组合图还可以通过调整子图表的排列方式和大小,使得用户可以更方便地比较不同数据之间的差异。

应用场景

透视组合图在数据可视化中有许多应用场景,以下是其中的一些例子:

  • 大数据集合的可视化:透视组合图可以用来可视化大数据集合,通过将数据按照一定的规则进行排列组合,将数据分组展示,使得用户可以更好地理解数据之间的关系。
  • 多维数据的可视化:透视组合图可以用来可视化多维数据。通过将数据按照不同的属性进行分组,并将每个分组的数据以一定的形式呈现,使得用户可以同时观察多个维度的数据。
  • 数据的比较和分析:透视组合图可以用来比较和分析数据。通过将数据按照不同的属性进行分组,并将每个分组的数据以一定的形式呈现,使得用户可以更方便地比较和分析不同数据之间的差异和关系。
  • 数据探索和发现:透视组合图可以用来探索和发现数据中的规律和趋势。通过将数据按照不同的属性进行分组,并将每个分组的数据以一定的形式呈现,使得用户可以更全面地了解数据之间的关系,从而发现数据中的规律和趋势。
  • 数据报告和展示:透视组合图可以用来展示数据报告。通过将数据按照不同的属性进行分组,并将每个分组的数据以一定的形式呈现,可以使得数据报告更加易于理解和呈现。

透视组合图的结构

结构可对比透视表。相比透视表,透视组合图除了有列表头,行标头,角表头,body 之外,还可以配置坐标轴组件,四个方向分别对应上轴,下周,左轴,右轴,同时还可以单独配置图例组件

具体相关配置如下:

{
    rows: [
       {
          dimensionKey: 'Order Year',
          title: 'Order Year',
          headerStyle: {
            textBaseline:'top',
            textStick: true
          }
        },
        'Ship Mode'
    ],
    columns: [
        {
          dimensionKey: 'Region',
          title: '',
          headerStyle: {
            textStick: true
          }
        },
        'Category'
    ],
    indicators: [
      {
        indicatorKey: 'Quantity',
        title: 'Quantity',
        cellType:'chart',
        chartModule:'vchart',
        chartSpec:{} //对应vchart的spec,具体可参考vchart官网
      },
      {
        indicatorKey: 'Sales',
        title: 'Sales & Profit',
        cellType:'chart',
        chartModule:'vchart',
        chartSpec:{} //对应vchart的spec,具体可参考vchart官网
      }
    ],
    axes: [
      {
        orient: 'bottom'
      },
      {
        orient: 'left',
        title: {
          visible: true
        }
      },
      {
        orient: 'right',
        visible: true,
        grid: {
          visible: false
        }
      }
    ],
    legends: {
      data: [
        {
          label: '公司-数量',
          shape: {
            fill: '#2E62F1',
            symbolType: 'circle'
          }
        },
        {
          label: '小型企业-数量',
          shape: {
            fill: '#4DC36A',
            symbolType: 'square'
          }
        },
        ...
      ],
      orient: 'bottom',
      position: 'start',
      maxRow: 1,
      padding: [50, 0, 0, 0]
    },
    records:[
      {
        "Segment-Indicator": "Consumer-Quantity",
        "Region": "Central",
        "Category": "Furniture",
        "Quantity": "16",
        "Sub-Category": "Chairs",
        "Order Year": "2015",
        "Segment": "Consumer",
        "Ship Mode": "First Class"
      },
      {
        "Segment-Indicator": "Consumer-Quantity",
        "Region": "Central",
        "Category": "Furniture",
        "Quantity": "4",
        "Sub-Category": "Tables",
        "Order Year": "2015",
        "Segment": "Consumer",
        "Ship Mode": "First Class"
      },
      {
        "Segment-Indicator": "Corporate-Quantity",
        "Region": "Central",
        "Category": "Furniture",
        "Quantity": "2",
        "Sub-Category": "Bookcases",
        "Order Year": "2015",
        "Segment": "Corporate",
        "Ship Mode": "First Class"
      },
      ...
   ]
}

对应上面透视组合图的示意图结构:

  • rows 配置了行标头对应的维度Order YearShip Mode
  • columns 配置了列表头对应的维度RegionCategory
  • indicators 配置了要分析的指标数据Quantity, Sales, Profit
    • Quantity对应上图中的指标 1,用了柱状图表展示趋势;
    • SalesProfit 对应上图中的指标 2 和指标 3,用组合双轴图展示两个指标的数据情况。
    • 需要在 indicator的具体配置中设置cellType:'chart', chartModule:'vchart',来指明要配置图表渲染类型,并指明注册的图表库名称为vchart
    • 具体的 chartSpec 配置可参考VChart 官网
  • indicatorAsCol 配置指标在行头还是列头,需要注意的是:
    • 如果为 true 也就是指标在列头,则对应图表的展示方位 direction 为horizontal横向展示;
    • 如果为 false 也就是指标在行头,则对应图表的展示方位 direction 为vertical纵向展示;
  • legends 配置图例样式;
  • axes 配置轴全局的样式,指标配置中 chartSpec 中如已配置 axes 则优先使用 chartSpec 中的配置。
  • chartDimensionLinkage 多个图表基于相同维度值进行交互联动的功能. 透视图的高级能力,开启会有可能会影响一定性能,具体配置可参考透视图高级能力

图表库注册

在使用之前需要先注入使用的图表库组件:

import VChart from '@visactor/vchart';
VTable.register.chartModule('vchart', VChart);

图表事件

想要监听 chart 图表的事件,可以使用 onVChartEvent 实现,vtable 做了简单的事件代理,支持的事件类型及回调还是都统一和 vchart 一致,具体可参考VChart 事件

     tableInstance.onVChartEvent('click', args => {
        console.log('onVChartEvent click', args);
      });
      tableInstance.onVChartEvent('mouseover', args => {
        console.log('onVChartEvent mouseover', args);
      });

图例配置及图例联动

如何实现表格图例和 chart 的联动效果?

图例配置

可以参考表格图例教程来配置显示在表格外部的图例。 上述图片中的配置如下:

     legends: {
      orient: 'bottom',
      type: 'discrete',
      data: [
        {
          label: 'Consumer-Quantity',
          shape: {
            fill: '#2E62F1',
            symbolType: 'circle'
          }
        },
        {
          label: 'Consumer-Quantity',
          shape: {
            fill: '#4DC36A',
            symbolType: 'square'
          }
        },
         {
          label: 'Home Office-Quantity',
          shape: {
            fill: '#FF8406',
            symbolType: 'square'
          }
        },
        {
          label: 'Consumer-Sales',
          shape: {
            fill: '#FFCC00',
            symbolType: 'square'
          }
        },
        {
          label: 'Consumer-Sales',
          shape: {
            fill: '#4F44CF',
            symbolType: 'square'
          }
        },
         {
          label: 'Home Office-Sales',
          shape: {
            fill: '#5AC8FA',
            symbolType: 'square'
          }
        },
        {
          label: 'Consumer-Profit',
          shape: {
            fill: '#003A8C',
            symbolType: 'square'
          }
        },
        {
          label: 'Consumer-Profit',
          shape: {
            fill: '#B08AE2',
            symbolType: 'square'
          }
        },
         {
          label: 'Home Office-Profit',
          shape: {
            fill: '#FF6341',
            symbolType: 'square'
          }
        }
      ]
    }

该配置中配置了图例的每一项的颜色和形状,以及 lable 值。

因为这个配置中需要明确设置色值,所以在配置图表的 spec 中也需要指定颜色映射规则。可参考color 的配置方式.

在上图示例中我们在 chartSpec 中加入了如下配置,以保证 chart 图中颜色和 legend 图例的颜色保持一致:

scales: [
              {
                id: 'color',
                type: 'ordinal',
                domain: [
                  'Consumer-Quantity',
                  'Corporate-Quantity',
                  'Home Office-Quantity',
                  'Consumer-Sales',
                  'Corporate-Sales',
                  'Home Office-Sales',
                  'Consumer-Profit',
                  'Corporate-Profit',
                  'Home Office-Profit'
                ],
                range: [
                  '#2E62F1',
                  '#4DC36A',
                  '#FF8406',
                  '#FFCC00',
                  '#4F44CF',
                  '#5AC8FA',
                  '#003A8C',
                  '#B08AE2',
                  '#FF6341',
                  '#98DD62',
                  '#07A199',
                  '#87DBDD'
                ]
              }
            ]

图例联动

通过事件LEGEND_ITEM_CLICK来监听图例项点击,调用 VTable 的接口updateFilterRules来处理数据展示过滤掉的图表。

      const { LEGEND_ITEM_CLICK } = VTable.ListTable.EVENT_TYPE;
      tableInstance.on(LEGEND_ITEM_CLICK, args => {
        console.log('LEGEND_ITEM_CLICK', args);
        tableInstance.updateFilterRules([
          {
            filterKey: 'Segment-Indicator',
            filteredValues: args.value
          }
        ]);
      });