Files
lightweight-charts-python/docs/source/tables.md
louisnw 06b605d3a7 Enhancements and Bug Fixes
Tables Feature
- Added the `create_table` method, which returns a `Table` object. This can be used to display watchlists, order windows, position windows and more.
- See the new page on the docs for more information!

Bugs
- Fixed a bug preventing the named column of a line to not work as a label of the series.
- Fixed a bug causing drawings loaded from the minute timeframe to not show on a daily timeframe.
- Fixed a bug causing `chart.exit` to not work.
- Fixed a bug preventing the chart from being moved after placing a ray.
- Fixed the ‘price in hoveringOver’ web console error.

Enhancements
- The date/time column can also be the `name` of the passed series object.
- Added the `label` method to `HorizontalLine`, allowing for the price line label of horizontal lines to be updated.
- `None` or an empty DataFrame can now be passed to `line.set` as a means to clear it.
- Seperate Chart objects will now run on the same pywebview instance. This means that any Chart objects created after the first will inherit the first Chart’s API.
- Reorganized the documentation for clarity.
2023-08-02 13:47:52 +01:00

3.2 KiB

Table

width: int/float | height: int/float | headings: tuple[str] | widths: tuple[float] | alignments: tuple[str] | position: 'left'/'right'/'top'/'bottom' | draggable: bool | method: object

Tables are panes that can be used to gain further functionality from charts. They are intended to be used for watchlists, order management, or position management. It should be accessed from the create_table common method.

The Table and Row objects inherit from dictionaries, and can be manipulated as such.

width/height: Either given as a percentage (a float between 0 and 1) or as an integer representing pixel size.

widths: Given as a float between 0 and 1.

position: Used as you would when creating a SubChart, representing how the table will float within the window.

draggable: If True, then the window can be dragged to any position within the window.

method: If given this will be called when a row is clicked.


new_row (Row)

*values | id: int | -> Row

Creates a new row within the table, and returns a Row object.

if id is passed it should be unique to all other rows. Otherwise, the id will be randomly generated.

background_color

column: str | color: str

Sets the background color of the Row cell at the given column.

delete

Deletes the row.


clear

Clears and deletes all table rows.


format

column: str | format_str: str

Sets the format to be used for the given column. table.VALUE should be used as a placeholder for the cell value. For example:

table.format('Daily %', f'{table.VALUE} %')
table.format('PL', f'$ {table.VALUE}')

visible

visible: bool

Sets the visibility of the Table.


Tables can also have a footer containing a number of text boxes. To initialize this, call the footer attribute with the number of textboxes to be used:

table.footer(3)  # Footer will be displayed, with 3 text boxes.

To edit the textboxes, treat footer as a list:

table.footer[0] = 'Text Box 1'
table.footer[1] = 'Text Box 2'
table.footer[2] = 'Text Box 3'

Example:

import pandas as pd
from lightweight_charts import Chart

def on_row_click(row_id):
    row = table.get(row_id)
    print(row)

    row['PL'] = round(row['PL']+1, 2)
    row.background_color('PL', 'green' if row['PL'] > 0 else 'red')

    table.footer[1] = row['Ticker']

if __name__ == '__main__':
    chart = Chart(width=1000, inner_width=0.7, inner_height=1)
    subchart = chart.create_subchart(width=0.3, height=0.5)
    df = pd.read_csv('ohlcv.csv')
    chart.set(df)
    subchart.set(df)

    table = chart.create_table(width=0.3, height=0.2,
                  headings=('Ticker', 'Quantity', 'Status', '%', 'PL'),
                  widths=(0.2, 0.1, 0.2, 0.2, 0.3),
                  alignments=('center', 'center', 'right', 'right', 'right'),
                  position='left', method=on_row_click)

    table.format('PL', f{table.VALUE}')
    table.format('%', f'{table.VALUE} %')

    table.new_row('SPY', 3, 'Submitted', 0, 0)
    table.new_row('AMD', 1, 'Filled', 25.5, 105.24)
    table.new_row('NVDA', 2, 'Filled', -0.5, -8.24)

    table.footer(2)
    table.footer[0] = 'Selected:'

    chart.show(block=True)