123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- """Component for displaying a plotly graph."""
- from typing import Any, Dict, List
- from reflex.components.component import NoSSRComponent
- from reflex.vars import Var
- try:
- from plotly.graph_objects import Figure
- except ImportError:
- Figure = Any # type: ignore
- class PlotlyLib(NoSSRComponent):
- """A component that wraps a plotly lib."""
- library = "react-plotly.js@2.6.0"
- lib_dependencies: List[str] = ["plotly.js@2.22.0"]
- class Plotly(PlotlyLib):
- """Display a plotly graph."""
- tag = "Plot"
- is_default = True
- # The figure to display. This can be a plotly figure or a plotly data json.
- data: Var[Figure]
- # The layout of the graph.
- layout: Var[Dict]
- # The config of the graph.
- config: Var[Dict]
- # If true, the graph will resize when the window is resized.
- use_resize_handler: Var[bool]
- def _render(self):
- tag = super()._render()
- figure = self.data.to(dict)
- if self.layout is None:
- tag.remove_props("data", "layout")
- tag.special_props.add(
- Var.create_safe(f"{{...{figure._var_name_unwrapped}}}")
- )
- else:
- tag.add_props(data=figure["data"])
- return tag
|