cell

概述

cell 是矩形标记(Rect Shape)的一种抽象表示,主要用于表示分面(facet)或者网格中的单元格,是图表中数据映射到视觉元素的最小单元。它一般是在可视化布局中用来表示网格化结构或数据分割的“单元”。具体来说,它是一种对区域的划分,在不同的分面中通常会对应一个独立的绘图区域,常见于矩阵型图表(如日历图、聚合热力图等)中。

import { Chart } from '@antv/g2';

const chart = new Chart({
  container: 'container',
});
chart.options({
  type: 'cell',
  data: {
    type: 'fetch',
    value: 'https://assets.antv.antgroup.com/g2/seattle-weather.json',
  },
  transform: [{ type: 'group', color: 'max' }], // 对数据进行分组变换,按颜色的最大值进行分组
  encode: {
    x: (d) => new Date(d.date).getUTCDate(), // 编码 x 轴,使用数据中的日期字段的 UTC 日期部分
    y: (d) => new Date(d.date).getUTCMonth(), // 编码 y 轴,使用数据中的日期字段的 UTC 月份部分
    color: 'temp_max', // 编码颜色,使用数据中的 temp_max 字段
    shape: 'cell',
  },
  style: { inset: 0.5 }, // 设置单元格的内边距为 0.5
  scale: {
    color: {
      type: 'sequential', // 设置颜色比例尺为顺序比例尺
      palette: 'gnBu', // 设置使用 'gnBu' 调色板
    },
  },
});

chart.render(); // 渲染图标

更多的案例,可以查看图表示例页面。

配置项

属性 描述 类型 默认值 必选
encode 配置 cell 标记的视觉通道,包括xycolorshape等,用于指定视觉元素属性和数据之间的关系 encode -
scale 配置 cell 标记的图形缩放,包括xycolorshape scale -
style 配置 cell 图形样式 style -
transform 配置 cell 数据转换操作(如分箱、排序、过滤等)。 transform -

encode

配置 cell 标记的视觉通道。

属性 描述 类型 默认值 必选
x 绑定 cell 标记的 x 属性通道,一般是 data 中的时间或有序名词字段 encode -
y 绑定 cell 标记的 y 属性通道,一般是 data 中的数值或数组字段 encode -
color 绑定 cell 标记的 color 属性通道,如果将数据字段映射到颜色通道,会对数据进行分组,将数据拆分成多个不同颜色的区域 encode -
shape 绑定 cell 标记的 shape 属性通道,改变图形标记的绘制形状,支持的属性:cell | hollow string cell

更多的encode配置,可以查查看 encode 介绍页面。

color

通过 encodecolor 属性,你可以将数据字段映射到颜色值,从而根据数据的变化自动调整标记的颜色。这对于数据可视化来说非常有用,因为它可以帮助您快速识别数据的模式和趋势。

import * as G2 from '@antv/g2';

const { Chart } = G2;
const chart = new Chart({
  container: 'container',
});
const container = chart.getContainer();

chart.options({
  type: 'cell',
  data: [
    { x: 'x-a', y: 'y-a', data1: 1, data2: 5 },
    { x: 'x-a', y: 'y-b', data1: 3, data2: 8 },
    { x: 'x-a', y: 'y-c', data1: 2, data2: 6 },
    { x: 'x-b', y: 'y-a', data1: 8, data2: 2 },
    { x: 'x-b', y: 'y-b', data1: 5, data2: 4 },
    { x: 'x-b', y: 'y-c', data1: 6, data2: 9 },
    { x: 'x-c', y: 'y-a', data1: 7, data2: 1 },
    { x: 'x-c', y: 'y-b', data1: 4, data2: 2 },
    { x: 'x-c', y: 'y-c', data1: 9, data2: 3 },
  ],
  encode: {
    x: 'x', // 编码 x 轴
    y: 'y', // 编码 y 轴
    color: 'data1', // 使用数据中的 data1 字段
  },
  style: {
    inset: 5,
    lineWidth: 10,
  },
});

// 插入Encode-Color 选择器
const selectorContainer = document.createElement('div');
selectorContainer.textContent = '选择映射到颜色的字段 ';
const selector = document.createElement('select');
selector.innerHTML = `
    <option value="data1" selected>data1</option>
    <option value="data2">data2</option>
  `;

selector.onchange = (e) => {
  chart.options({
    encode: {
      color: e.target.value, // 使用选中的字段映射颜色
    },
  });
  chart.render(); // 重新渲染图表
};
selectorContainer.appendChild(selector);
container.insertBefore(selectorContainer, container.childNodes[0]);

chart.render();

shape

通过 encodeshape 属性,您可以指定单元格的几何形状。shape 决定了每个单元格(cell)在画布上以什么样的形状渲染出来。shape 标记的支持的形状如下:

形状 描述 示例
cell 使用颜色填充整个表格
hollow 绘制平滑曲线的面积图

scale

scale用于定义数据如何映射到视觉属性(如颜色、大小、形状等)。在cell的使用场景,scale 的常见作用就是为每个视觉通道(如颜色、大小、位置等)提供映射规则,使数据点能够准确地呈现。

属性 描述 类型 默认值
[channel] 映射到视觉属性的通道 Record<string, scale> -

更多的scale配置,可以查查看 scale 介绍页面。

style

style 用于设置图表元素的外观样式,包括填充颜色、边框样式、阴影效果等。

属性 描述 类型 默认值
radius 矩形的四个圆角大小 number | Function<number> 0
radiusTopLeft 左上角的圆角 number | Function<number> 0
radiusTopRight 右上角的圆角 number | Function<number> 0
radiusBottomRight 右下角的圆角 number | Function<number> 0
radiusBottomLeft 左下角的圆角 number | Function<number> 0
inset 矩形四个方向的内边距 number | Function<number> 0
insetLeft 左边的内间距 number | Function<number> 0
insetRight 右边的内间距 number | Function<number> 0
insetBottom 下面的内间距 number | Function<number> 0
insetTop 上面的内间距 number | Function<number> 0
fill 图形的填充色 string | Function<string> shapehollow时,默认值为 ‘’
fillOpacity 图形的填充透明度 number | Function<number> shapecell时,默认值为 0.95
stroke 图形的描边 string | Function<string> -
strokeOpacity 描边透明度 number | Function<number> shapehollow时,默认值为 1
lineWidth 图形描边的宽度 number | Function<number> shapehollow时,默认值为 2
lineDash 描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0, 0]的效果为没有描边。 [number,number] | Function&lt;[number, number]&gt; -
opacity 图形的整体透明度 number | Function<number> -
shadowColor 图形阴影颜色 string | Function<string> -
shadowBlur 图形阴影的高斯模糊系数 number | Function<number> -
shadowOffsetX 设置阴影距图形的水平距离 number | Function<number> -
shadowOffsetY 设置阴影距图形的垂直距离 number | Function<number> -
cursor 鼠标样式。同 css 的鼠标样式,默认 ‘default’。 string | Function<string> ‘default’

更多的style配置,可以查看 style 介绍页面。

transform

transform 是用于数据转换的核心配置项,它允许在数据绑定到图形标记之前对原始数据进行预处理。通过对数据的加工,生成更适合可视化的结构化数据,从而更清晰地表达数据分布、密度或统计特征。

属性 描述 类型 默认值
type 针对哪些通道做数据分组聚合 string | string[] [‘x’, ‘y’]
[channel] 输出到具体 mark 的 channel 数据的聚合方式 Reducer -
type Primitive = number | string | boolean | Date;

type Reducer =
  | 'mean'
  | 'max'
  | 'count'
  | 'min'
  | 'median'
  | 'sum'
  | 'first'
  | 'last'
  | ((I: number[], V: Primitive[]) => Primitive);

更多的transform配置,可以查看 transform 介绍页面。

尝试一下:

/**
 * A recreation of this demo: https://observablehq.com/@mbostock/the-impact-of-vaccines
 */
import { Chart } from '@antv/g2';

const chart = new Chart({
  container: 'container',
  width: 1300,
  height: 900,
});

chart.options({
  type: 'view',
  data: {
    type: 'fetch',
    value: 'https://assets.antv.antgroup.com/g2/vaccines.json',
  },
  axis: {
    y: { labelAutoRotate: false },
    x: {
      tickFilter: (d) => d % 10 === 0,
      position: 'top',
    },
  },
  scale: {
    color: {
      palette: 'puRd',
      relations: [
        [(d) => d === null, '#eee'],
        [0, '#fff'],
      ],
    },
  },
  children: [
    {
      type: 'cell',
      encode: { x: 'year', y: 'name', color: 'value' },
      style: { inset: 0.5 },
      tooltip: { title: { channel: 'color', valueFormatter: '.2f' } },
    },
    {
      type: 'lineX',
      data: [1963],
      style: { stroke: 'black' },
      labels: [
        {
          text: '1963',
          position: 'bottom',
          textBaseline: 'top',
          fontSize: 10,
        },
        {
          text: 'Measles vaccine introduced',
          position: 'bottom',
          textBaseline: 'top',
          fontSize: 10,
          fontWeight: 'bold',
          dy: 10,
        },
      ],
      tooltip: false,
    },
  ],
});

chart.render();

全站搜索
文档与示例输入关键词开始搜索

输入关键词,查找文档、API 与示例

选择打开Esc关闭