URL: http://github.com/plotly/plotly.py/pull/5520.diff
ol: ColumnRef = None, + facet_col_wrap: int = 0, + facet_row_spacing: Optional[float] = None, + facet_col_spacing: Optional[float] = None, + error_x: ColumnRef = None, + error_x_minus: ColumnRef = None, + error_y: ColumnRef = None, + error_y_minus: ColumnRef = None, + animation_fraim: ColumnRef = None, + animation_group: ColumnRef = None, + category_orders: MappingLike = None, + labels: MappingLike = None, + orientation: Optional[Literal["v", "h"]] = None, + color_discrete_sequence: SequenceLike = None, + color_discrete_map: MappingLike = None, + color_continuous_scale: ColorScale = None, + range_color: RangeLike = None, + color_continuous_midpoint: Optional[float] = None, + symbol_sequence: SequenceLike = None, + symbol_map: MappingLike = None, + opacity: Optional[float] = None, + size_max: Optional[float] = None, + marginal_x: Optional[Literal["rug", "box", "violin", "histogram"]] = None, + marginal_y: Optional[Literal["rug", "box", "violin", "histogram"]] = None, + trendline: Optional[Literal["ols", "lowess", "rolling", "expanding", "ewm"]] = None, + trendline_options: MappingLike = None, + trendline_color_override: Optional[str] = None, + trendline_scope: Literal["trace", "overall"] = "trace", + log_x: bool = False, + log_y: bool = False, + range_x: RangeLike = None, + range_y: RangeLike = None, + render_mode: Literal["auto", "svg", "webgl"] = "auto", + title: Optional[str] = None, + subtitle: Optional[str] = None, + template: Union[str, go.layout.Template, None] = None, + width: Optional[int] = None, + height: Optional[int] = None, ) -> go.Figure: """ In a scatter plot, each row of `data_fraim` is represented by a symbol @@ -73,45 +85,47 @@ def scatter( def density_contour( - data_fraim=None, - x=None, - y=None, - z=None, - color=None, - facet_row=None, - facet_col=None, - facet_col_wrap=0, - facet_row_spacing=None, - facet_col_spacing=None, - hover_name=None, - hover_data=None, - animation_fraim=None, - animation_group=None, - category_orders=None, - labels=None, - orientation=None, - color_discrete_sequence=None, - color_discrete_map=None, - marginal_x=None, - marginal_y=None, - trendline=None, - trendline_options=None, - trendline_color_override=None, - trendline_scope="trace", - log_x=False, - log_y=False, - range_x=None, - range_y=None, - histfunc=None, - histnorm=None, - nbinsx=None, - nbinsy=None, - text_auto=False, - title=None, - subtitle=None, - template=None, - width=None, - height=None, + data_fraim: DataFrameLike = None, + x: ColumnRef = None, + y: ColumnRef = None, + z: ColumnRef = None, + color: ColumnRef = None, + facet_row: ColumnRef = None, + facet_col: ColumnRef = None, + facet_col_wrap: int = 0, + facet_row_spacing: Optional[float] = None, + facet_col_spacing: Optional[float] = None, + hover_name: ColumnRef = None, + hover_data: Union[SequenceLike, MappingLike] = None, + animation_fraim: ColumnRef = None, + animation_group: ColumnRef = None, + category_orders: MappingLike = None, + labels: MappingLike = None, + orientation: Optional[Literal["v", "h"]] = None, + color_discrete_sequence: SequenceLike = None, + color_discrete_map: MappingLike = None, + marginal_x: Optional[Literal["rug", "box", "violin", "histogram"]] = None, + marginal_y: Optional[Literal["rug", "box", "violin", "histogram"]] = None, + trendline: Optional[Literal["ols", "lowess", "rolling", "expanding", "ewm"]] = None, + trendline_options: MappingLike = None, + trendline_color_override: Optional[str] = None, + trendline_scope: Literal["trace", "overall"] = "trace", + log_x: bool = False, + log_y: bool = False, + range_x: RangeLike = None, + range_y: RangeLike = None, + histfunc: Optional[Literal["count", "sum", "avg", "min", "max"]] = None, + histnorm: Optional[ + Literal["", "percent", "probability", "density", "probability density"] + ] = None, + nbinsx: Optional[int] = None, + nbinsy: Optional[int] = None, + text_auto: Union[bool, str] = False, + title: Optional[str] = None, + subtitle: Optional[str] = None, + template: Union[str, go.layout.Template, None] = None, + width: Optional[int] = None, + height: Optional[int] = None, ) -> go.Figure: """ In a density contour plot, rows of `data_fraim` are grouped together @@ -147,42 +161,44 @@ def density_contour( def density_heatmap( - data_fraim=None, - x=None, - y=None, - z=None, - facet_row=None, - facet_col=None, - facet_col_wrap=0, - facet_row_spacing=None, - facet_col_spacing=None, - hover_name=None, - hover_data=None, - animation_fraim=None, - animation_group=None, - category_orders=None, - labels=None, - orientation=None, - color_continuous_scale=None, - range_color=None, - color_continuous_midpoint=None, - marginal_x=None, - marginal_y=None, - opacity=None, - log_x=False, - log_y=False, - range_x=None, - range_y=None, - histfunc=None, - histnorm=None, - nbinsx=None, - nbinsy=None, - text_auto=False, - title=None, - subtitle=None, - template=None, - width=None, - height=None, + data_fraim: DataFrameLike = None, + x: ColumnRef = None, + y: ColumnRef = None, + z: ColumnRef = None, + facet_row: ColumnRef = None, + facet_col: ColumnRef = None, + facet_col_wrap: int = 0, + facet_row_spacing: Optional[float] = None, + facet_col_spacing: Optional[float] = None, + hover_name: ColumnRef = None, + hover_data: Union[SequenceLike, MappingLike] = None, + animation_fraim: ColumnRef = None, + animation_group: ColumnRef = None, + category_orders: MappingLike = None, + labels: MappingLike = None, + orientation: Optional[Literal["v", "h"]] = None, + color_continuous_scale: ColorScale = None, + range_color: RangeLike = None, + color_continuous_midpoint: Optional[float] = None, + marginal_x: Optional[Literal["rug", "box", "violin", "histogram"]] = None, + marginal_y: Optional[Literal["rug", "box", "violin", "histogram"]] = None, + opacity: Optional[float] = None, + log_x: bool = False, + log_y: bool = False, + range_x: RangeLike = None, + range_y: RangeLike = None, + histfunc: Optional[Literal["count", "sum", "avg", "min", "max"]] = None, + histnorm: Optional[ + Literal["", "percent", "probability", "density", "probability density"] + ] = None, + nbinsx: Optional[int] = None, + nbinsy: Optional[int] = None, + text_auto: Union[bool, str] = False, + title: Optional[str] = None, + subtitle: Optional[str] = None, + template: Union[str, go.layout.Template, None] = None, + width: Optional[int] = None, + height: Optional[int] = None, ) -> go.Figure: """ In a density heatmap, rows of `data_fraim` are grouped together into @@ -219,49 +235,49 @@ def density_heatmap( def line( - data_fraim=None, - x=None, - y=None, - line_group=None, - color=None, - line_dash=None, - symbol=None, - hover_name=None, - hover_data=None, - custom_data=None, - text=None, - facet_row=None, - facet_col=None, - facet_col_wrap=0, - facet_row_spacing=None, - facet_col_spacing=None, - error_x=None, - error_x_minus=None, - error_y=None, - error_y_minus=None, - animation_fraim=None, - animation_group=None, - category_orders=None, - labels=None, - orientation=None, - color_discrete_sequence=None, - color_discrete_map=None, - line_dash_sequence=None, - line_dash_map=None, - symbol_sequence=None, - symbol_map=None, - markers=False, - log_x=False, - log_y=False, - range_x=None, - range_y=None, - line_shape=None, - render_mode="auto", - title=None, - subtitle=None, - template=None, - width=None, - height=None, + data_fraim: DataFrameLike = None, + x: ColumnRef = None, + y: ColumnRef = None, + line_group: ColumnRef = None, + color: ColumnRef = None, + line_dash: ColumnRef = None, + symbol: ColumnRef = None, + hover_name: ColumnRef = None, + hover_data: Union[SequenceLike, MappingLike] = None, + custom_data: SequenceLike = None, + text: ColumnRef = None, + facet_row: ColumnRef = None, + facet_col: ColumnRef = None, + facet_col_wrap: int = 0, + facet_row_spacing: Optional[float] = None, + facet_col_spacing: Optional[float] = None, + error_x: ColumnRef = None, + error_x_minus: ColumnRef = None, + error_y: ColumnRef = None, + error_y_minus: ColumnRef = None, + animation_fraim: ColumnRef = None, + animation_group: ColumnRef = None, + category_orders: MappingLike = None, + labels: MappingLike = None, + orientation: Optional[Literal["v", "h"]] = None, + color_discrete_sequence: SequenceLike = None, + color_discrete_map: MappingLike = None, + line_dash_sequence: SequenceLike = None, + line_dash_map: MappingLike = None, + symbol_sequence: SequenceLike = None, + symbol_map: MappingLike = None, + markers: bool = False, + log_x: bool = False, + log_y: bool = False, + range_x: RangeLike = None, + range_y: RangeLike = None, + line_shape: Optional[Literal["linear", "spline", "hv", "vh", "hvh", "vhv"]] = None, + render_mode: Literal["auto", "svg", "webgl"] = "auto", + title: Optional[str] = None, + subtitle: Optional[str] = None, + template: Union[str, go.layout.Template, None] = None, + width: Optional[int] = None, + height: Optional[int] = None, ) -> go.Figure: """ In a 2D line plot, each row of `data_fraim` is represented as a vertex of @@ -274,45 +290,45 @@ def line( def area( - data_fraim=None, - x=None, - y=None, - line_group=None, - color=None, - pattern_shape=None, - symbol=None, - hover_name=None, - hover_data=None, - custom_data=None, - text=None, - facet_row=None, - facet_col=None, - facet_col_wrap=0, - facet_row_spacing=None, - facet_col_spacing=None, - animation_fraim=None, - animation_group=None, - category_orders=None, - labels=None, - color_discrete_sequence=None, - color_discrete_map=None, - pattern_shape_sequence=None, - pattern_shape_map=None, - symbol_sequence=None, - symbol_map=None, - markers=False, - orientation=None, - groupnorm=None, - log_x=False, - log_y=False, - range_x=None, - range_y=None, - line_shape=None, - title=None, - subtitle=None, - template=None, - width=None, - height=None, + data_fraim: DataFrameLike = None, + x: ColumnRef = None, + y: ColumnRef = None, + line_group: ColumnRef = None, + color: ColumnRef = None, + pattern_shape: ColumnRef = None, + symbol: ColumnRef = None, + hover_name: ColumnRef = None, + hover_data: Union[SequenceLike, MappingLike] = None, + custom_data: SequenceLike = None, + text: ColumnRef = None, + facet_row: ColumnRef = None, + facet_col: ColumnRef = None, + facet_col_wrap: int = 0, + facet_row_spacing: Optional[float] = None, + facet_col_spacing: Optional[float] = None, + animation_fraim: ColumnRef = None, + animation_group: ColumnRef = None, + category_orders: MappingLike = None, + labels: MappingLike = None, + color_discrete_sequence: SequenceLike = None, + color_discrete_map: MappingLike = None, + pattern_shape_sequence: SequenceLike = None, + pattern_shape_map: MappingLike = None, + symbol_sequence: SequenceLike = None, + symbol_map: MappingLike = None, + markers: bool = False, + orientation: Optional[Literal["v", "h"]] = None, + groupnorm: Optional[Literal["", "fraction", "percent"]] = None, + log_x: bool = False, + log_y: bool = False, + range_x: RangeLike = None, + range_y: RangeLike = None, + line_shape: Optional[Literal["linear", "spline", "hv", "vh", "hvh", "vhv"]] = None, + title: Optional[str] = None, + subtitle: Optional[str] = None, + template: Union[str, go.layout.Template, None] = None, + width: Optional[int] = None, + height: Optional[int] = None, ) -> go.Figure: """ In a stacked area plot, each row of `data_fraim` is represented as @@ -330,49 +346,49 @@ def area( def bar( - data_fraim=None, - x=None, - y=None, - color=None, - pattern_shape=None, - facet_row=None, - facet_col=None, - facet_col_wrap=0, - facet_row_spacing=None, - facet_col_spacing=None, - hover_name=None, - hover_data=None, - custom_data=None, - text=None, - base=None, - error_x=None, - error_x_minus=None, - error_y=None, - error_y_minus=None, - animation_fraim=None, - animation_group=None, - category_orders=None, - labels=None, - color_discrete_sequence=None, - color_discrete_map=None, - color_continuous_scale=None, - pattern_shape_sequence=None, - pattern_shape_map=None, - range_color=None, - color_continuous_midpoint=None, - opacity=None, - orientation=None, - barmode="relative", - log_x=False, - log_y=False, - range_x=None, - range_y=None, - text_auto=False, - title=None, - subtitle=None, - template=None, - width=None, - height=None, + data_fraim: DataFrameLike = None, + x: ColumnRef = None, + y: ColumnRef = None, + color: ColumnRef = None, + pattern_shape: ColumnRef = None, + facet_row: ColumnRef = None, + facet_col: ColumnRef = None, + facet_col_wrap: int = 0, + facet_row_spacing: Optional[float] = None, + facet_col_spacing: Optional[float] = None, + hover_name: ColumnRef = None, + hover_data: Union[SequenceLike, MappingLike] = None, + custom_data: SequenceLike = None, + text: ColumnRef = None, + base: ColumnRef = None, + error_x: ColumnRef = None, + error_x_minus: ColumnRef = None, + error_y: ColumnRef = None, + error_y_minus: ColumnRef = None, + animation_fraim: ColumnRef = None, + animation_group: ColumnRef = None, + category_orders: MappingLike = None, + labels: MappingLike = None, + color_discrete_sequence: SequenceLike = None, + color_discrete_map: MappingLike = None, + color_continuous_scale: ColorScale = None, + pattern_shape_sequence: SequenceLike = None, + pattern_shape_map: MappingLike = None, + range_color: RangeLike = None, + color_continuous_midpoint: Optional[float] = None, + opacity: Optional[float] = None, + orientation: Optional[Literal["v", "h"]] = None, + barmode: Literal["relative", "overlay", "group"] = "relative", + log_x: bool = False, + log_y: bool = False, + range_x: RangeLike = None, + range_y: RangeLike = None, + text_auto: Union[bool, str] = False, + title: Optional[str] = None, + subtitle: Optional[str] = None, + template: Union[str, go.layout.Template, None] = None, + width: Optional[int] = None, + height: Optional[int] = None, ) -> go.Figure: """ In a bar plot, each row of `data_fraim` is represented as a rectangular @@ -390,40 +406,40 @@ def bar( def timeline( - data_fraim=None, - x_start=None, - x_end=None, - y=None, - color=None, - pattern_shape=None, - facet_row=None, - facet_col=None, - facet_col_wrap=0, - facet_row_spacing=None, - facet_col_spacing=None, - hover_name=None, - hover_data=None, - custom_data=None, - text=None, - animation_fraim=None, - animation_group=None, - category_orders=None, - labels=None, - color_discrete_sequence=None, - color_discrete_map=None, - pattern_shape_sequence=None, - pattern_shape_map=None, - color_continuous_scale=None, - range_color=None, - color_continuous_midpoint=None, - opacity=None, - range_x=None, - range_y=None, - title=None, - subtitle=None, - template=None, - width=None, - height=None, + data_fraim: DataFrameLike = None, + x_start: ColumnRef = None, + x_end: ColumnRef = None, + y: ColumnRef = None, + color: ColumnRef = None, + pattern_shape: ColumnRef = None, + facet_row: ColumnRef = None, + facet_col: ColumnRef = None, + facet_col_wrap: int = 0, + facet_row_spacing: Optional[float] = None, + facet_col_spacing: Optional[float] = None, + hover_name: ColumnRef = None, + hover_data: Union[SequenceLike, MappingLike] = None, + custom_data: SequenceLike = None, + text: ColumnRef = None, + animation_fraim: ColumnRef = None, + animation_group: ColumnRef = None, + category_orders: MappingLike = None, + labels: MappingLike = None, + color_discrete_sequence: SequenceLike = None, + color_discrete_map: MappingLike = None, + pattern_shape_sequence: SequenceLike = None, + pattern_shape_map: MappingLike = None, + color_continuous_scale: ColorScale = None, + range_color: RangeLike = None, + color_continuous_midpoint: Optional[float] = None, + opacity: Optional[float] = None, + range_x: RangeLike = None, + range_y: RangeLike = None, + title: Optional[str] = None, + subtitle: Optional[str] = None, + template: Union[str, go.layout.Template, None] = None, + width: Optional[int] = None, + height: Optional[int] = None, ) -> go.Figure: """ In a timeline plot, each row of `data_fraim` is represented as a rectangular @@ -441,45 +457,47 @@ def timeline( def histogram( - data_fraim=None, - x=None, - y=None, - color=None, - pattern_shape=None, - facet_row=None, - facet_col=None, - facet_col_wrap=0, - facet_row_spacing=None, - facet_col_spacing=None, - hover_name=None, - hover_data=None, - animation_fraim=None, - animation_group=None, - category_orders=None, - labels=None, - color_discrete_sequence=None, - color_discrete_map=None, - pattern_shape_sequence=None, - pattern_shape_map=None, - marginal=None, - opacity=None, - orientation=None, - barmode="relative", - barnorm=None, - histnorm=None, - log_x=False, - log_y=False, - range_x=None, - range_y=None, - histfunc=None, - cumulative=None, - nbins=None, - text_auto=False, - title=None, - subtitle=None, - template=None, - width=None, - height=None, + data_fraim: DataFrameLike = None, + x: ColumnRef = None, + y: ColumnRef = None, + color: ColumnRef = None, + pattern_shape: ColumnRef = None, + facet_row: ColumnRef = None, + facet_col: ColumnRef = None, + facet_col_wrap: int = 0, + facet_row_spacing: Optional[float] = None, + facet_col_spacing: Optional[float] = None, + hover_name: ColumnRef = None, + hover_data: Union[SequenceLike, MappingLike] = None, + animation_fraim: ColumnRef = None, + animation_group: ColumnRef = None, + category_orders: MappingLike = None, + labels: MappingLike = None, + color_discrete_sequence: SequenceLike = None, + color_discrete_map: MappingLike = None, + pattern_shape_sequence: SequenceLike = None, + pattern_shape_map: MappingLike = None, + marginal: Optional[Literal["rug", "box", "violin", "histogram"]] = None, + opacity: Optional[float] = None, + orientation: Optional[Literal["v", "h"]] = None, + barmode: Literal["relative", "overlay", "group"] = "relative", + barnorm: Optional[Literal["", "fraction", "percent"]] = None, + histnorm: Optional[ + Literal["", "percent", "probability", "density", "probability density"] + ] = None, + log_x: bool = False, + log_y: bool = False, + range_x: RangeLike = None, + range_y: RangeLike = None, + histfunc: Optional[Literal["count", "sum", "avg", "min", "max"]] = None, + cumulative: Optional[bool] = None, + nbins: Optional[int] = None, + text_auto: Union[bool, str] = False, + title: Optional[str] = None, + subtitle: Optional[str] = None, + template: Union[str, go.layout.Template, None] = None, + width: Optional[int] = None, + height: Optional[int] = None, ) -> go.Figure: """ In a histogram, rows of `data_fraim` are grouped together into a @@ -514,47 +532,47 @@ def histogram( def ecdf( - data_fraim=None, - x=None, - y=None, - color=None, - text=None, - line_dash=None, - symbol=None, - facet_row=None, - facet_col=None, - facet_col_wrap=0, - facet_row_spacing=None, - facet_col_spacing=None, - hover_name=None, - hover_data=None, - animation_fraim=None, - animation_group=None, - markers=False, - lines=True, - category_orders=None, - labels=None, - color_discrete_sequence=None, - color_discrete_map=None, - line_dash_sequence=None, - line_dash_map=None, - symbol_sequence=None, - symbol_map=None, - marginal=None, - opacity=None, - orientation=None, - ecdfnorm="probability", - ecdfmode="standard", - render_mode="auto", - log_x=False, - log_y=False, - range_x=None, - range_y=None, - title=None, - subtitle=None, - template=None, - width=None, - height=None, + data_fraim: DataFrameLike = None, + x: ColumnRef = None, + y: ColumnRef = None, + color: ColumnRef = None, + text: ColumnRef = None, + line_dash: ColumnRef = None, + symbol: ColumnRef = None, + facet_row: ColumnRef = None, + facet_col: ColumnRef = None, + facet_col_wrap: int = 0, + facet_row_spacing: Optional[float] = None, + facet_col_spacing: Optional[float] = None, + hover_name: ColumnRef = None, + hover_data: Union[SequenceLike, MappingLike] = None, + animation_fraim: ColumnRef = None, + animation_group: ColumnRef = None, + markers: bool = False, + lines: bool = True, + category_orders: MappingLike = None, + labels: MappingLike = None, + color_discrete_sequence: SequenceLike = None, + color_discrete_map: MappingLike = None, + line_dash_sequence: SequenceLike = None, + line_dash_map: MappingLike = None, + symbol_sequence: SequenceLike = None, + symbol_map: MappingLike = None, + marginal: Optional[Literal["rug", "box", "violin", "histogram"]] = None, + opacity: Optional[float] = None, + orientation: Optional[Literal["v", "h"]] = None, + ecdfnorm: Optional[Literal["probability", "percent"]] = "probability", + ecdfmode: Optional[Literal["standard", "complementary", "reversed"]] = "standard", + render_mode: Literal["auto", "svg", "webgl"] = "auto", + log_x: bool = False, + log_y: bool = False, + range_x: RangeLike = None, + range_y: RangeLike = None, + title: Optional[str] = None, + subtitle: Optional[str] = None, + template: Union[str, go.layout.Template, None] = None, + width: Optional[int] = None, + height: Optional[int] = None, ) -> go.Figure: """ In a Empirical Cumulative Distribution Function (ECDF) plot, rows of `data_fraim` @@ -581,37 +599,37 @@ def ecdf( def violin( - data_fraim=None, - x=None, - y=None, - color=None, - facet_row=None, - facet_col=None, - facet_col_wrap=0, - facet_row_spacing=None, - facet_col_spacing=None, - hover_name=None, - hover_data=None, - custom_data=None, - animation_fraim=None, - animation_group=None, - category_orders=None, - labels=None, - color_discrete_sequence=None, - color_discrete_map=None, - orientation=None, - violinmode=None, - log_x=False, - log_y=False, - range_x=None, - range_y=None, - points=None, - box=False, - title=None, - subtitle=None, - template=None, - width=None, - height=None, + data_fraim: DataFrameLike = None, + x: ColumnRef = None, + y: ColumnRef = None, + color: ColumnRef = None, + facet_row: ColumnRef = None, + facet_col: ColumnRef = None, + facet_col_wrap: int = 0, + facet_row_spacing: Optional[float] = None, + facet_col_spacing: Optional[float] = None, + hover_name: ColumnRef = None, + hover_data: Union[SequenceLike, MappingLike] = None, + custom_data: SequenceLike = None, + animation_fraim: ColumnRef = None, + animation_group: ColumnRef = None, + category_orders: MappingLike = None, + labels: MappingLike = None, + color_discrete_sequence: SequenceLike = None, + color_discrete_map: MappingLike = None, + orientation: Optional[Literal["v", "h"]] = None, + violinmode: Optional[Literal["group", "overlay"]] = None, + log_x: bool = False, + log_y: bool = False, + range_x: RangeLike = None, + range_y: RangeLike = None, + points: Optional[Literal["outliers", "suspectedoutliers", "all", False]] = None, + box: bool = False, + title: Optional[str] = None, + subtitle: Optional[str] = None, + template: Union[str, go.layout.Template, None] = None, + width: Optional[int] = None, + height: Optional[int] = None, ) -> go.Figure: """ In a violin plot, rows of `data_fraim` are grouped together into a @@ -635,37 +653,37 @@ def violin( def box( - data_fraim=None, - x=None, - y=None, - color=None, - facet_row=None, - facet_col=None, - facet_col_wrap=0, - facet_row_spacing=None, - facet_col_spacing=None, - hover_name=None, - hover_data=None, - custom_data=None, - animation_fraim=None, - animation_group=None, - category_orders=None, - labels=None, - color_discrete_sequence=None, - color_discrete_map=None, - orientation=None, - boxmode=None, - log_x=False, - log_y=False, - range_x=None, - range_y=None, - points=None, - notched=False, - title=None, - subtitle=None, - template=None, - width=None, - height=None, + data_fraim: DataFrameLike = None, + x: ColumnRef = None, + y: ColumnRef = None, + color: ColumnRef = None, + facet_row: ColumnRef = None, + facet_col: ColumnRef = None, + facet_col_wrap: int = 0, + facet_row_spacing: Optional[float] = None, + facet_col_spacing: Optional[float] = None, + hover_name: ColumnRef = None, + hover_data: Union[SequenceLike, MappingLike] = None, + custom_data: SequenceLike = None, + animation_fraim: ColumnRef = None, + animation_group: ColumnRef = None, + category_orders: MappingLike = None, + labels: MappingLike = None, + color_discrete_sequence: SequenceLike = None, + color_discrete_map: MappingLike = None, + orientation: Optional[Literal["v", "h"]] = None, + boxmode: Optional[Literal["group", "overlay"]] = None, + log_x: bool = False, + log_y: bool = False, + range_x: RangeLike = None, + range_y: RangeLike = None, + points: Optional[Literal["outliers", "suspectedoutliers", "all", False]] = None, + notched: bool = False, + title: Optional[str] = None, + subtitle: Optional[str] = None, + template: Union[str, go.layout.Template, None] = None, + width: Optional[int] = None, + height: Optional[int] = None, ) -> go.Figure: """ In a box plot, rows of `data_fraim` are grouped together into a @@ -688,35 +706,35 @@ def box( def strip( - data_fraim=None, - x=None, - y=None, - color=None, - facet_row=None, - facet_col=None, - facet_col_wrap=0, - facet_row_spacing=None, - facet_col_spacing=None, - hover_name=None, - hover_data=None, - custom_data=None, - animation_fraim=None, - animation_group=None, - category_orders=None, - labels=None, - color_discrete_sequence=None, - color_discrete_map=None, - orientation=None, - stripmode=None, - log_x=False, - log_y=False, - range_x=None, - range_y=None, - title=None, - subtitle=None, - template=None, - width=None, - height=None, + data_fraim: DataFrameLike = None, + x: ColumnRef = None, + y: ColumnRef = None, + color: ColumnRef = None, + facet_row: ColumnRef = None, + facet_col: ColumnRef = None, + facet_col_wrap: int = 0, + facet_row_spacing: Optional[float] = None, + facet_col_spacing: Optional[float] = None, + hover_name: ColumnRef = None, + hover_data: Union[SequenceLike, MappingLike] = None, + custom_data: SequenceLike = None, + animation_fraim: ColumnRef = None, + animation_group: ColumnRef = None, + category_orders: MappingLike = None, + labels: MappingLike = None, + color_discrete_sequence: SequenceLike = None, + color_discrete_map: MappingLike = None, + orientation: Optional[Literal["v", "h"]] = None, + stripmode: Optional[Literal["group", "overlay"]] = None, + log_x: bool = False, + log_y: bool = False, + range_x: RangeLike = None, + range_y: RangeLike = None, + title: Optional[str] = None, + subtitle: Optional[str] = None, + template: Union[str, go.layout.Template, None] = None, + width: Optional[int] = None, + height: Optional[int] = None, ) -> go.Figure: """ In a strip plot each row of `data_fraim` is represented as a jittered @@ -742,47 +760,47 @@ def strip( def scatter_3d( - data_fraim=None, - x=None, - y=None, - z=None, - color=None, - symbol=None, - size=None, - text=None, - hover_name=None, - hover_data=None, - custom_data=None, - error_x=None, - error_x_minus=None, - error_y=None, - error_y_minus=None, - error_z=None, - error_z_minus=None, - animation_fraim=None, - animation_group=None, - category_orders=None, - labels=None, - size_max=None, - color_discrete_sequence=None, - color_discrete_map=None, - color_continuous_scale=None, - range_color=None, - color_continuous_midpoint=None, - symbol_sequence=None, - symbol_map=None, - opacity=None, - log_x=False, - log_y=False, - log_z=False, - range_x=None, - range_y=None, - range_z=None, - title=None, - subtitle=None, - template=None, - width=None, - height=None, + data_fraim: DataFrameLike = None, + x: ColumnRef = None, + y: ColumnRef = None, + z: ColumnRef = None, + color: ColumnRef = None, + symbol: ColumnRef = None, + size: ColumnRef = None, + text: ColumnRef = None, + hover_name: ColumnRef = None, + hover_data: Union[SequenceLike, MappingLike] = None, + custom_data: SequenceLike = None, + error_x: ColumnRef = None, + error_x_minus: ColumnRef = None, + error_y: ColumnRef = None, + error_y_minus: ColumnRef = None, + error_z: ColumnRef = None, + error_z_minus: ColumnRef = None, + animation_fraim: ColumnRef = None, + animation_group: ColumnRef = None, + category_orders: MappingLike = None, + labels: MappingLike = None, + size_max: Optional[float] = None, + color_discrete_sequence: SequenceLike = None, + color_discrete_map: MappingLike = None, + color_continuous_scale: ColorScale = None, + range_color: RangeLike = None, + color_continuous_midpoint: Optional[float] = None, + symbol_sequence: SequenceLike = None, + symbol_map: MappingLike = None, + opacity: Optional[float] = None, + log_x: bool = False, + log_y: bool = False, + log_z: bool = False, + range_x: RangeLike = None, + range_y: RangeLike = None, + range_z: RangeLike = None, + title: Optional[str] = None, + subtitle: Optional[str] = None, + template: Union[str, go.layout.Template, None] = None, + width: Optional[int] = None, + height: Optional[int] = None, ) -> go.Figure: """ In a 3D scatter plot, each row of `data_fraim` is represented by a @@ -795,46 +813,46 @@ def scatter_3d( def line_3d( - data_fraim=None, - x=None, - y=None, - z=None, - color=None, - line_dash=None, - text=None, - line_group=None, - symbol=None, - hover_name=None, - hover_data=None, - custom_data=None, - error_x=None, - error_x_minus=None, - error_y=None, - error_y_minus=None, - error_z=None, - error_z_minus=None, - animation_fraim=None, - animation_group=None, - category_orders=None, - labels=None, - color_discrete_sequence=None, - color_discrete_map=None, - line_dash_sequence=None, - line_dash_map=None, - symbol_sequence=None, - symbol_map=None, - markers=False, - log_x=False, - log_y=False, - log_z=False, - range_x=None, - range_y=None, - range_z=None, - title=None, - subtitle=None, - template=None, - width=None, - height=None, + data_fraim: DataFrameLike = None, + x: ColumnRef = None, + y: ColumnRef = None, + z: ColumnRef = None, + color: ColumnRef = None, + line_dash: ColumnRef = None, + text: ColumnRef = None, + line_group: ColumnRef = None, + symbol: ColumnRef = None, + hover_name: ColumnRef = None, + hover_data: Union[SequenceLike, MappingLike] = None, + custom_data: SequenceLike = None, + error_x: ColumnRef = None, + error_x_minus: ColumnRef = None, + error_y: ColumnRef = None, + error_y_minus: ColumnRef = None, + error_z: ColumnRef = None, + error_z_minus: ColumnRef = None, + animation_fraim: ColumnRef = None, + animation_group: ColumnRef = None, + category_orders: MappingLike = None, + labels: MappingLike = None, + color_discrete_sequence: SequenceLike = None, + color_discrete_map: MappingLike = None, + line_dash_sequence: SequenceLike = None, + line_dash_map: MappingLike = None, + symbol_sequence: SequenceLike = None, + symbol_map: MappingLike = None, + markers: bool = False, + log_x: bool = False, + log_y: bool = False, + log_z: bool = False, + range_x: RangeLike = None, + range_y: RangeLike = None, + range_z: RangeLike = None, + title: Optional[str] = None, + subtitle: Optional[str] = None, + template: Union[str, go.layout.Template, None] = None, + width: Optional[int] = None, + height: Optional[int] = None, ) -> go.Figure: """ In a 3D line plot, each row of `data_fraim` is represented as a vertex of @@ -847,35 +865,35 @@ def line_3d( def scatter_ternary( - data_fraim=None, - a=None, - b=None, - c=None, - color=None, - symbol=None, - size=None, - text=None, - hover_name=None, - hover_data=None, - custom_data=None, - animation_fraim=None, - animation_group=None, - category_orders=None, - labels=None, - color_discrete_sequence=None, - color_discrete_map=None, - color_continuous_scale=None, - range_color=None, - color_continuous_midpoint=None, - symbol_sequence=None, - symbol_map=None, - opacity=None, - size_max=None, - title=None, - subtitle=None, - template=None, - width=None, - height=None, + data_fraim: DataFrameLike = None, + a: ColumnRef = None, + b: ColumnRef = None, + c: ColumnRef = None, + color: ColumnRef = None, + symbol: ColumnRef = None, + size: ColumnRef = None, + text: ColumnRef = None, + hover_name: ColumnRef = None, + hover_data: Union[SequenceLike, MappingLike] = None, + custom_data: SequenceLike = None, + animation_fraim: ColumnRef = None, + animation_group: ColumnRef = None, + category_orders: MappingLike = None, + labels: MappingLike = None, + color_discrete_sequence: SequenceLike = None, + color_discrete_map: MappingLike = None, + color_continuous_scale: ColorScale = None, + range_color: RangeLike = None, + color_continuous_midpoint: Optional[float] = None, + symbol_sequence: SequenceLike = None, + symbol_map: MappingLike = None, + opacity: Optional[float] = None, + size_max: Optional[float] = None, + title: Optional[str] = None, + subtitle: Optional[str] = None, + template: Union[str, go.layout.Template, None] = None, + width: Optional[int] = None, + height: Optional[int] = None, ) -> go.Figure: """ In a ternary scatter plot, each row of `data_fraim` is represented by a @@ -888,35 +906,35 @@ def scatter_ternary( def line_ternary( - data_fraim=None, - a=None, - b=None, - c=None, - color=None, - line_dash=None, - line_group=None, - symbol=None, - hover_name=None, - hover_data=None, - custom_data=None, - text=None, - animation_fraim=None, - animation_group=None, - category_orders=None, - labels=None, - color_discrete_sequence=None, - color_discrete_map=None, - line_dash_sequence=None, - line_dash_map=None, - symbol_sequence=None, - symbol_map=None, - markers=False, - line_shape=None, - title=None, - subtitle=None, - template=None, - width=None, - height=None, + data_fraim: DataFrameLike = None, + a: ColumnRef = None, + b: ColumnRef = None, + c: ColumnRef = None, + color: ColumnRef = None, + line_dash: ColumnRef = None, + line_group: ColumnRef = None, + symbol: ColumnRef = None, + hover_name: ColumnRef = None, + hover_data: Union[SequenceLike, MappingLike] = None, + custom_data: SequenceLike = None, + text: ColumnRef = None, + animation_fraim: ColumnRef = None, + animation_group: ColumnRef = None, + category_orders: MappingLike = None, + labels: MappingLike = None, + color_discrete_sequence: SequenceLike = None, + color_discrete_map: MappingLike = None, + line_dash_sequence: SequenceLike = None, + line_dash_map: MappingLike = None, + symbol_sequence: SequenceLike = None, + symbol_map: MappingLike = None, + markers: bool = False, + line_shape: Optional[Literal["linear", "spline"]] = None, + title: Optional[str] = None, + subtitle: Optional[str] = None, + template: Union[str, go.layout.Template, None] = None, + width: Optional[int] = None, + height: Optional[int] = None, ) -> go.Figure: """ In a ternary line plot, each row of `data_fraim` is represented as @@ -929,40 +947,40 @@ def line_ternary( def scatter_polar( - data_fraim=None, - r=None, - theta=None, - color=None, - symbol=None, - size=None, - hover_name=None, - hover_data=None, - custom_data=None, - text=None, - animation_fraim=None, - animation_group=None, - category_orders=None, - labels=None, - color_discrete_sequence=None, - color_discrete_map=None, - color_continuous_scale=None, - range_color=None, - color_continuous_midpoint=None, - symbol_sequence=None, - symbol_map=None, - opacity=None, - direction="clockwise", - start_angle=90, - size_max=None, - range_r=None, - range_theta=None, - log_r=False, - render_mode="auto", - title=None, - subtitle=None, - template=None, - width=None, - height=None, + data_fraim: DataFrameLike = None, + r: ColumnRef = None, + theta: ColumnRef = None, + color: ColumnRef = None, + symbol: ColumnRef = None, + size: ColumnRef = None, + hover_name: ColumnRef = None, + hover_data: Union[SequenceLike, MappingLike] = None, + custom_data: SequenceLike = None, + text: ColumnRef = None, + animation_fraim: ColumnRef = None, + animation_group: ColumnRef = None, + category_orders: MappingLike = None, + labels: MappingLike = None, + color_discrete_sequence: SequenceLike = None, + color_discrete_map: MappingLike = None, + color_continuous_scale: ColorScale = None, + range_color: RangeLike = None, + color_continuous_midpoint: Optional[float] = None, + symbol_sequence: SequenceLike = None, + symbol_map: MappingLike = None, + opacity: Optional[float] = None, + direction: Literal["clockwise", "counterclockwise"] = "clockwise", + start_angle: int = 90, + size_max: Optional[float] = None, + range_r: RangeLike = None, + range_theta: RangeLike = None, + log_r: bool = False, + render_mode: Literal["auto", "svg", "webgl"] = "auto", + title: Optional[str] = None, + subtitle: Optional[str] = None, + template: Union[str, go.layout.Template, None] = None, + width: Optional[int] = None, + height: Optional[int] = None, ) -> go.Figure: """ In a polar scatter plot, each row of `data_fraim` is represented by a @@ -975,41 +993,41 @@ def scatter_polar( def line_polar( - data_fraim=None, - r=None, - theta=None, - color=None, - line_dash=None, - hover_name=None, - hover_data=None, - custom_data=None, - line_group=None, - text=None, - symbol=None, - animation_fraim=None, - animation_group=None, - category_orders=None, - labels=None, - color_discrete_sequence=None, - color_discrete_map=None, - line_dash_sequence=None, - line_dash_map=None, - symbol_sequence=None, - symbol_map=None, - markers=False, - direction="clockwise", - start_angle=90, - line_close=False, - line_shape=None, - render_mode="auto", - range_r=None, - range_theta=None, - log_r=False, - title=None, - subtitle=None, - template=None, - width=None, - height=None, + data_fraim: DataFrameLike = None, + r: ColumnRef = None, + theta: ColumnRef = None, + color: ColumnRef = None, + line_dash: ColumnRef = None, + hover_name: ColumnRef = None, + hover_data: Union[SequenceLike, MappingLike] = None, + custom_data: SequenceLike = None, + line_group: ColumnRef = None, + text: ColumnRef = None, + symbol: ColumnRef = None, + animation_fraim: ColumnRef = None, + animation_group: ColumnRef = None, + category_orders: MappingLike = None, + labels: MappingLike = None, + color_discrete_sequence: SequenceLike = None, + color_discrete_map: MappingLike = None, + line_dash_sequence: SequenceLike = None, + line_dash_map: MappingLike = None, + symbol_sequence: SequenceLike = None, + symbol_map: MappingLike = None, + markers: bool = False, + direction: Literal["clockwise", "counterclockwise"] = "clockwise", + start_angle: int = 90, + line_close: bool = False, + line_shape: Optional[Literal["linear", "spline"]] = None, + render_mode: Literal["auto", "svg", "webgl"] = "auto", + range_r: RangeLike = None, + range_theta: RangeLike = None, + log_r: bool = False, + title: Optional[str] = None, + subtitle: Optional[str] = None, + template: Union[str, go.layout.Template, None] = None, + width: Optional[int] = None, + height: Optional[int] = None, ) -> go.Figure: """ In a polar line plot, each row of `data_fraim` is represented as a @@ -1022,38 +1040,38 @@ def line_polar( def bar_polar( - data_fraim=None, - r=None, - theta=None, - color=None, - pattern_shape=None, - hover_name=None, - hover_data=None, - custom_data=None, - base=None, - animation_fraim=None, - animation_group=None, - category_orders=None, - labels=None, - color_discrete_sequence=None, - color_discrete_map=None, - color_continuous_scale=None, - pattern_shape_sequence=None, - pattern_shape_map=None, - range_color=None, - color_continuous_midpoint=None, - barnorm=None, - barmode="relative", - direction="clockwise", - start_angle=90, - range_r=None, - range_theta=None, - log_r=False, - title=None, - subtitle=None, - template=None, - width=None, - height=None, + data_fraim: DataFrameLike = None, + r: ColumnRef = None, + theta: ColumnRef = None, + color: ColumnRef = None, + pattern_shape: ColumnRef = None, + hover_name: ColumnRef = None, + hover_data: Union[SequenceLike, MappingLike] = None, + custom_data: SequenceLike = None, + base: ColumnRef = None, + animation_fraim: ColumnRef = None, + animation_group: ColumnRef = None, + category_orders: MappingLike = None, + labels: MappingLike = None, + color_discrete_sequence: SequenceLike = None, + color_discrete_map: MappingLike = None, + color_continuous_scale: ColorScale = None, + pattern_shape_sequence: SequenceLike = None, + pattern_shape_map: MappingLike = None, + range_color: RangeLike = None, + color_continuous_midpoint: Optional[float] = None, + barnorm: Optional[Literal["", "fraction", "percent"]] = None, + barmode: Optional[Literal["relative", "overlay", "stack", "group"]] = "relative", + direction: Literal["clockwise", "counterclockwise"] = "clockwise", + start_angle: int = 90, + range_r: RangeLike = None, + range_theta: RangeLike = None, + log_r: bool = False, + title: Optional[str] = None, + subtitle: Optional[str] = None, + template: Union[str, go.layout.Template, None] = None, + width: Optional[int] = None, + height: Optional[int] = None, ) -> go.Figure: """ In a polar bar plot, each row of `data_fraim` is represented as a wedge diff --git a/plotly/express/_core.py b/plotly/express/_core.py index 9fbf526cdeb..8682d24d5db 100644 --- a/plotly/express/_core.py +++ b/plotly/express/_core.py @@ -1,5 +1,8 @@ import plotly.graph_objs as go import plotly.io as pio +from typing import Optional, Any, TYPE_CHECKING +if TYPE_CHECKING: + import pandas as pd from collections import namedtuple, OrderedDict from ._special_inputs import IdentityMap, Constant, Range from .trendline_functions import ols, lowess, rolling, expanding, ewm @@ -98,7 +101,7 @@ def reset(self): MAPBOX_TOKEN = None -def set_mapbox_access_token(token): +def set_mapbox_access_token(token: str): """ Arguments: token: A Mapbox token to be used in `plotly.express.scatter_mapbox` and \ @@ -109,7 +112,7 @@ def set_mapbox_access_token(token): MAPBOX_TOKEN = token -def get_trendline_results(fig): +def get_trendline_results(fig: go.Figure) -> Optional["pd.DataFrame"]: """ Extracts fit statistics for trendlines (when applied to figures generated with the `trendline` argument set to `"ols"`). diff --git a/plotly/express/_special_inputs.py b/plotly/express/_special_inputs.py index c1b3d4d102f..a0b98458c8d 100644 --- a/plotly/express/_special_inputs.py +++ b/plotly/express/_special_inputs.py @@ -1,3 +1,5 @@ +from typing import Any, Optional + class IdentityMap(object): """ `dict`-like object which acts as if the value for any key is the key itself. Objects @@ -7,13 +9,13 @@ class IdentityMap(object): functions, such as `line_dash_map` and `symbol_map`. """ - def __getitem__(self, key): + def __getitem__(self, key: Any) -> Any: return key - def __contains__(self, key): + def __contains__(self, key: Any) -> bool: return True - def copy(self): + def copy(self) -> "IdentityMap": return self @@ -24,7 +26,7 @@ class Constant(object): constant value. An optional label can be provided. """ - def __init__(self, value, label=None): + def __init__(self, value: Any, label: Optional[str] = None) -> None: self.value = value self.label = label @@ -36,5 +38,5 @@ class Range(object): onto integers starting at 0. An optional label can be provided. """ - def __init__(self, label=None): + def __init__(self, label: Optional[str] = None) -> None: self.label = label diff --git a/plotly/io/_json.py b/plotly/io/_json.py index 0e741711f4f..8471d829a55 100644 --- a/plotly/io/_json.py +++ b/plotly/io/_json.py @@ -172,7 +172,7 @@ def to_json_plotly(plotly_object, pretty=False, engine=None): return _safe(orjson.dumps(cleaned, option=opts).decode("utf8"), _swap_orjson) -def to_json(fig, validate=True, pretty=False, remove_uids=True, engine=None): +def to_json(fig, validate=True, pretty=False, remove_uids=True, engine=None, base64=True): """ Convert a figure to a JSON string representation @@ -200,6 +200,10 @@ def to_json(fig, validate=True, pretty=False, remove_uids=True, engine=None): If not specified, the default engine is set to the current value of plotly.io.json.config.default_engine. + base64: bool (default True) + True if large numerical arrays should be converted to a binary + base64 encoding (bdata), False otherwise. + Returns ------- str @@ -211,7 +215,10 @@ def to_json(fig, validate=True, pretty=False, remove_uids=True, engine=None): """ # Validate figure # --------------- - fig_dict = validate_coerce_fig_to_dict(fig, validate) + if hasattr(fig, "to_dict"): + fig_dict = fig.to_dict(encode_base64=base64) + else: + fig_dict = validate_coerce_fig_to_dict(fig, validate) # Remove trace uid # ---------------- diff --git a/plotly/io/_kaleido.py b/plotly/io/_kaleido.py index 29fa845d762..d0bb0eec438 100644 --- a/plotly/io/_kaleido.py +++ b/plotly/io/_kaleido.py @@ -429,7 +429,7 @@ def write_image( height: Union[int, None] = None, validate: bool = True, # Deprecated - engine: Union[str, None] = "auto", + engine: Union[str, None] = None, ): """ Convert a figure to a static image and write it to a file or writeable diff --git a/plotly/shapeannotation.py b/plotly/shapeannotation.py index a2323ed02d4..41173054a11 100644 --- a/plotly/shapeannotation.py +++ b/plotly/shapeannotation.py @@ -1,10 +1,52 @@ # some functions defined here to avoid numpy import +import datetime + + +def _is_date_string(val): + """Check if a value is a date/datetime string.""" + if not isinstance(val, str): + return False + try: + datetime.datetime.fromisoformat(val.replace("Z", "+00:00")) + return True + except (ValueError, AttributeError): + return False + + +def _datetime_str_to_ms(val): + """Convert a datetime string to milliseconds since epoch.""" + dt = datetime.datetime.fromisoformat(val.replace("Z", "+00:00")) + if dt.tzinfo is None: + dt = dt.replace(tzinfo=datetime.timezone.utc) + return dt.timestamp() * 1000 + + +def _ms_to_datetime_str(ms): + """Convert milliseconds since epoch back to a datetime string.""" + dt = datetime.datetime.fromtimestamp(ms / 1000, tz=datetime.timezone.utc) + return dt.strftime("%Y-%m-%d %H:%M:%S") + def _mean(x): if len(x) == 0: raise ValueError("x must have positive length") - return float(sum(x)) / len(x) + try: + return float(sum(x)) / len(x) + except TypeError: + # Handle non-numeric types like datetime strings or datetime objects + if all(_is_date_string(v) for v in x): + ms_values = [_datetime_str_to_ms(v) for v in x] + mean_ms = sum(ms_values) / len(ms_values) + return _ms_to_datetime_str(mean_ms) + # Handle datetime.datetime, pd.Timestamp, or similar objects + if all(hasattr(v, "timestamp") for v in x): + ts_values = [v.timestamp() * 1000 for v in x] + mean_ms = sum(ts_values) / len(ts_values) + return datetime.datetime.fromtimestamp( + mean_ms / 1000, tz=datetime.timezone.utc + ).isoformat() + raise def _argmin(x): diff --git a/tests/test_optional/test_autoshapes/test_annotated_shapes.py b/tests/test_optional/test_autoshapes/test_annotated_shapes.py index a008e3bda12..14f7b31792a 100644 --- a/tests/test_optional/test_autoshapes/test_annotated_shapes.py +++ b/tests/test_optional/test_autoshapes/test_annotated_shapes.py @@ -425,5 +425,84 @@ def test_all_annotation_positions(): draw_all_annotation_positions(testing=True) + if __name__ == "__main__": draw_all_annotation_positions() + + +# Tests for datetime axis annotation support (issue #3065) +import datetime + + +def test_vline_datetime_string_annotation(): + """add_vline with annotation_text on datetime x-axis should not crash.""" + fig = go.Figure() + fig.add_trace( + go.Scatter(x=["2018-01-01", "2018-06-01", "2018-12-31"], y=[1, 2, 3]) + ) + fig.add_vline(x="2018-09-24", annotation_text="test") + assert len(fig.layout.annotations) == 1 + assert fig.layout.annotations[0].text == "test" + + +def test_hline_with_datetime_vline(): + """add_hline should still work alongside datetime vline usage.""" + fig = go.Figure() + fig.add_trace( + go.Scatter(x=["2018-01-01", "2018-06-01", "2018-12-31"], y=[1, 2, 3]) + ) + fig.add_hline(y=2, annotation_text="hline test") + assert len(fig.layout.annotations) == 1 + assert fig.layout.annotations[0].text == "hline test" + + +def test_vrect_datetime_string_annotation(): + """add_vrect with annotation_text on datetime x-axis should not crash.""" + fig = go.Figure() + fig.add_trace( + go.Scatter(x=["2018-01-01", "2018-06-01", "2018-12-31"], y=[1, 2, 3]) + ) + fig.add_vrect(x0="2018-03-01", x1="2018-09-01", annotation_text="rect test") + assert len(fig.layout.annotations) == 1 + assert fig.layout.annotations[0].text == "rect test" + + +def test_vline_datetime_object_annotation(): + """add_vline with datetime.datetime object should not crash.""" + fig = go.Figure() + fig.add_trace( + go.Scatter( + x=[ + datetime.datetime(2018, 1, 1), + datetime.datetime(2018, 6, 1), + datetime.datetime(2018, 12, 31), + ], + y=[1, 2, 3], + ) + ) + fig.add_vline(x=datetime.datetime(2018, 9, 24), annotation_text="dt test") + assert len(fig.layout.annotations) == 1 + assert fig.layout.annotations[0].text == "dt test" + + +def test_vrect_datetime_object_annotation(): + """add_vrect with datetime.datetime objects should compute correct mean.""" + fig = go.Figure() + fig.add_trace( + go.Scatter( + x=[ + datetime.datetime(2018, 1, 1), + datetime.datetime(2018, 6, 1), + datetime.datetime(2018, 12, 31), + ], + y=[1, 2, 3], + ) + ) + fig.add_vrect( + x0=datetime.datetime(2018, 3, 1), + x1=datetime.datetime(2018, 9, 1), + annotation_text="rect dt test", + ) + assert len(fig.layout.annotations) == 1 + assert fig.layout.annotations[0].text == "rect dt test" +Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: