Skip to content

Commit 2c115ed

Browse files
authored
Avoid error when dodge=True, hue=None (#3605)
Fixes #3553
1 parent 1617be0 commit 2c115ed

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

seaborn/categorical.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,11 @@ def _dodge_needed(self):
392392

393393
def _dodge(self, keys, data):
394394
"""Apply a dodge transform to coordinates in place."""
395+
if "hue" not in self.variables:
396+
# Short-circuit if hue variable was not assigned
397+
# We could potentially warn when hue=None, dodge=True, user may be confused
398+
# But I think it's fine to just treat it as a no-op.
399+
return
395400
hue_idx = self._hue_map.levels.index(keys["hue"])
396401
n = len(self._hue_map.levels)
397402
data["width"] /= n

tests/test_categorical.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -999,6 +999,16 @@ def test_dodge_native_scale_log(self, long_df):
999999
widths.append(np.ptp(coords))
10001000
assert np.std(widths) == approx(0)
10011001

1002+
def test_dodge_without_hue(self, long_df):
1003+
1004+
ax = boxplot(long_df, x="a", y="y", dodge=True)
1005+
bxp, = ax.containers
1006+
levels = categorical_order(long_df["a"])
1007+
for i, level in enumerate(levels):
1008+
data = long_df.loc[long_df["a"] == level, "y"]
1009+
self.check_box(bxp[i], data, "x", i)
1010+
self.check_whiskers(bxp[i], data, "x", i)
1011+
10021012
@pytest.mark.parametrize("orient", ["x", "y"])
10031013
def test_log_data_scale(self, long_df, orient):
10041014

0 commit comments

Comments
 (0)