---
title: Shape Style Properties
order: 8
---
Shape is the basic element on an item (node/edge). The `style` of a node or an edge corresponds to the shape properties of its keyShape (key shape). The `style` in `labelCfg` of a label on a node or an edge corresponds to the properties of text shape.
```javascript
group.addShape('rect', {
attrs: {
fill: 'red',
shadowOffsetX: 10,
shadowOffsetY: 10,
shadowColor: 'blue',
shadowBlur: 10,
opacity: 0.8,
},
// must be assigned in G6 3.3 and later versions. it can be any value you want
name: 'rect-shape',
});
```
G6 has these shapes:
- [circle](#circle);
- [rect](#rect);
- [ellipse](#ellipse);
- [polygon](#polygon);
- [fan](#fan);
- [image](#image);
- [marker](#marker);
- [path](#path);
- [text](#text);
- [dom(svg)](#dom-svg): DOM (available only when the `renderer` of Graph instance is `'svg'`).
## Common Property
### name
_String_ **required**
Must be assigned in G6 3.3 and later versions. It can be any value you want
### fill
_String_ **optional**
The color(RGB or Hex) or [gradient](/en/docs/manual/middle/elements/advanced-style/gradient) color for filling. The corresponding property in canvas is `fillStyle`. Examples: `rgb(18, 150, 231)`,`#c193af`,`l(0) 0:#ffffff 0.5:#7ec2f3 1:#1890ff`, `r(0.5, 0.5, 0.1) 0:#ffffff 1:#1890ff`.
### stroke
_String_ **optional**
The color(RGB or Hex) or [gradient](/en/docs/manual/middle/elements/advanced-style/gradient) color for stroke. The corresponding property in canvas is `strokeStyle`. Examples: `rgb(18, 150, 231)`,`#c193af`,`l(0) 0:#ffffff 0.5:#7ec2f3 1:#1890ff`, `r(0.5, 0.5, 0.1) 0:#ffffff 1:#1890ff`.
### lineWidth
_Number_ **optional**
The width of the stroke.
### lineDash
_Number | Number[]_ **optional**
The lineDash of the stroke. If its type is `Number[]`, the elements in the array are the lengths of the lineDash.
### shadowColor
_String_ **optional**
The color of the shadow.
### shadowBlur
_Number_ **optional**
The blur level for shadow. Larger the value, more blur.
### shadowOffsetX
_Number_ **optional**
The horizontal offset of the shadow.
### shadowOffsetY
_Number_ **optional**
The vertical offset of the shadow.
### opacity
_Number_ **optional**
The opacity (alpha value) of the shape. The corresponding property in canvas is `globalAlpha`.
### fillOpacity
_Number_ **optional**
The filling opacity (alpha value) of the shape. The priority is higher than `opacity`. Range [0, 1].
### strokeOpacity
_Number_ **optional**
The stroke opacity (alpha value) of the shape. The priority is higher than `opacity`. Range [0, 1].
### cursor
_String_ **optional**
The type of the mouse when hovering the node. The options are the same as [cursor in CSS](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor).
## Circle
```javascript
group.addShape('circle', {
attrs: {
x: 100,
y: 100,
r: 50,
fill: 'blue',
},
// must be assigned in G6 3.3 and later versions. it can be any value you want
name: 'circle-shape',
});
```
### x
_Number_ **optional**
The x of the center of the circle.
### y
_Number_ **optional**
The y of the center of the circle.
### r
_Number_ **optional**
The radius of the circle.
## Ellipse
```javascript
group.addShape('ellipse', {
attrs: {
x: 100,
y: 100,
rx: 50,
ry: 50,
fill: 'blue',
},
// must be assigned in G6 3.3 and later versions. it can be any value you want
name: 'ellipse-shape',
});
```
### x
_Number_ **optional**
The x of the center of the ellipse.
### y
_Number_ **optional**
The y of the center of the ellipse.
### rx
_Number_ **optional**
The horizontal raidus of the ellipse.
### ry
_Number_ **optional**
The vertical raidus of the ellipse.
## Image
```javascript
group.addShape('image', {
attrs: {
x: 0,
y: 0,
img: 'https://g.alicdn.com/cm-design/arms-trace/1.0.155/styles/armsTrace/images/TAIR.png',
},
// must be assigned in G6 3.3 and later versions. it can be any value you want
name: 'image-shape',
});
```
### x
_Number_ **optional**
The x of the left top of the image.
### y
_Number_ **optional**
The y of the left top of the image.
### width
_Number_ **optional**
The width of the image.
### height
_Number_ **optional**
The height of the image.
### img
_String_ **optional**
The source of the image.G6 supports multiple image formats:
- url
- ImageData
- Image
- canvas
.
## Marker
```javascript
// use the built-in symbol
group.addShape('marker', {
attrs: {
x: 10,
y: 10,
r: 10,
symbol: 'triangle-down',
},
// must be assigned in G6 3.3 and later versions. it can be any value you want
name: 'marker-shape',
});
// custom the symbol with path
group.addShape('marker', {
attrs: {
x: 10,
y: 10,
r: 10,
symbol: function (x, y, r) {
return [['M', x, y], ['L', x + r, y + r], ['L', x + r * 2, y], ['Z']];
},
},
// must be assigned in G6 3.3 and later versions. it can be any value you want
name: 'marker-shape',
});
```
### x
_Number_ **optional**
The x of the center of the marker.
### y
_Number_ **optional**
The y of the center of the marker.
### r
_Number_ **optional**
The radius of the marker.
### symbol
_String | Function_ **optional**
The shape name.There are several built-in shapes: `'circle'`, `'square'`, `'diamond'`, `'triangle'`, `'triangle-down'`, you can use them with the String names. And user could customize a shape as marker.
## Polygon
```javascript
group.addShape('polygon', {
attrs: {
points: [
[30, 30],
[40, 20],
[30, 50],
[60, 100],
],
fill: 'red',
},
// must be assigned in G6 3.3 and later versions. it can be any value you want
name: 'polygon-shape',
});
```
### points
_Array_ **optional**
The coordinates of the points on the polygon.
## Rect
```javascript
group.addShape('rect', {
attrs: {
x: 150,
y: 150,
width: 150,
height: 150,
stroke: 'black',
radius: [2, 4],
},
// must be assigned in G6 3.3 and later versions. it can be any value you want
name: 'rect-shape',
});
```
### x
_Number_ **optional**
The x of left top of the rect.
### y
_Number_ **optional**
The y of left top of the rect.
### width
_Number_ **optional**
The width of the rect.
### height
_Number_ **optional**
The height of the rect.
### radius
_Number | Number[]_ **optional**
The border radius. It can be an integer or an array, representing the border radii of lefttop, righttop, rightbottom, leftbotton respectively.
- `radius = 1` or `radius = [ 1 ]` is equal to `radius = [ 1, 1, 1, 1 ]`
- `radius = [ 1, 2 ]` is equal to `radius = [ 1, 2, 1, 2 ]`
- `radius: [ 1, 2, 3 ]` is equal to `radius: [ 1, 2, 3, 2 ]`
## Path
⚠️Attention: When the edge is too thin to be hitted by mouse, set **lineAppendWidth** to enlarge the hitting area.
```javascript
group.addShape('path', {
attrs: {
startArrow: {
// The custom arrow is a path points at (0, 0), and its tail points to the positive direction of x-axis
path: 'M 0,0 L 20,10 L 20,-10 Z',
// the offset of the arrow, nagtive value means the arrow is moved alone the positive direction of x-axis
// d: -10
},
endArrow: {
// The custom arrow is a path points at (0, 0), and its tail points to the positive direction of x-axis
path: 'M 0,0 L 20,10 L 20,-10 Z',
// the offset of the arrow, nagtive value means the arrow is moved alone the positive direction of x-axis
// d: -10
},
path: [
['M', 100, 100],
['L', 200, 200],
],
stroke: '#000',
lineWidth: 8,
lineAppendWidth: 5,
},
// must be assigned in G6 3.3 and later versions. it can be any value you want
name: 'path-shape',
});
```
### path
_String | Array_ **optional**
The path. Refer to [SVG path](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths).
### startArrow
_Boolean | Object_ **optional**
The arrow on the start of the path. When `startArrow` is `true`, show a default arrow on the start of the path. User can custom an arrow by path.
### endArrow
_Boolean | Object_ **optional**
The arrow on the end of the path. When `startArrow` is `true`, show a default arrow on the end of the path. User can custom an arrow by path.
### lineAppendWidth
_Number_ **optional**
The hitting area of the path. Enlarge the hitting area by enlarging its value.
### lineCap
_String_ **optional** _default:_ `'miter'`
The style of two ends of the path. Options:
- `'bevel'`
- `'round'`
- `'miter'`(default)
### lineJoin
_String_ **optional** _default:_ `'miter'`
The style of the intersection of two path. Options:
- `'bevel'`
- `'round'`
- `'miter'`(default)
### lineWidth
_Number_ **optional**
The line width of the current path.
### miterLimit
_Number_ **optional**
The maximum miter length.
### lineDash
_Number | Number[]_ **optional**
The style of the dash line. It is an array that describes the length of gaps and line segments. If the number of the elements in the array is odd, the elements will be dulplicated. Such as [5, 15, 25] will be regarded as [5, 15, 25, 5, 15, 25].
## Text
```javascript
group.addShape('text', {
attrs: {
text: 'test text',
fill: 'red',
fontWeight: 400,
shadowOffsetX: 10,
shadowOffsetY: 10,
shadowColor: 'blue',
shadowBlur: 10,
},
// must be assigned in G6 3.3 and later versions. it can be any value you want
name: 'text-shape',
});
```
### textAlign
_String_ **optional**
The align way of the text. Options: `'center'` / `'end'` / `'left'` / `'right'` / `'start'`. `'start'` by default.
### textBaseline
_String_ **optional**
The base line of the text. Options:
`'top'` / `'middle'` / `'bottom'` / `'alphabetic'` / `'hanging'`. `'bottom'` by default.
### fontStyle
_String_ **optional**
The font style of the text. The corresponding property in CSS is `font-style`.
### fontVariant
_String_ **optional**
The font variant of the text. The corresponding property in CSS is `font-variant`.
### fontWeight
_Number_ **optional**
The font weight of the text. The corresponding property in CSS is `font-weight`.
### fontSize
_Number_ **optional**
The font size of the text. The corresponding property in CSS is `font-size`.
### fontFamily
_String_ **optional**
The font family of the text. The corresponding property in CSS is `font-family`.
### lineHeight
_Number_ **optional**
Line height of the text. The corresponding property in CSS is `line-height`.
## DOM (svg)
> This shape is available only when the `renderer` is assgined to `'svg'` for graph instance.
⚠️ Attention:
```javascript
group.addShape('dom', {
attrs: {
width: cfg.size[0],
height: cfg.size[1],
// DOM's html
html: `
`,
},
// must be assigned in G6 3.3 and later versions. it can be any value you want
name: 'dom-shape',
draggable: true,
});
```
- Only support native HTML DOM, but not react or other components;
- If you custom a Node type or an Edge type with dom shape, please use the original DOM events instead of events of G6.
### html
_String_ **optional**
The HTML value for DOM shape.