Skip to content

Commit 9933ef8

Browse files
committed
Fix stat_sina
This regression was causes by modifying stat.params outside of stat.setup_params, which happened in #ebdfd4c. fixes #979
1 parent 9b31093 commit 9933ef8

File tree

2 files changed

+12
-15
lines changed

2 files changed

+12
-15
lines changed

plotnine/stats/binning.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def breaks_from_binwidth(
4747
binwidth: float,
4848
center: Optional[float] = None,
4949
boundary: Optional[float] = None,
50-
):
50+
) -> FloatArray:
5151
"""
5252
Calculate breaks given binwidth
5353
@@ -98,7 +98,7 @@ def breaks_from_bins(
9898
bins: int = 30,
9999
center: Optional[float] = None,
100100
boundary: Optional[float] = None,
101-
):
101+
) -> FloatArray:
102102
"""
103103
Calculate breaks given binwidth
104104

plotnine/stats/stat_sina.py

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -147,17 +147,6 @@ def compute_panel(self, data, scales):
147147
params = self.params
148148
maxwidth = params["maxwidth"]
149149
random_state = params["random_state"]
150-
fuzz = 1e-8
151-
y_dim = scales.y.dimension()
152-
y_dim_fuzzed = (y_dim[0] - fuzz, y_dim[1] + fuzz)
153-
154-
if params["binwidth"] is not None:
155-
params["bins"] = breaks_from_binwidth(
156-
y_dim_fuzzed, params["binwidth"]
157-
)
158-
else:
159-
params["bins"] = breaks_from_bins(y_dim_fuzzed, params["bins"])
160-
161150
data = super().compute_panel(data, scales)
162151

163152
if not len(data):
@@ -203,8 +192,8 @@ def compute_panel(self, data, scales):
203192
return data
204193

205194
def compute_group(self, data, scales):
195+
binwidth = self.params["binwidth"]
206196
maxwidth = self.params["maxwidth"]
207-
bins = self.params["bins"]
208197
bin_limit = self.params["bin_limit"]
209198
weight = None
210199
y = data["y"]
@@ -233,8 +222,16 @@ def compute_group(self, data, scales):
233222
data["density"] = densf(y)
234223
data["scaled"] = data["density"] / dens["density"].max()
235224
else:
225+
y_dim = scales.y.dimension()
226+
fuzz = 1e-8
227+
y_dim_fuzzed = (y_dim[0] - fuzz, y_dim[1] + fuzz)
228+
if binwidth is not None:
229+
bins = breaks_from_binwidth(y_dim_fuzzed, binwidth)
230+
else:
231+
bins = breaks_from_bins(y_dim_fuzzed, self.params["bins"])
232+
236233
# bin based estimation
237-
bin_index = pd.cut(y, bins, include_lowest=True, labels=False)
234+
bin_index = pd.cut(y, bins, include_lowest=True, labels=False) # pyright: ignore[reportCallIssue,reportArgumentType]
238235
data["density"] = (
239236
pd.Series(bin_index)
240237
.groupby(bin_index)

0 commit comments

Comments
 (0)