def test_faceted_drop(self, toy_df_facets): groupby = GroupBy(["x", "grp", "col"]) res = Dodge(empty="drop")(toy_df_facets, groupby, "x") assert_array_equal(res["y"], [1, 2, 3, 1, 2, 3]) assert_array_almost_equal(res["x"], [-.2, .2, 1, 0, 1, 2]) assert_array_almost_equal(res["width"], [.4] * 6)
def test_faceted_default(self, toy_df_facets): groupby = GroupBy(["x", "grp", "col"]) res = Dodge()(toy_df_facets, groupby, "x") assert_array_equal(res["y"], [1, 2, 3, 1, 2, 3]) assert_array_almost_equal(res["x"], [-.2, .2, .8, .2, .8, 2.2]) assert_array_almost_equal(res["width"], [.4] * 6)
def test_widths_drop(self, toy_df_widths): groupby = GroupBy(["x", "grp"]) res = Dodge(empty="drop")(toy_df_widths, groupby, "x") assert_array_equal(res["y"], [1, 2, 3]) assert_array_almost_equal(res["x"], [-.08, .32, 1]) assert_array_almost_equal(res["width"], [.64, .16, .2])
def test_gap(self, toy_df): groupby = GroupBy(["x", "grp"]) res = Dodge(gap=.25)(toy_df, groupby, "x") assert_array_equal(res["y"], [1, 2, 3]) assert_array_almost_equal(res["x"], [-.2, .2, 1.2]) assert_array_almost_equal(res["width"], [.3, .3, .3])
def test_drop(self, toy_df): groupby = GroupBy(["x", "grp"]) res = Dodge("drop")(toy_df, groupby, "x") assert_array_equal(res["y"], [1, 2, 3]) assert_array_almost_equal(res["x"], [-.2, .2, 1]) assert_array_almost_equal(res["width"], [.4, .4, .4])
def test_fill(self, toy_df): groupby = GroupBy(["x", "grp"]) res = Dodge(empty="fill")(toy_df, groupby, "x") assert_array_equal(res["y"], [1, 2, 3]), assert_array_almost_equal(res["x"], [-.2, .2, 1]) assert_array_almost_equal(res["width"], [.4, .4, .8])
def test_orient(self, toy_df): df = toy_df.assign(x=toy_df["y"], y=toy_df["x"]) groupby = GroupBy(["y", "grp"]) res = Dodge("drop")(df, groupby, "y") assert_array_equal(res["x"], [1, 2, 3]) assert_array_almost_equal(res["y"], [-.2, .2, 1]) assert_array_almost_equal(res["width"], [.4, .4, .4])
def test_two_semantics(self, df): groupby = GroupBy(["x", "grp2", "grp3"]) res = Dodge()(df, groupby, "x") levels = categorical_order(df["grp2"]), categorical_order(df["grp3"]) w, n = 0.8, len(levels[0]) * len(levels[1]) shifts = np.linspace(0, w - w / n, n) shifts -= shifts.mean() assert_series_equal(res["y"], df["y"]) assert_series_equal(res["width"], df["width"] / n) for (v2, v3), shift in zip(product(*levels), shifts): rows = (df["grp2"] == v2) & (df["grp3"] == v3) assert_series_equal(res.loc[rows, "x"], df.loc[rows, "x"] + shift)
def test_single_semantic(self, df, grp): groupby = GroupBy(["x", grp]) res = Dodge()(df, groupby, "x") levels = categorical_order(df[grp]) w, n = 0.8, len(levels) shifts = np.linspace(0, w - w / n, n) shifts -= shifts.mean() assert_series_equal(res["y"], df["y"]) assert_series_equal(res["width"], df["width"] / n) for val, shift in zip(levels, shifts): rows = df[grp] == val assert_series_equal(res.loc[rows, "x"], df.loc[rows, "x"] + shift)