# Plotly materializer extension

By importing `hamilton.plugins.plotly_extensions`, you can register two additional materializers for Plotly figures. The `to.plotly()` creates static image files ([docs](https://plotly.com/python/static-image-export/)) and the `to.html()` outputs interactive HTML files ([docs](https://plotly.com/python/interactive-html-export/)).

## How to
You need to install `plotly` (low-level API) to annotate your function with `plotly.graph_objects.Figure` even if you are using `plotly_express` (high-level API) to generate figures.
```python
# 1. define a function returning a `plotly.graph_objects.Figure` in a python module.
def confusion_matrix(...) -> plotly.graph_objects.Figure:
    return plotly.express.imshow(...)

# 2. import the module and create the Hamilton driver
dr = (
    driver.Builder()
    .with_config({...})
    .with_modules(MODULE_NAME)
    .build()
)

# 3. define the materializers
from hamilton.io.materialization import to

materializers = [
    to.plotly(
        dependencies=["confusion_matrix_figure"],
        id="confusion_matrix_png",
        path="./static.png",
    ),
    to.html(
        dependencies=["confusion_matrix_figure"],
        id="confusion_matrix_html",
        path="./interactive.html",
    ),
]

# 4. materialize figures
dr.materialize(*materializers)
```

## Notes
Here are a few things to consider when using the plotly materializers:
- Any plotly figure is a subclass of `plotly.graph_objects.Figure`, including anything from `plotly.express`, `plotly.graph_objects`, `plotly.figure_factory`.
- `to.plotly()` supports all filetypes of the plotly rendering engine (PNG, SVG, etc.). The output type will be automatically inferred from the `path` value passed to the materializer. Or, you can specify the file type explicitly as `kwarg`.
- `to.html()` outputs an interactive HTML file. These files will be at least ~3Mb each since they include they bundle the plotly JS library. You can reduce that by using the `include_plotlyjs` `kwarg`. Read more about it in the documentation at `https://plotly.com/python/interactive-html-export/`
- `to.html()` will include the data that's being visually displayed, including what's part of the tooltips, which can grow filesize quickly.
