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.
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.
# 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.clickdefshow_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.clickdefadd_slice(): name = input_name.get_value() value = input_value.get_value() pie_chart.add_series(names=[name], values=[value])@button_set.clickdefset_slice(): name = input_name.get_value() value = input_value.get_value() pie_chart.set_series(names=[name], values=[value])@button_remove.clickdefremove_slice(): datapoint: PieChart.ClickedDataPoint = pie_chart.get_clicked_datapoint() datapoint.data_index pie_chart.delete_series(datapoint.data_index) button_remove.disable()