diff --git a/superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Pie/Pie.stories.tsx b/superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Pie/Pie.stories.tsx
index 73b25a2f7cf42..228d5792175aa 100644
--- a/superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Pie/Pie.stories.tsx
+++ b/superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Pie/Pie.stories.tsx
@@ -23,7 +23,7 @@ import {
EchartsPieChartPlugin,
PieTransformProps,
} from '@superset-ui/plugin-chart-echarts';
-import { weekday, population } from './data';
+import { weekday, population, sales } from './data';
import { withResizableChartDemo } from '../../../../shared/components/ResizableChartDemo';
new EchartsPieChartPlugin().configure({ key: 'echarts-pie' }).register();
@@ -193,3 +193,91 @@ PopulationPie.argTypes = {
},
},
};
+
+export const SalesPie = (
+ {
+ donut,
+ innerRadius,
+ outerRadius,
+ labelsOutside,
+ labelLine,
+ showLabels,
+ showLegend,
+ labelType,
+ roseType,
+ }: {
+ donut: boolean;
+ innerRadius: number;
+ outerRadius: number;
+ labelsOutside: boolean;
+ labelLine: boolean;
+ showLabels: boolean;
+ showLegend: boolean;
+ labelType: string;
+ roseType: string;
+ },
+ { width, height }: { width: number; height: number },
+) => (
+
+);
+
+SalesPie.args = {
+ roseType: 'area',
+ donut: false,
+ innerRadius: 30,
+ outerRadius: 70,
+ labelsOutside: false,
+ labelLine: true,
+ showLabels: true,
+ showLegend: false,
+ labelType: 'key',
+};
+
+SalesPie.argTypes = {
+ roseType: {
+ control: {
+ type: 'select',
+ options: ['area', 'radius'],
+ },
+ },
+ donut: { control: 'boolean' },
+ innerRadius: { control: 'number' },
+ outerRadius: { control: 'number' },
+ labelsOutside: { control: 'boolean' },
+ labelLine: { control: 'boolean' },
+ showLabels: { control: 'boolean' },
+ showLegend: { control: 'boolean' },
+ labelType: {
+ control: {
+ type: 'select',
+ options: [
+ 'key',
+ 'value',
+ 'percent',
+ 'key_value',
+ 'key_percent',
+ 'key_value_percent',
+ ],
+ },
+ },
+};
diff --git a/superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Pie/data.ts b/superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Pie/data.ts
index 8959a1fc6c552..33fdb2c6b8d8f 100644
--- a/superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Pie/data.ts
+++ b/superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Pie/data.ts
@@ -240,3 +240,14 @@ export const population = [
{ Country: 'Sint Maarten (Dutch part)', Population: 597781 },
{ Country: 'Tuvalu', Population: 466709 },
];
+
+export const sales = [
+ { Product: 'Laptop', 'SUM(AMOUNT)': 30 },
+ { Product: 'Workstation', 'SUM(AMOUNT)': 28 },
+ { Product: 'Phone', 'SUM(AMOUNT)': 26 },
+ { Product: 'Tablet', 'SUM(AMOUNT)': 24 },
+ { Product: 'PDA', 'SUM(AMOUNT)': 22 },
+ { Product: 'Ink Pad', 'SUM(AMOUNT)': 20 },
+ { Product: 'Accessories', 'SUM(AMOUNT)': 18 },
+ { Product: 'Pad', 'SUM(AMOUNT)': 16 },
+];
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/Pie/controlPanel.tsx b/superset-frontend/plugins/plugin-chart-echarts/src/Pie/controlPanel.tsx
index 1afc64924bb3d..b197c9743bfe8 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/Pie/controlPanel.tsx
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/Pie/controlPanel.tsx
@@ -40,6 +40,7 @@ const {
outerRadius,
numberFormat,
showLabels,
+ roseType,
} = DEFAULT_FORM_DATA;
const config: ControlPanelConfig = {
@@ -87,6 +88,23 @@ const config: ControlPanelConfig = {
},
},
],
+ [
+ {
+ name: 'roseType',
+ config: {
+ type: 'SelectControl',
+ label: t('Rose Type'),
+ default: roseType,
+ renderTrigger: true,
+ choices: [
+ ['area', t('Area')],
+ ['radius', t('Radius')],
+ [null, t('None')],
+ ],
+ description: t('Whether to show as Nightingale chart.'),
+ },
+ },
+ ],
...legendSection,
// eslint-disable-next-line react/jsx-key
[{t('Labels')}],
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/Pie/images/Pie3.jpg b/superset-frontend/plugins/plugin-chart-echarts/src/Pie/images/Pie3.jpg
index 45299bab7c52c..5ad62baa6917f 100644
Binary files a/superset-frontend/plugins/plugin-chart-echarts/src/Pie/images/Pie3.jpg and b/superset-frontend/plugins/plugin-chart-echarts/src/Pie/images/Pie3.jpg differ
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/Pie/images/Pie4.jpg b/superset-frontend/plugins/plugin-chart-echarts/src/Pie/images/Pie4.jpg
index 165c5726d36c3..072a1265f2502 100644
Binary files a/superset-frontend/plugins/plugin-chart-echarts/src/Pie/images/Pie4.jpg and b/superset-frontend/plugins/plugin-chart-echarts/src/Pie/images/Pie4.jpg differ
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/Pie/index.ts b/superset-frontend/plugins/plugin-chart-echarts/src/Pie/index.ts
index eecf8d2ddb98e..f7921e03081b6 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/Pie/index.ts
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/Pie/index.ts
@@ -74,6 +74,7 @@ export default class EchartsPieChartPlugin extends EchartsChartPlugin<
t('Popular'),
t('Proportional'),
t('ECharts'),
+ t('Nightingale'),
],
thumbnail,
},
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/Pie/transformProps.ts b/superset-frontend/plugins/plugin-chart-echarts/src/Pie/transformProps.ts
index 82986ffcb6367..d6400d4022f5c 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/Pie/transformProps.ts
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/Pie/transformProps.ts
@@ -156,6 +156,7 @@ export default function transformProps(
showLabelsThreshold,
sliceId,
showTotal,
+ roseType,
}: EchartsPieFormData = {
...DEFAULT_LEGEND_FORM_DATA,
...DEFAULT_PIE_FORM_DATA,
@@ -283,6 +284,7 @@ export default function transformProps(
type: 'pie',
...chartPadding,
animation: false,
+ roseType: roseType || undefined,
radius: [`${donut ? innerRadius : 0}%`, `${outerRadius}%`],
center: ['50%', '50%'],
avoidLabelOverlap: true,
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/Pie/types.ts b/superset-frontend/plugins/plugin-chart-echarts/src/Pie/types.ts
index 631c1c7de3568..c72da1feed07f 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/Pie/types.ts
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/Pie/types.ts
@@ -45,6 +45,7 @@ export type EchartsPieFormData = QueryFormData &
numberFormat: string;
dateFormat: string;
showLabelsThreshold: number;
+ roseType: 'radius' | 'area' | null;
};
export enum EchartsPieLabelType {
@@ -78,6 +79,7 @@ export const DEFAULT_FORM_DATA: EchartsPieFormData = {
labelsOutside: true,
showLabelsThreshold: 5,
dateFormat: 'smart_date',
+ roseType: null,
};
export type PieChartTransformedProps =