After my last blog, creating Hexagon Radar Charts, the next logical question is how do I do this for other polygons? With that being said Ill go ahead and leave this blog pretty short with the story, but provide you with calculations needed to create radar charts for a variety of different shapes.

In this post, we’ll take the core principles of data densification and map layers to the next level. I’ll walk you through the fundamental logic required to build a versatile template library for custom polygon charts, from pentagons to dodecagons. The key to this flexibility lies in a powerful, parameterized calculation that gives you full control over the chart’s design.
By the end, you’ll have everything you need to create your own radar charts, ready for any dataset and any number of metrics. I’ll provide a high-level overview and the complete calculations you can use as a template, leaving the full step-by-step tutorial for you to explore in the downloadable workbook.
Key Calculations
The true power of this technique lies in a single, elegant calculation. The magic happens by leveraging a densified dataset (like back at previous blog for how to do this) and Tableau’s MAKEPOINT() function. This function allows you to plot a point on a map layer using a specific latitude and longitude. By creatively using trigonometry, we can turn a metric’s value and a defined angle into a coordinate, plotting each metric as a point on our radial chart.
For our base polygons, this calculation follows a simple, repeatable pattern. For each metric, we set an angle and a radius (normalized value=[N-Value]), using a parameterized [Degrees] value to control the spacing between each point.
First thing we need to do is set up the two main parameters:


These parameters allow us to set the number of sides for the customizable polygon and the starting degree will orientate the polygon. The default is at 90 degrees to have the first triangle come vertically down.
For our base template, we will use a dodecagon (a 12-sided polygon) as it offers the most flexibility. Readers can simply delete rows from this template to create smaller polygon shapes. I will also give the logic the customizable one too.
// 12 Side Polygon | Map Points
IF [Path] = 1 THEN
CASE [Metric]
WHEN 'M1' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]))*[N-Value], COS(RADIANS([Starting Degree]))*[N-Value])
WHEN 'M2' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-(360/12)))*[N-Value], COS(RADIANS([Starting Degree]-(360/12)))*[N-Value])
WHEN 'M3' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-2*(360/12)))*[N-Value], COS(RADIANS([Starting Degree]-2*(360/12)))*[N-Value])
WHEN 'M4' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-3*(360/12)))*[N-Value], COS(RADIANS([Starting Degree]-3*(360/12)))*[N-Value])
WHEN 'M5' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-4*(360/12)))*[N-Value], COS(RADIANS([Starting Degree]-4*(360/12)))*[N-Value])
WHEN 'M6' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-5*(360/12)))*[N-Value], COS(RADIANS([Starting Degree]-5*(360/12)))*[N-Value])
WHEN 'M7' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-6*(360/12)))*[N-Value], COS(RADIANS([Starting Degree]-6*(360/12)))*[N-Value])
WHEN 'M8' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-7*(360/12)))*[N-Value], COS(RADIANS([Starting Degree]-7*(360/12)))*[N-Value])
WHEN 'M9' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-8*(360/12)))*[N-Value], COS(RADIANS([Starting Degree]-8*(360/12)))*[N-Value])
WHEN 'M10' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-9*(360/12)))*[N-Value], COS(RADIANS([Starting Degree]-9*(360/12)))*[N-Value])
WHEN 'M11' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-10*(360/12)))*[N-Value], COS(RADIANS([Starting Degree]-10*(360/12)))*[N-Value])
WHEN 'M12' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-11*(360/12)))*[N-Value], COS(RADIANS([Starting Degree]-11*(360/12)))*[N-Value])
END
ELSEIF [Path] = 2 THEN
CASE [Metric]
WHEN 'M1' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-(360/12)))*[N-Value], COS(RADIANS([Starting Degree]-(360/12)))*[N-Value])
WHEN 'M2' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-2*(360/12)))*[N-Value], COS(RADIANS([Starting Degree]-2*(360/12)))*[N-Value])
WHEN 'M3' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-3*(360/12)))*[N-Value], COS(RADIANS([Starting Degree]-3*(360/12)))*[N-Value])
WHEN 'M4' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-4*(360/12)))*[N-Value], COS(RADIANS([Starting Degree]-4*(360/12)))*[N-Value])
WHEN 'M5' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-5*(360/12)))*[N-Value], COS(RADIANS([Starting Degree]-5*(360/12)))*[N-Value])
WHEN 'M6' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-6*(360/12)))*[N-Value], COS(RADIANS([Starting Degree]-6*(360/12)))*[N-Value])
WHEN 'M7' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-7*(360/12)))*[N-Value], COS(RADIANS([Starting Degree]-7*(360/12)))*[N-Value])
WHEN 'M8' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-8*(360/12)))*[N-Value], COS(RADIANS([Starting Degree]-8*(360/12)))*[N-Value])
WHEN 'M9' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-9*(360/12)))*[N-Value], COS(RADIANS([Starting Degree]-9*(360/12)))*[N-Value])
WHEN 'M10' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-10*(360/12)))*[N-Value], COS(RADIANS([Starting Degree]-10*(360/12)))*[N-Value])
WHEN 'M11' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-11*(360/12)))*[N-Value], COS(RADIANS([Starting Degree]-11*(360/12)))*[N-Value])
WHEN 'M12' THEN MAKEPOINT(SIN(RADIANS([Starting Degree]))*[N-Value], COS(RADIANS([Starting Degree]))*[N-Value])
END
ELSE MAKEPOINT(0,0)
END
Here is the core logic, which is also designed to be easily customized with parameters:
//Degrees
360/[Number of Sides]
// N Side Polygon | Map Points
IF [Path] = 1 THEN
CASE [Metric]
WHEN 'M1' THEN IF 1 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]))*[N-Value], COS(RADIANS([Starting Degree]))*[N-Value]) ELSE MAKEPOINT(0,0) END
WHEN 'M2' THEN IF 2 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-[Degrees]))*[N-Value], COS(RADIANS([Starting Degree]-[Degrees]))*[N-Value]) ELSE MAKEPOINT(0,0) END
WHEN 'M3' THEN IF 3 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-2*[Degrees]))*[N-Value], COS(RADIANS([Starting Degree]-2*[Degrees]))*[N-Value]) ELSE MAKEPOINT(0,0) END
WHEN 'M4' THEN IF 4 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-3*[Degrees]))*[N-Value], COS(RADIANS([Starting Degree]-3*[Degrees]))*[N-Value]) ELSE MAKEPOINT(0,0) END
WHEN 'M5' THEN IF 5 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-4*[Degrees]))*[N-Value], COS(RADIANS([Starting Degree]-4*[Degrees]))*[N-Value]) ELSE MAKEPOINT(0,0) END
WHEN 'M6' THEN IF 6 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-5*[Degrees]))*[N-Value], COS(RADIANS([Starting Degree]-5*[Degrees]))*[N-Value]) ELSE MAKEPOINT(0,0) END
WHEN 'M7' THEN IF 7 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-6*[Degrees]))*[N-Value], COS(RADIANS([Starting Degree]-6*[Degrees]))*[N-Value]) ELSE MAKEPOINT(0,0) END
WHEN 'M8' THEN IF 8 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-7*[Degrees]))*[N-Value], COS(RADIANS([Starting Degree]-7*[Degrees]))*[N-Value]) ELSE MAKEPOINT(0,0) END
WHEN 'M9' THEN IF 9 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-8*[Degrees]))*[N-Value], COS(RADIANS([Starting Degree]-8*[Degrees]))*[N-Value]) ELSE MAKEPOINT(0,0) END
WHEN 'M10' THEN IF 10 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-9*[Degrees]))*[N-Value], COS(RADIANS([Starting Degree]-9*[Degrees]))*[N-Value]) ELSE MAKEPOINT(0,0) END
WHEN 'M11' THEN IF 11 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-10*[Degrees]))*[N-Value], COS(RADIANS([Starting Degree]-10*[Degrees]))*[N-Value]) ELSE MAKEPOINT(0,0) END
WHEN 'M12' THEN IF 12 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-11*[Degrees]))*[N-Value], COS(RADIANS([Starting Degree]-11*[Degrees]))*[N-Value]) ELSE MAKEPOINT(0,0) END
END
ELSEIF [Path] = 2 THEN
CASE [Metric]
WHEN 'M1' THEN IF 1 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-[Degrees]))*[N-Value], COS(RADIANS([Starting Degree]-[Degrees]))*[N-Value]) ELSE MAKEPOINT(0,0) END
WHEN 'M2' THEN IF 2 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-2*[Degrees]))*[N-Value], COS(RADIANS([Starting Degree]-2*[Degrees]))*[N-Value]) ELSE MAKEPOINT(0,0) END
WHEN 'M3' THEN IF 3 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-3*[Degrees]))*[N-Value], COS(RADIANS([Starting Degree]-3*[Degrees]))*[N-Value]) ELSE MAKEPOINT(0,0) END
WHEN 'M4' THEN IF 4 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-4*[Degrees]))*[N-Value], COS(RADIANS([Starting Degree]-4*[Degrees]))*[N-Value]) ELSE MAKEPOINT(0,0) END
WHEN 'M5' THEN IF 5 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-5*[Degrees]))*[N-Value], COS(RADIANS([Starting Degree]-5*[Degrees]))*[N-Value]) ELSE MAKEPOINT(0,0) END
WHEN 'M6' THEN IF 6 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-6*[Degrees]))*[N-Value], COS(RADIANS([Starting Degree]-6*[Degrees]))*[N-Value]) ELSE MAKEPOINT(0,0) END
WHEN 'M7' THEN IF 7 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-7*[Degrees]))*[N-Value], COS(RADIANS([Starting Degree]-7*[Degrees]))*[N-Value]) ELSE MAKEPOINT(0,0) END
WHEN 'M8' THEN IF 8 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-8*[Degrees]))*[N-Value], COS(RADIANS([Starting Degree]-8*[Degrees]))*[N-Value]) ELSE MAKEPOINT(0,0) END
WHEN 'M9' THEN IF 9 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-9*[Degrees]))*[N-Value], COS(RADIANS([Starting Degree]-9*[Degrees]))*[N-Value]) ELSE MAKEPOINT(0,0) END
WHEN 'M10' THEN IF 10 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-10*[Degrees]))*[N-Value], COS(RADIANS([Starting Degree]-10*[Degrees]))*[N-Value]) ELSE MAKEPOINT(0,0) END
WHEN 'M11' THEN IF 11 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]-11*[Degrees]))*[N-Value], COS(RADIANS([Starting Degree]-11*[Degrees]))*[N-Value]) ELSE MAKEPOINT(0,0) END
WHEN 'M12' THEN IF 12 <= [Number of Sides] THEN MAKEPOINT(SIN(RADIANS([Starting Degree]))*[N-Value], COS(RADIANS([Starting Degree]))*[N-Value]) ELSE MAKEPOINT(0,0) END
END
ELSE MAKEPOINT(0,0)
END
A Deeper Look: Layers, Colors, and Labels
With the main calculations above as our foundation, let’s explore how these simple templates can be transformed into powerful analytical tools. By adding layers, customizing colors, and incorporating labels, we can create visualizations that go beyond basic shapes to tell a rich, data-driven story. Below, you’ll find some of my favorite charts from the dashboard, each one demonstrating a different aspect of this visual customization.

The heptagon radar chart uses a custom base layer created similar to the polygon triangles. This makes it easier to customize opacity, colour and borders.
I like the colour for this one is it based on measure value. The darker the colour the stronger the metric. Visually I find it easier to see technology has overall stronger skills on average compare to the other industries.

The hendecagon charts here has 4 base layers, including 3 quartile reference lines (25%, 50%, 75%). The colours are then binned into the normalized values being between these values.
This allows us to see that our female grouped ages 27-29 have a lot of lower average metrics compared to the other groups. It also highlights the male 18-20 group having a lot of good and elite metrics.

Lastly, the dodecagon base layer features a 50% reference line and incorporates all twelve metrics to compare the health and marketing industries. The triangle colours have two layers; one representing the measure and the other the metric group. In this example, labels are included to help compare the profiles. The view reveals that healthcare workers tend to excel in certain intrapersonal metrics, while marketers show stronger performance in one of the cognitive skills.
Final Thoughts
Beyond a fun fact for your next trivia night, this dashboard demonstrates how custom polygon charts, with their versatile sides (from 5-12), dynamic layers, and strategic use of colors and labels, can unlock rich, multi-faceted insights from your data.
I encourage you to explore the full, interactive dashboard on Tableau Public. Download the workbook to see how these templates were built and to apply them to your own data. Thank you for reading, and I hope these templates prove to be a useful addition to your data visualization toolkit!
