@@ -1469,11 +1469,7 @@ def build_dataframe(args, constructor):
14691469
14701470 if hist1d_orientation :
14711471 args ["x" if orient_v else "y" ] = value_name
1472- if wide_cross_name is None and constructor == go .Scatter :
1473- args ["y" if orient_v else "x" ] = count_name
1474- df_output [count_name ] = 1
1475- else :
1476- args ["y" if orient_v else "x" ] = wide_cross_name
1472+ args ["y" if orient_v else "x" ] = wide_cross_name
14771473 args ["color" ] = args ["color" ] or var_name
14781474 elif constructor in [go .Scatter , go .Funnel ] + hist2d_types :
14791475 args ["x" if orient_v else "y" ] = wide_cross_name
@@ -1495,6 +1491,21 @@ def build_dataframe(args, constructor):
14951491 elif constructor in [go .Violin , go .Box ]:
14961492 args ["x" if orient_v else "y" ] = wide_cross_name or var_name
14971493 args ["y" if orient_v else "x" ] = value_name
1494+
1495+ if hist1d_orientation and constructor == go .Scatter :
1496+ if args ["x" ] is not None and args ["y" ] is not None :
1497+ args ["histfunc" ] = "sum"
1498+ elif args ["x" ] is None :
1499+ args ["histfunc" ] = None
1500+ args ["orientation" ] = "h"
1501+ args ["x" ] = count_name
1502+ df_output [count_name ] = 1
1503+ else :
1504+ args ["histfunc" ] = None
1505+ args ["orientation" ] = "v"
1506+ args ["y" ] = count_name
1507+ df_output [count_name ] = 1
1508+
14981509 if no_color :
14991510 args ["color" ] = None
15001511 args ["data_frame" ] = df_output
@@ -1792,8 +1803,10 @@ def infer_config(args, constructor, trace_patch, layout_patch):
17921803 trace_patch ["opacity" ] = args ["opacity" ]
17931804 else :
17941805 trace_patch ["marker" ] = dict (opacity = args ["opacity" ])
1795- if "line_group" in args :
1796- trace_patch ["mode" ] = "lines" + ("+markers+text" if args ["text" ] else "" )
1806+ if "line_group" in args or "line_dash" in args :
1807+ trace_patch ["mode" ] = "lines" + (
1808+ "+markers+text" if args .get ("text" , None ) is not None else ""
1809+ )
17971810 elif constructor != go .Splom and (
17981811 "symbol" in args or constructor == go .Scattermapbox
17991812 ):
@@ -2050,7 +2063,17 @@ def make_figure(args, constructor, trace_patch=None, layout_patch=None):
20502063 base = args ["x" ] if args ["orientation" ] == "v" else args ["y" ]
20512064 var = args ["x" ] if args ["orientation" ] == "h" else args ["y" ]
20522065 group = group .sort_values (by = base )
2066+ group_sum = group [var ].sum ()
20532067 group [var ] = group [var ].cumsum ()
2068+ if args ["complementary" ]:
2069+ group [var ] = group_sum - group [var ]
2070+
2071+ if args ["norm" ] == "probability" :
2072+ group [var ] = group [var ] / group_sum
2073+ elif args ["norm" ] == "percent" :
2074+ group [var ] = 100.0 * group [var ] / group_sum
2075+ args ["histnorm" ] = args ["norm" ]
2076+ # TODO norm, including histnorm-like naming
20542077
20552078 patch , fit_results = make_trace_kwargs (
20562079 args , trace_spec , group , mapping_labels .copy (), sizeref
0 commit comments