Introduction
Apexchart
is a widget in Supervisely that allows for displaying interactive charts on the UI. It supports various chart types such as line
, area
, and bar
. Users can customize the chart by changing the chart type, color schemes, and legend location.
It also provides functionality for data streaming and dynamic updates, allowing the chart to display real-time data. The data can be passed to the chart in the form of a pandas dataframe or a Python list of dictionaries. Additionally, users can control the chart through Python code by detecting events such as clicking on a data point or hovering over a chart element.
Function signature
Copy size1 = 10
x1 = list ( range (size1))
y1 = np . random . randint (low = 10 , high = 148 , size = size1). tolist ()
s1 = [ { "x" : x , "y" : y } for x , y in zip (x1, y1) ]
size2 = 30
x2 = list ( range (size2))
y2 = np . random . randint (low = 0 , high = 300 , size = size2). tolist ()
s2 = [ { "x" : x , "y" : y } for x , y in zip (x2, y2) ]
apexchart = Apexchart (
series = [{ "name" : "Max" , "data" : s1}, { "name" : "Denis" , "data" : s2}],
options = {
"chart" : { "type" : "line" , "zoom" : { "enabled" : False }},
"dataLabels" : { "enabled" : False },
"stroke" : { "curve" : "smooth" , "width" : 2 },
"title" : { "text" : "Product Trends by Month" , "align" : "left" },
"grid" : { "row" : { "colors" : [ "#f3f3f3" , "transparent" ], "opacity" : 0.5 }},
"xaxis" : { "type" : "category" },
},
type = "line" ,
)
Parameters
Parameters Type Description List of series including names and lists of X, Y coordinates
Chart options for customizing styles
Type of chart (line
, bar
, area
)
Additional options used in supervisely component
series
List of series including names and lists of X, Y coordinates
type: list
Copy apexchart = Apexchart (
series = [{ "name" : "Max" , "data" : s1}, { "name" : "Denis" , "data" : s2}],
# options=...
# type=...
)
options
Chart options for customizing styles
type: dict
Copy apexchart = Apexchart (
options = {
"chart" : { "type" : "line" , "zoom" : { "enabled" : False }},
"dataLabels" : { "enabled" : False },
"stroke" : { "curve" : "smooth" , "width" : 2 },
"title" : { "text" : "Product Trends by Month" , "align" : "left" },
"grid" : { "row" : { "colors" : [ "#f3f3f3" , "transparent" ], "opacity" : 0.5 }},
"xaxis" : { "type" : "category" },
},
# series=...,
# type=...
)
type
Type of chart. It supports following chart types: line, area, bar.
type: str
Copy apexchart = Apexchart (
series = [{ "name" : "Max" , "data" : s1}, { "name" : "Denis" , "data" : s2}],
options = {
"chart" : { "type" : "line" , "zoom" : { "enabled" : False }},
"dataLabels" : { "enabled" : False },
"stroke" : { "curve" : "smooth" , "width" : 2 },
"title" : { "text" : "Product Trends by Month" , "align" : "left" },
"grid" : { "row" : { "colors" : [ "#f3f3f3" , "transparent" ], "opacity" : 0.5 }},
"xaxis" : { "type" : "category" },
},
type = "line" ,
)
Copy apexchart = Apexchart (
series = [{ "name" : "Max" , "data" : s1}, { "name" : "Denis" , "data" : s2}],
options = {
"chart" : { "type" : "line" , "zoom" : { "enabled" : False }},
"dataLabels" : { "enabled" : False },
"stroke" : { "curve" : "smooth" , "width" : 2 },
"title" : { "text" : "Product Trends by Month" , "align" : "left" },
"grid" : { "row" : { "colors" : [ "#f3f3f3" , "transparent" ], "opacity" : 0.5 }},
"xaxis" : { "type" : "category" },
},
type = "area" ,
)
Copy apexchart = Apexchart (
series = [{ "name" : "Max" , "data" : s1}, { "name" : "Denis" , "data" : s2}],
options = {
"chart" : { "type" : "line" , "zoom" : { "enabled" : False }},
"dataLabels" : { "enabled" : False },
"stroke" : { "curve" : "smooth" , "width" : 2 },
"title" : { "text" : "Product Trends by Month" , "align" : "left" },
"grid" : { "row" : { "colors" : [ "#f3f3f3" , "transparent" ], "opacity" : 0.5 }},
"xaxis" : { "type" : "category" },
},
type = "bar" ,
)
height
Widget height
type: Union[int, str]
default value: "300"
Copy apexchart = Apexchart (
# series=...,
# options=...,
# type=...,
height = "500"
)
sly_options
Additional options used in supervisely component.
type: dict
Methods and attributes
Attributes and Methods Description Get value of clicked datapoint.
set_title(title: str, send_changes: bool = True)
add_series(name: str, x: list, y: list, send_changes: bool = True)
set_series(series: list, send_changes: bool = True)
set_colors(colors: List[str or List[int]], send_changes: bool = True)
Set colors for series in chart (str, RGB or HEX).
add_to_series(name_or_id: str or int, data: List[tuple] or List[dict] or tuple or dict], send_changes: bool = True)
Add data to exist series.
get_series_by_name(name: str)
Return series data by name.
Decorator function to handle chart click.
Mini App Example
You can find this example in our GitHub repository:
ui-widgets-demos/charts and plots/003_apex_chart/src/main.py
Import libraries
Copy import os
import numpy as np
import supervisely as sly
from dotenv import load_dotenv
from supervisely . app . widgets import Apexchart , Card
Init API client
First, we load environment variables with credentials and init API for communicating with Supervisely Instance:
Copy load_dotenv ( "local.env" )
load_dotenv (os.path. expanduser ( "~/supervisely.env" ))
api = sly . Api ()
Prepare series for chart
Copy size1 = 22
x1 = list ( range (size1))
y1 = np . random . randint (low = 10 , high = 180 , size = size1). tolist ()
s1 = [ { "x" : x , "y" : y } for x , y in zip (x1, y1) ]
size2 = 30
x2 = list ( range (size2))
y2 = np . random . randint (low = 0 , high = 300 , size = size2). tolist ()
s2 = [ { "x" : x , "y" : y } for x , y in zip (x2, y2) ]
Initialize Apexchart
widget
Copy apexchart = Apexchart (
series = [{ "name" : "Fred" , "data" : s1}, { "name" : "Harry" , "data" : s2}],
options = {
"chart" : { "type" : "line" , "zoom" : { "enabled" : False }},
"dataLabels" : { "enabled" : False },
"stroke" : { "curve" : "smooth" , "width" : 2 },
"title" : { "text" : "Product sales by month" , "align" : "left" },
"grid" : { "row" : { "colors" : [ "#f3f3f3" , "transparent" ], "opacity" : 0.5 }},
"xaxis" : { "type" : "category" },
},
type = "line" ,
)
Create app layout
Prepare a layout for app using Card
widget with the content
parameter.
Copy info_text = Text (status = "info" )
card = Card (title = "Apexchart" , content = Container ([apexchart, info_text]))
Create app using layout
Create an app object with layout parameter.
Copy app = sly . Application (layout = card)
Add functions to control widgets from python code
Copy @apexchart . click
def show_info ( datapoint : sly . app . widgets . Apexchart . ClickedDataPoint):
x = datapoint . x
y = datapoint . y
name = datapoint . series_name
info_text . text = f "On May { x } , { name } has sold { y } units of the product."
if int (y) > 160 :
info_text . status = "success"
elif int (y) < 50 :
info_text . status = "error"
else :
info_text . status = "info"
Last updated 9 months ago