AbstractChart

class AbstractChart(width, height)

Abstracted chart used to create child classes.


set(data: pd.DataFrame, keep_drawings: bool = False)

Sets the initial data for the chart.

Columns should be named:

time | open | high | low | close | volume

Time can be given in the index rather than a column, and volume can be omitted if volume is not used. Column names are not case sensitive.

If keep_drawings is True, any drawings made using the toolbox will be redrawn with the new data. This is designed to be used when switching to a different timeframe of the same symbol.

None can also be given, which will erase all candle and volume data displayed on the chart.

You can also add columns to color the candles (https://tradingview.github.io/lightweight-charts/tutorials/customization/data-points)


update(series: pd.Series, keep_drawings: bool = False)

Updates the chart data from a bar.

Series labels should be akin to set.


update_from_tick(series: pd.Series, cumulative_volume: bool = False)

Updates the chart from a tick.

Labels should be named:

time | price | volume

As before, the time can also be named date, and the volume can be omitted if volume is not enabled. The time column can also be the name of the Series object.

The provided ticks do not need to be rounded to an interval (1 min, 5 min etc.), as the library handles this automatically.

If cumulative_volume is used, the volume data given will be added onto the latest bar of volume data.


create_line(name: str, color: COLOR, style: LINE_STYLE, type: LINE_TYPE, width: int, price_line: bool, price_label: bool, pane_index: int) Line

Creates and returns a Line object, representing a LineSeries object in Lightweight Charts and can be used to create indicators. As well as the methods described below, the Line object also has access to:

marker, horizontal_line, hide_data, show_data and price_line.

Its instance should only be accessed from this method.


create_histogram(name: str, color: COLOR, price_line: bool, price_label: bool, scale_margin_top: float, scale_margin_bottom: float, pane_index: int) Histogram

Creates and returns a Histogram object, representing a HistogramSeries object in Lightweight Charts and can be used to create indicators. As well as the methods described below, the object also has access to:

horizontal_line, hide_data, show_data and price_line.

pane_index

Places the histogram in the given pane (0 = main pane). The pane must already exist or be created first via add_pane().

Its instance should only be accessed from this method.


create_area(name: str, top_color: COLOR, bottom_color: COLOR, line_color: COLOR, line_width: int, price_line: bool, price_label: bool, pane_index: int) Area

Creates and returns an Area series object, representing an AreaSeries in Lightweight Charts.

set() and update() accept optional per-point colour columns or keys: line_color, top_color, bottom_color (camelCase variants also accepted).

Inherits all SeriesCommon methods.


lines() List[Line]

Returns a list of all lines for the chart.


trend_line(start_time: str | datetime, start_value: NUM, end_time: str | datetime, end_value: NUM, color: COLOR, width: int, style: LINE_STYLE, round: bool, text: str, text_position: TREND_LINE_TEXT_POSITION, text_color: COLOR) TwoPointDrawing

Creates a trend line, drawn from the first point (start_time, start_value) to the last point (end_time, end_value).

round

When False (default), coordinates use the same Unix-second timestamps as set. Pass times from your DataFrame directly, including weekly or monthly resampled bars. When True, times are snapped to the detected bar interval.

text_position can be "center" (default), "start", or "end" along the line segment.


box(start_time: str | datetime, start_value: NUM, end_time: str | datetime, end_value: NUM, color: COLOR, fill_color: COLOR, width: int, style: LINE_STYLE, round: bool, text: str, text_position: BOX_TEXT_POSITION, text_placement: BOX_TEXT_PLACEMENT, text_color: COLOR) TwoPointDrawing

Creates a rectangular box between two (time, price) corners.

round

When False (default), coordinates use the same Unix-second timestamps as set. Pass times from your DataFrame directly, including weekly or monthly resampled bars. When True, times are snapped to the detected bar interval.

text / text_position / text_placement / text_color

Optional on-chart label.

  • text_position — anchor: "center" (default), "left", "right", "top", or "bottom".

  • text_placement"outside" (default) places the label just outside the rectangle on the chosen edge; "inside" draws it within the rectangle.

Returns a TwoPointDrawing object. Update label and style options at runtime via .options().


ray_line(start_time: str | datetime, value: NUM, color: COLOR, width: int, style: LINE_STYLE, round: bool, text: str, text_position: LINE_TEXT_POSITION, axis_label_visible: bool, text_color: COLOR) Line

Creates a ray line, drawn from the first point (start_time, value) and onwards.

Supports the same on-chart text / text_position options as horizontal_line.


vertical_span(start_time: TIME | list | tuple, end_time: TIME = None, color: COLOR = 'rgba(252, 219, 3, 0.2)', round: bool = False)

Creates and returns a VerticalSpan object.

If end_time is not given, then a single vertical line will be placed at start_time.

If a list/tuple is passed to start_time, vertical lines will be placed at each time.

This should be used after calling set.


set_visible_range(self, start_time: TIME, end_time: TIME)

Sets the visible range of the chart.


resize(self, width: float = None, height: float = None)

Resizes the chart within the window.

Dimensions should be given as a float between or equal to 0 and 1.

Both width and height do not need to be provided if only one axis is to be changed.


marker(time: datetime, position: MARKER_POSITION, shape: MARKER_SHAPE, color: COLOR, text: str) str

Adds a marker to the chart, and returns its id.

If the time parameter is not given, the marker will be placed at the latest bar.

When using multiple markers, they should be placed in chronological order or display bugs may be present.


marker_list(markers: list) List[str]

Creates multiple markers and returns a list of marker ids.

remove_marker(marker_id: str)

Removes the marker with the given id.


horizontal_line(price: NUM, color: COLOR, width: int, style: LINE_STYLE, text: str, text_position: LINE_TEXT_POSITION, axis_label_visible: bool, text_color: COLOR, func: callable = None) HorizontalLine

Places a horizontal line at the given price, and returns a [HorizontalLine] object.

text / text_position

Optional on-chart label ("above" or "below", centred on the visible line span).

axis_label_visible

When False, hides the price label on the right-hand axis.

If a func is given, the horizontal line can be edited on the chart. Upon its movement a callback will also be emitted to the callable given, containing the HorizontalLine object. The toolbox should be enabled during its usage. It is designed to be used to update an order (limit, stop, etc.) directly on the chart.


clear_markers()

Clears the markers displayed on the data.


precision(precision: int)

Sets the precision of the chart based on the given number of decimal places.


price_scale(auto_scale: bool, mode: PRICE_SCALE_MODE, invert_scale: bool, align_labels: bool, scale_margin_top: float, scale_margin_bottom: float, border_visible: bool, border_color: COLOR, text_color: COLOR, entire_text_only: bool, visible: bool, ticks_visible: bool, minimum_width: float)

Price scale options for the chart.


time_scale(right_offset: int, min_bar_spacing: float, visible: bool, time_visible: bool, seconds_visible: bool, border_visible: bool, border_color: COLOR)

Timescale options for the chart.


layout(background_color: COLOR, text_color: COLOR, font_size: int, font_family: str)

Global layout options for the chart.


grid(vert_enabled: bool, horz_enabled: bool, color: COLOR, style: LINE_STYLE)

Grid options for the chart.


candle_style(up_color: COLOR, down_color: COLOR, wick_enabled: bool, border_enabled: bool, border_up_color: COLOR, border_down_color: COLOR, wick_up_color: COLOR, wick_down_color: COLOR)

Candle styling for each of the candle’s parts (border, wick).


volume_config(scale_margin_top: float, scale_margin_bottom: float, up_color: COLOR, down_color: COLOR)

Volume config options.

Important

The float values given to scale the margins must be greater than 0 and less than 1.


crosshair(mode, vert_visible: bool, vert_width: int, vert_color: COLOR, vert_style: LINE_STYLE, vert_label_background_color: COLOR, horz_visible: bool, horz_width: int, horz_color: COLOR, horz_style: LINE_STYLE, horz_label_background_color: COLOR)

Crosshair formatting for its vertical and horizontal axes.


watermark(text: str, font_size: int, color: COLOR)

Overlays a watermark on top of the chart.


legend(visible: bool, ohlc: bool, percent: bool, lines: bool, color: COLOR, font_size: int, font_family: str, text: str, color_based_on_candle: bool)

Configures the legend of the chart.


spinner(visible: bool)

Shows a loading spinner on the chart, which can be used to visualise the loading of large datasets, API calls, etc.

Important

This method must be used in conjunction with the search event.


price_line(label_visible: bool, line_visible: bool, title: str)

Configures the visibility of the last value price line and its label.


fit()

Attempts to fit all data displayed on the chart within the viewport (fitContent()).


show_data()

Shows the hidden candles on the chart.


hide_data()

Hides the candles on the chart.


hotkey(modifier: 'ctrl' | 'alt' | 'shift' | 'meta' | None, key: 'str' | 'int' | 'tuple', func: callable)

Adds a global hotkey to the chart window, which will execute the method or function given.

If multiple key commands are needed for the same function, a tuple can be passed to key.


create_table(width: NUM, height: NUM, headings: Tuple[str], widths: Tuple[float], alignments: Tuple[str], position: FLOAT, draggable: bool, return_clicked_cells: bool, func: callable) Table

Creates and returns a Table object.


screenshot() bytes

Takes a screenshot of the chart and returns the image as a bytes object.

This method can only be called after the chart window is visible.


add_pane(height: int) None

Adds a new empty pane below the existing panes.

height

Optional height in pixels for the new pane.


remove_pane(pane_index: int)

Removes the pane at the given index.


resize_pane(pane_index: int, height: int)

Sets the height of the pane at pane_index in pixels.


swap_panes(first: int, second: int)

Swaps the panes at the two given indices.


get_pane_count() int

Returns the current number of panes in the chart (blocking call).


create_subchart(label: str, main_label: str = 'Main', toolbox: bool = False) SubChart

Creates a tabbed sub-chart inside the same webview window and returns a SubChart instance.

On the first call, a tab bar is injected above the charts and the main chart is assigned a tab labelled main_label. On subsequent calls main_label is ignored.

See the Subcharts example.


panes() List[Pane]

Returns a list of Pane objects, one per pane.

The pane count is fetched from JS each time this is called. Pane objects become stale after structural changes (remove_pane, swap_panes) — re-call panes() after such operations.

See the Panes example for usage.


class SubChart(label: str, toolbox: bool = False)

A tabbed sub-chart that shares the parent chart’s webview window. Instances are created via create_subchart and inherit the full AbstractChart API.

The tab bar is managed by the parent chart; each SubChart registers itself as a new tab on construction.

See the Subcharts example.