logo

G2

  • Docs
  • Chart Introduction
  • API
  • Examples
  • Theme
  • Ecosystem
  • Productsantv logo arrow
  • 5.3.3
  • 📈 Chart Introduction
  • Mosaic Plot
  • Bar Chart
  • Bubble Chart
  • Color Map
  • Histogram Chart
  • Radial Bar Chart
  • Stacked Bar Chart
  • Area Chart
  • Box Plot
  • Bubble Map
  • Radar Chart
  • Bi-directional Bar Chart
  • Multi-set Bar Chart
  • Donut Chart
  • Heatmap
  • Choropleth Map
  • Funnel Chart
  • K-Chart
  • Gauge Chart
  • Contour Line Chart
  • Bullet Chart
  • Sankey Diagram
  • Chord Diagram

Mosaic Plot

Previous
📈 Chart Introduction
Next
Bar Chart

Resources

Ant Design
Galacea Effects
Umi-React Application Framework
Dumi-Component doc generator
ahooks-React Hooks Library

Community

Ant Financial Experience Tech
seeconfSEE Conf-Experience Tech Conference

Help

GitHub
StackOverflow

more productsMore Productions

Ant DesignAnt Design-Enterprise UI design language
yuqueYuque-Knowledge creation and Sharing tool
EggEgg-Enterprise-class Node development framework
kitchenKitchen-Sketch Tool set
GalaceanGalacean-互动图形解决方案
xtechLiven Experience technology
© Copyright 2025 Ant Group Co., Ltd..备案号:京ICP备15032932号-38

Loading...

mosaic

Introduction to Mosaic Plots

A mosaic plot (also known as a Marimekko Chart) is a chart used to display relationships between categorical data. It represents data proportions and classifications through the area and color of rectangles.

Mosaic plots are divided into two types: uniform and non-uniform. Uniform mosaic plots are more common in daily life, such as subway fare charts, while non-uniform mosaic plots are more frequently used in statistical fields.

Other Names: Mosaic Plot, Marimekko Chart

Components of a Mosaic Plot

Non-uniform Axis Mosaic Plot

mosaic-uneven
Chart TypeNon-uniform Axis Mosaic Plot
Suitable DataMulti-dimensional categorical data
FunctionalityDisplay distribution of multi-dimensional categorical data
Data MappingCategorical data fields map to non-uniform coordinate axes
Area and color represent data proportions and classifications
Data Size LimitMore effective with higher dimensional data

Uniform Axis Mosaic Plot

mosaic-even
Chart TypeUniform Axis Mosaic Plot
Suitable DataTwo-dimensional categorical data
FunctionalityDisplay distribution of two-dimensional categorical data
Data MappingCategorical data fields map to uniform coordinate axes
Color represents data classifications
Data Size LimitMore effective with lower dimensional data

Use Cases of Mosaic Plots

Suitable Use Cases

Example 1: Suitable for multi-dimensional categorical data analysis

Non-uniform Mosaic Plot

Example 2: Suitable for two-dimensional categorical data analysis

const chart = new G2.Chart({
container: 'container',
autoFit: true,
height: 400,
});
chart.options({
type: 'cell',
data: [
{ product: 'Phone', region: 'North', sales: 120, category: 'Premium' },
{ product: 'Phone', region: 'East', sales: 180, category: 'Premium' },
{ product: 'Phone', region: 'South', sales: 150, category: 'Premium' },
{ product: 'Computer', region: 'North', sales: 80, category: 'Mid-range' },
{ product: 'Computer', region: 'East', sales: 110, category: 'Mid-range' },
{ product: 'Computer', region: 'South', sales: 95, category: 'Mid-range' },
{ product: 'Tablet', region: 'North', sales: 60, category: 'Mid-range' },
{ product: 'Tablet', region: 'East', sales: 85, category: 'Mid-range' },
{ product: 'Tablet', region: 'South', sales: 70, category: 'Budget' },
{ product: 'Headphone', region: 'North', sales: 40, category: 'Budget' },
{ product: 'Headphone', region: 'East', sales: 55, category: 'Budget' },
{ product: 'Headphone', region: 'South', sales: 45, category: 'Budget' },
],
encode: {
x: 'product',
y: 'region',
color: 'category',
size: 'sales',
},
scale: {
color: {
palette: 'category10',
type: 'ordinal',
},
size: {
type: 'linear',
range: [0.3, 1],
},
},
style: {
stroke: '#fff',
strokeWidth: 2,
inset: 2,
},
legend: {
color: {
title: 'Product Category',
position: 'top',
},
size: {
title: 'Sales Volume',
position: 'right',
},
},
axis: {
x: {
title: 'Product Type',
labelAutoRotate: false,
},
y: {
title: 'Sales Region',
},
},
tooltip: {
title: (d) => `${d.product} - ${d.region}`,
items: [
{ field: 'sales', name: 'Sales', valueFormatter: (v) => `${v}K` },
{ field: 'category', name: 'Category' },
],
},
});
chart.render();

Example 3: Market Segmentation Analysis (Non-uniform Mosaic Plot)

This example demonstrates how to use a non-uniform mosaic plot to display the distribution of different market segments, where the width of each rectangle represents market size, and the height represents the proportion of each market segment.

import { Chart } from '@antv/g2';
const chart = new Chart({
container: 'container',
width: 900,
height: 800,
paddingLeft: 0,
paddingRight: 0,
});
chart.options({
type: 'interval',
data: {
type: 'fetch',
value:
'https://gw.alipayobjects.com/os/bmw-prod/3041da62-1bf4-4849-aac3-01a387544bf4.csv',
},
transform: [
{ type: 'flexX', reducer: 'sum' }, // Flexible X-axis width
{ type: 'stackY' }, // Y-axis stacking
{ type: 'normalizeY' } // Y-axis normalization
],
encode: {
x: 'market',
y: 'value',
color: 'segment'
},
axis: {
y: false
},
scale: {
x: { paddingOuter: 0, paddingInner: 0.01 }
},
tooltip: 'value',
label: [
{
text: 'segment',
x: 5,
y: 5,
textAlign: 'start',
textBaseline: 'top',
fontSize: 10,
fill: '#fff',
},
{
text: 'value',
x: 5,
y: 5,
textAlign: 'start',
dy: 15,
fontSize: 10,
fill: '#fff',
}
]
});
chart.render();

Example 4: Movie Rating Distribution Analysis (Density Mosaic Plot)

This example demonstrates how to use a density mosaic plot to analyze the relationship between IMDB and Rotten Tomatoes ratings, where the color intensity represents the number of movies.

import { Chart } from '@antv/g2';
const chart = new Chart({
container: 'container',
autoFit: true,
});
chart.options({
type: 'rect',
data: {
type: 'fetch',
value: 'https://assets.antv.antgroup.com/g2/movies.json',
},
encode: {
x: 'IMDB Rating',
y: 'Rotten Tomatoes Rating'
},
transform: [{ type: 'bin', color: 'count', thresholdsX: 30, thresholdsY: 20 }],
scale: {
color: { palette: 'ylGnBu' }
},
tooltip: {
title: { channel: 'color' },
items: [
(d, i, data, column) => ({
name: 'IMDB Rating',
value: `${column.x.value[i]}, ${column.x1.value[i]}`,
}),
(d, i, data, column) => ({
name: 'Rotten Tomatoes Rating',
value: `${column.y.value[i]}, ${column.y1.value[i]}`,
}),
],
render: () => '1',
}
});
chart.render();

Example 5: Athletes' Physiological Data Analysis (Grouped Density Mosaic Plot)

This example shows how to use a mosaic plot to display the height and weight distribution of athletes grouped by gender, with opacity representing data point density.

import { Chart } from '@antv/g2';
const chart = new Chart({
container: 'container',
autoFit: true,
});
chart.options({
type: 'rect',
data: {
type: 'fetch',
value: 'https://assets.antv.antgroup.com/g2/athletes.json',
},
encode: {
x: 'weight',
y: 'height',
color: 'sex'
},
transform: [{ type: 'bin', opacity: 'count' }],
legend: {
opacity: false
},
style: {
inset: 0.5
},
tooltip: {
title: { channel: 'opacity' },
items: [
(d, i, data, column) => ({
name: 'Weight',
value: `${column.x.value[i]}, ${column.x1.value[i]}`,
}),
(d, i, data, column) => ({
name: 'Height',
value: `${column.y.value[i]}, ${column.y1.value[i]}`,
}),
],
}
});
chart.render();

Unsuitable Use Cases

Mosaic plots are not suitable for:

  • Displaying continuous numerical data trends
  • Showing precise numerical comparisons
  • Analyzing time series data
  • Displaying data with too many categories (which can make the chart cluttered and hard to read)

Comparing Mosaic Plots to Other Charts

Mosaic Plots and Heatmaps

  • From graphical properties perspective:
    • Heatmaps represent the third dimension with linear color changes
    • Mosaic plots represent the third dimension with categorical colors
    • Standard heatmaps use smoothing algorithms with no clear boundaries
    • Mosaic plots have clear boundaries
  • From data perspective:
    • Uniform mosaic plots and heatmaps have very similar meanings for continuous data
  • From analytical needs perspective:
    • Heatmaps focus on distribution and can predict data in unknown areas
    • Mosaic plots have clearer boundaries and focus more on comparison

Mosaic Plots and Treemaps

  • Mosaic plots are better for showing relationships between multiple categorical variables
  • Treemaps are more suitable for displaying hierarchical data structures
  • Mosaic plots use position and area to encode data
  • Treemaps primarily use area and nesting to represent hierarchical relationships

Similar Charts

Categories

Heatmap
Heatmap
Distribution
Comparison
Comparison
Proportion