diff --git a/docs/data/charts/heat-map/BasicHeatmap.js b/docs/data/charts/heat-map/BasicHeatmap.js
new file mode 100644
index 0000000000000..2eccd7516a3ae
--- /dev/null
+++ b/docs/data/charts/heat-map/BasicHeatmap.js
@@ -0,0 +1,72 @@
+import * as React from 'react';
+import '@mui/x-charts-pro/typeOverloads';
+import { ChartsAxis } from '@mui/x-charts/ChartsAxis';
+import { HeatmapContainer, HeatmapPlot } from '@mui/x-charts-pro/Heatmap';
+
+export default function BasicHeatmap() {
+ return (
+
+
+
+
+ );
+}
diff --git a/docs/data/charts/heat-map/BasicHeatmap.tsx b/docs/data/charts/heat-map/BasicHeatmap.tsx
new file mode 100644
index 0000000000000..867f16ae9392f
--- /dev/null
+++ b/docs/data/charts/heat-map/BasicHeatmap.tsx
@@ -0,0 +1,78 @@
+import * as React from 'react';
+import '@mui/x-charts-pro/typeOverloads';
+import { ChartsAxis } from '@mui/x-charts/ChartsAxis';
+import { ChartsTooltip } from '@mui/x-charts/ChartsTooltip';
+import { HeatmapContainer, HeatmapPlot } from '@mui/x-charts-pro/Heatmap';
+
+export default function BasicHeatmap() {
+ return (
+
+
+
+
+
+ );
+}
diff --git a/docs/data/charts/heat-map/heat-map.md b/docs/data/charts/heat-map/heat-map.md
index 6d6413b064b8e..d81cc95e4ad4a 100644
--- a/docs/data/charts/heat-map/heat-map.md
+++ b/docs/data/charts/heat-map/heat-map.md
@@ -13,3 +13,5 @@ The Heatmap Chart component isn't available yet, but you can upvote [**this GitH
Don't hesitate to leave a comment there to influence what gets built.
Especially if you already have a use case for this component, or if you're facing a pain point with your current solution.
:::
+
+{{"demo": "BasicHeatmap.js"}}
diff --git a/packages/x-charts-pro/src/Heatmap/HeatmapContainer.tsx b/packages/x-charts-pro/src/Heatmap/HeatmapContainer.tsx
index 7d687d488499e..820b547239b4a 100644
--- a/packages/x-charts-pro/src/Heatmap/HeatmapContainer.tsx
+++ b/packages/x-charts-pro/src/Heatmap/HeatmapContainer.tsx
@@ -18,7 +18,7 @@ import {
ZAxisContextProvider,
} from '@mui/x-charts/internals';
import { AllSeriesType } from '@mui/x-charts/models';
-import { ZAxisContextProviderProps } from 'packages/x-charts/build';
+import { ZAxisContextProviderProps } from '@mui/x-charts/context';
export type HeatmapContainerProps = Omit<
ChartsSurfaceProps &
@@ -49,9 +49,14 @@ const yExtremumGetters = {
const formatSeries: SeriesFormatterType<'heatmap'> = (series: AllSeriesType[]) => {
// Group series by type
const seriesGroups: { heatmap?: FormatterParams<'heatmap'> } = {};
+
series.forEach((seriesData, seriesIndex: number) => {
const { id = `auto-generated-id-${seriesIndex}`, type } = seriesData;
+ if (type !== 'heatmap') {
+ throw new Error('Heatmap does nto suport other series type that "heatmap"');
+ }
+
if (seriesGroups[type] === undefined) {
seriesGroups[type] = { series: {}, seriesOrder: [] };
}
diff --git a/packages/x-charts-pro/src/Heatmap/HeatmapPlot.tsx b/packages/x-charts-pro/src/Heatmap/HeatmapPlot.tsx
index f2e49f2e554d9..a0357869d1cc2 100644
--- a/packages/x-charts-pro/src/Heatmap/HeatmapPlot.tsx
+++ b/packages/x-charts-pro/src/Heatmap/HeatmapPlot.tsx
@@ -27,7 +27,7 @@ export function HeatmapPlot() {
height={yScale.bandwidth()}
x={xScale(xDomain[xIndex])}
y={yScale(yDomain[yIndex])}
- fill={colorScale(value)}
+ fill={colorScale(value) ?? undefined}
/>
);
})}
diff --git a/packages/x-charts/src/ChartsTooltip/ChartsAxisTooltipContent.tsx b/packages/x-charts/src/ChartsTooltip/ChartsAxisTooltipContent.tsx
index c65b9e1e17866..8f4ca252a020c 100644
--- a/packages/x-charts/src/ChartsTooltip/ChartsAxisTooltipContent.tsx
+++ b/packages/x-charts/src/ChartsTooltip/ChartsAxisTooltipContent.tsx
@@ -78,12 +78,12 @@ function ChartsAxisTooltipContent(props: {
let getColor: (index: number) => string;
switch (seriesToAdd.type) {
- case 'scatter':
+ case 'line':
+ case 'bar':
getColor = colorGetter(
seriesToAdd,
xAxis[seriesToAdd.xAxisKey ?? xAxisIds[0]],
yAxis[seriesToAdd.yAxisKey ?? yAxisIds[0]],
- zAxis[seriesToAdd.zAxisKey ?? zAxisIds[0]],
);
break;
default:
@@ -91,6 +91,7 @@ function ChartsAxisTooltipContent(props: {
seriesToAdd,
xAxis[seriesToAdd.xAxisKey ?? xAxisIds[0]],
yAxis[seriesToAdd.yAxisKey ?? yAxisIds[0]],
+ zAxis[seriesToAdd.zAxisKey ?? zAxisIds[0]],
);
break;
}
diff --git a/packages/x-charts/src/ChartsTooltip/ChartsItemTooltipContent.tsx b/packages/x-charts/src/ChartsTooltip/ChartsItemTooltipContent.tsx
index 2f7183a6fd938..7e9d32f9e742a 100644
--- a/packages/x-charts/src/ChartsTooltip/ChartsItemTooltipContent.tsx
+++ b/packages/x-charts/src/ChartsTooltip/ChartsItemTooltipContent.tsx
@@ -53,17 +53,18 @@ function ChartsItemTooltipContent(props: {
const defaultYAxisId = yAxisIds[0];
const defaultZAxisId = zAxisIds[0];
+
let getColor: (index: number) => string;
switch (series.type) {
case 'pie':
getColor = colorGetter(series);
break;
- case 'scatter':
+ case 'line':
+ case 'bar':
getColor = colorGetter(
series,
xAxis[series.xAxisKey ?? defaultXAxisId],
yAxis[series.yAxisKey ?? defaultYAxisId],
- zAxis[series.zAxisKey ?? defaultZAxisId],
);
break;
default:
@@ -71,6 +72,7 @@ function ChartsItemTooltipContent(props: {
series,
xAxis[series.xAxisKey ?? defaultXAxisId],
yAxis[series.yAxisKey ?? defaultYAxisId],
+ zAxis[series.zAxisKey ?? defaultZAxisId],
);
break;
}
diff --git a/packages/x-charts/src/ChartsTooltip/DefaultChartsItemTooltipContent.tsx b/packages/x-charts/src/ChartsTooltip/DefaultChartsItemTooltipContent.tsx
index 72bba158688b4..29fb6f74338b1 100644
--- a/packages/x-charts/src/ChartsTooltip/DefaultChartsItemTooltipContent.tsx
+++ b/packages/x-charts/src/ChartsTooltip/DefaultChartsItemTooltipContent.tsx
@@ -28,7 +28,7 @@ function DefaultChartsItemTooltipContent string;
+export type ColorGetterType = (
+ series: DefaultizedSeriesType,
+ xAxis?: AxisDefaultized,
+ yAxis?: AxisDefaultized,
+ zAxis?: ZAxisDefaultized,
+) => string;
+
+function getColor(series: DefaultizedSeriesType<'pie'>): (dataIndex: number) => string;
function getColor(
- series: DefaultizedBarSeriesType | DefaultizedLineSeriesType,
+ series: DefaultizedSeriesType<'line' | 'bar'>,
xAxis: AxisDefaultized,
yAxis: AxisDefaultized,
): (dataIndex: number) => string;
function getColor(
- series: DefaultizedScatterSeriesType,
+ series: DefaultizedSeriesType<'scatter'>,
xAxis: AxisDefaultized,
yAxis: AxisDefaultized,
zAxis?: ZAxisDefaultized,
): (dataIndex: number) => string;
function getColor(
- series:
- | DefaultizedBarSeriesType
- | DefaultizedLineSeriesType
- | DefaultizedScatterSeriesType
- | DefaultizedPieSeriesType,
+ series: DefaultizedSeriesType,
xAxis?: AxisDefaultized,
yAxis?: AxisDefaultized,
zAxis?: ZAxisDefaultized,
@@ -50,6 +48,20 @@ function getColor(
return getPieColor(series);
}
+ if (series.type === 'heatmap') {
+ const colorScale = zAxis?.colorScale;
+
+ if (colorScale) {
+ return (dataIndex: number) => {
+ const value = series.data[dataIndex][2];
+ if (value !== undefined) {
+ return colorScale(value) ?? '';
+ }
+ return '';
+ };
+ }
+ }
+
throw Error(
`MUI X Charts: getColor called with unexpected arguments for series with id "${series.id}"`,
);