PieChart
Introduction
PieChart
widget in Supervisely is a widget used for displaying a pie chart. It allows users to visualize data for comparison distribution of different objects. The PieChart
widget allows easily visualize data to determine the distribution of objects in comparison to each other.
Function signature
PieChart(
title="Simple Pie",
series=[
{"name": "Team A", "data": 44},
{"name": "Team B", "data": 55},
{"name": "Team C", "data": 33},
],
)
Parameters
title
str
PieChart
title
series
List[Dict[str, Union[int,float]]]
PieChart
slices data
stroke_width
str
Gap between slices
data_labels
bool
Show value on slices
height
Union[int, str]
PieChart
height size
type
Literal["pie", "donut"]
PieChart
type. Can be pie
or donut
title
Determines PieChart
title.
type: str
series
PieChart
slices data. The series should be a list of dicts with keys name
and data
. The name
key should contain the name of the slice and the data
key should contain the value of the slice.
type: List[Dict[str, Union[int,float]]]
default value: []
series=[
{"name": "Team A", "data": 44},
{"name": "Team B", "data": 55},
{"name": "Team C", "data": 33},
]
PieChart(
title="Simple Pie",
series=series,
)
stroke_width
Determines the gap between slices on PieChart
. Set to 0
to remove the gap.
type: int
default value: 2
title="Simple Pie",
series=[
{"name": "Team A", "data": 44},
{"name": "Team B", "data": 55},
{"name": "Team C", "data": 33},
],
stroke_width=0,
data_labels
If True
show values on PieChart
slices. If False
hide values on PieChart
slices.
type: bool
default value: False
title="Simple Pie",
series=[
{"name": "Team A", "data": 44},
{"name": "Team B", "data": 55},
{"name": "Team C", "data": 33},
],
data_labels=True,
height
Determines the size of PieChart
.
type: Union[int, str]
default value: 350
title="Simple Pie",
series=[
{"name": "Team A", "data": 44},
{"name": "Team B", "data": 55},
{"name": "Team C", "data": 33},
],
height=500,
type
Determines the type of PieChart
. Can be pie
or donut
.
type: Literal["pie", "donut"]
default value: pie
title="Simple Pie",
series=[
{"name": "Team A", "data": 44},
{"name": "Team B", "data": 55},
{"name": "Team C", "data": 33},
],
type="donut",
Methods and attributes
add_series(names: List[str], values: List[Union[int, float]])
Adds a new series to the PieChart
widget.
set_series(names: List[str], values: List[Union[int, float]])
Sets a series to the PieChart
widget, removing all previous series.
get_series(index: int))
Returns a series from the PieChart
widget by index.
delete_series(index: int)
Deletes a series from the PieChart
widget by index.
get_clicked_datapoint()
Returns the clicked datapoint from the PieChart
widget as NamedTuple
.
Mini app example
You can find this example in our GitHub repository:
supervisely-ecosystem/ui-widgets-demos/charts-and-plots/009_pie_chart/src/main.py
Import libraries
import os
import supervisely as sly
from dotenv import load_dotenv
from supervisely.app.widgets import (
Button,
Card,
Container,
Flexbox,
Input,
InputNumber,
PieChart,
Text,
)
Init API client
First, we load environment variables with credentials and init API for communicating with Supervisely Instance:
load_dotenv("local.env")
load_dotenv(os.path.expanduser("~/supervisely.env"))
api = sly.Api()
Initialize PieChart widget
# Prepare names and values for series
series = [
{"name": "Team A", "data": 44},
{"name": "Team B", "data": 55},
{"name": "Team C", "data": 13},
{"name": "Team D", "data": 43},
{"name": "Team E", "data": 22},
]
pie_chart = PieChart(
title="Simple Pie",
series=series,
stroke_width=1,
data_labels=True,
height=350,
type="pie",
)
Create GUI with buttons
# Create Text widget for displaying clicked datapoint info and place it in the Container widget with PieChart.
text = Text("Click on the slice to see it's value", status="info")
container_chart = Container(widgets=[pie_chart, text])
# Create Input widget for slice name, InputNumber widget for slice value and Buttons for managing slices.
input_name = Input(value="Team F", maxlength=10)
input_value = InputNumber(value=10)
button_add = Button("Add slice")
button_set = Button("Set slice")
button_remove = Button("Delete selected slice", "danger")
# Disable remove button until slice is selected.
button_remove.disable()
# Create Flexbox widget for buttons and place it in the Container widget with Input widgets.
buttons_flex = Flexbox(widgets=[button_add, button_set, button_remove])
container_add = Container(widgets=[input_name, input_value, buttons_flex])
# Place both Container widgets in the main Container widget. We will pass it to the app layout later.
main_container = Container(widgets=[container_chart, container_add])
Create app layout
Prepare a layout for the app using Card
widget with the content
parameter and place widget that we've just created in the Container
widget.
# Creating Card widget, which will contain the Transfer widget and the Text widget.
card = Card(title="Pie Chart", content=main_container)
# Creating the application layout.
layout = card
Create an app using the layout
Create an app object with the layout parameter.
# Initialize the application.
app = sly.Application(layout=layout)
Using @click event
@pie_chart.click
def show_selection(datapoint: PieChart.ClickedDataPoint):
# Datapoint is a namedtuple with fields: series_index, data_index, data
data_name = datapoint.data["name"]
data_value = datapoint.data["value"]
data_index = datapoint.data_index
# Update text widget with selected slice info.
text.set(f"Selected slice: {data_name}, Value: {data_value}, Index: {data_index}", "info")
# Enable remove button when slice is selected.
button_remove.enable()
Add buttons logic: Add, Set, Remove
@button_add.click
def add_slice():
name = input_name.get_value()
value = input_value.get_value()
pie_chart.add_series(names=[name], values=[value])
@button_set.click
def set_slice():
name = input_name.get_value()
value = input_value.get_value()
pie_chart.set_series(names=[name], values=[value])
@button_remove.click
def remove_slice():
datapoint: PieChart.ClickedDataPoint = pie_chart.get_clicked_datapoint()
datapoint.data_index
pie_chart.delete_series(datapoint.data_index)
button_remove.disable()
Last updated
Was this helpful?