Skip to main content
Question

Figma challenge – Flexible pie charts

  • September 20, 2021
  • 8 replies
  • 2259 views

disco_lu
Figmate

Hey everyone!

I have a challenge for you 🧐

The goal
Create a pie chart where each slice is equally spaced when I add or remove a slice.

How to participate
Recreate the attached image, but in a more flexible way.

Is there a right answer?
Who knows 🙂

How it currently works
Each time I add a new slice, I have to manually edit the “Sweep” of the pie to match the proportions I’d need.

This topic has been closed for comments

8 replies

ntfromchicago
  • New Member
  • 287 replies
  • September 20, 2021

Will the slices always be equal sizes as you add/remove them? Is there a maximum/minimum for number of slices?


disco_lu
Figmate
  • Author
  • Figmate
  • 5 replies
  • September 21, 2021

Yeah ideally equal!


ntfromchicago
  • New Member
  • 287 replies
  • September 21, 2021

So three options that come to mind, I’m sure there are more. All these assume equal sizes for the arcs.

1a. Create variants of all the iterations manually. A bit time consuming but you’d only have to create each variant once.

1b. This is more hacky, but apply an angular gradient to the fill, then overlay a dashed line to make the gaps. Make those styles and switch as needed. (You could also build the variants this way as well). I tested this out and once you figure out the math for the dashes, it’s usable.

  1. Create a Scripter to generate a pie chart. This is my preferred route but I know it may require a little technical skill to mod correctly. I’ll share a sample script you can test out.

Interested in hearing more ideas from others! Maybe a feature request for radial-based Auto Layout is needed. =)


ntfromchicago
  • New Member
  • 287 replies
  • September 21, 2021

Here’s a really rough snapshot of what option 1b looks like, the colors are deliberately wrong and not lined up correctly, but this is just two objects: the ellipse with the gradient fill, and an ellipse with just a dash stroke.

Screen Shot 2021-09-21 at 8.58.59 AM


ntfromchicago
  • New Member
  • 287 replies
  • September 21, 2021

Here’s a sample script you can try out using the Scripter plugin. Hope this helps!

// ==========================================================
// Stuff you can edit
// ==========================================================

let arcCount = 32 // Change to the number of arcs you need

let arcColors = [
	{r: 183.0/255.0, g: 0.0, b: 0.0},
	{r: 152.0/255.0, g: 0.0, b: 183.0/255.0},
	{r: 183.0/255.0, g: 122.0/255.0, b: 0.0},
	{r: 0.0, g: 183.0/255.0, b: 152.0/255.0},
	{r: 0.0, g: 73.0/255.0, b: 183.0/255.0}
] // Add more RGB colors to this array if you want; otherwise this will just cycle through the list of available colors on this list

let sharedStrokeColor = {r: 0.0, g: 0.0, b: 0.0}

// ==========================================================

// No need to mess with stuff down here unless you know what you're doing =)

let arcRadians = (360/arcCount) * (Math.PI/180)

var currentArcColor = 0

for (let i = 0; i < arcCount; i++) {

	let arc = figma.createEllipse()

	let startRadians = i * arcRadians
	let endRadians = startRadians + arcRadians

	arc.arcData = {startingAngle: startRadians, endingAngle: endRadians, innerRadius: 0.85}

	arc.fills = [{
    type: "SOLID",
    visible: true,
    opacity: 1.0,
    blendMode: "NORMAL",
    color: arcColors[currentArcColor]
  }]

	arc.strokes = [{
    type: "SOLID",
    visible: true,
    opacity: 1.0,
    blendMode: "NORMAL",
    color: sharedStrokeColor
  }]

	arc.strokeWeight = 2
	arc.strokeAlign = "CENTER"

	currentArcColor = currentArcColor + 1
	if (currentArcColor >= arcColors.length) {
		currentArcColor = 0	
	}
}

/* TODO List of potential improvements

1a. Ability to select an existing chart to get a count of ellipses, then replace at the right size, color, inner radius, etc.

1b. Pick up the existing colors from the selected ellipses and use them.

2. Enable different sized arcs and/or patterns

*/ 

disco_lu
Figmate
  • Author
  • Figmate
  • 5 replies
  • September 23, 2021

Awesome! It looks like Rogie and Miggi managed to find a way too 😃

twitter.com

ntfromchicago
  • New Member
  • 287 replies
  • September 24, 2021

Yes! That technique is also very cool! I think the purist in me worries a little that the masked out arc divider lines are not perfectly parallel to each other because of the star. But it is also definitely a viable solution to this challenge.


  • 0 replies
  • October 20, 2021

This topic was automatically closed after 30 days. New replies are no longer allowed.


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings