Tutorial: Controlling Plot Aesthetics

Controlling plot aesthetics

Changing the y-axes labels.

1  two_groups_unpaired.mean_diff.plot(swarm_label="This is my\nrawdata",
2                                     contrast_label="The bootstrap\ndistribtions!");
_images/tutorial_55_0.png

Color the rawdata according to another column in the dataframe.

1  multi_2group.mean_diff.plot(color_col="Gender");
_images/tutorial_57_0.png
1  two_groups_paired_baseline.mean_diff.plot(color_col="Gender");
_images/tutorial_58_0.png

Changing the palette used with custom_palette. Any valid matplotlib or seaborn color palette is accepted.

1  multi_2group.mean_diff.plot(color_col="Gender", custom_palette="Dark2");
_images/tutorial_60_0.png
1  multi_2group.mean_diff.plot(custom_palette="Paired");
_images/tutorial_61_0.png

You can also create your own color palette. Create a dictionary where the keys are group names, and the values are valid matplotlib colors.

You can specify matplotlib colors in a variety of ways. Here, I demonstrate using named colors, hex strings (commonly used on the web), and RGB tuples.

1  my_color_palette = {"Control 1" : "blue",
2                      "Test 1"    : "purple",
3                      "Control 2" : "#cb4b16",     # This is a hex string.
4                      "Test 2"    : (0., 0.7, 0.2) # This is a RGB tuple.
5                     }
6
7  multi_2group.mean_diff.plot(custom_palette=my_color_palette);
_images/tutorial_63_0.png

By default, dabest.plot() will desaturate the color of the dots in the swarmplot by 50%. This draws attention to the effect size bootstrap curves.

You can alter the default values with the swarm_desat and halfviolin_desat keywords.

1  multi_2group.mean_diff.plot(custom_palette=my_color_palette,
2                              swarm_desat=0.75,
3                              halfviolin_desat=0.25);
_images/tutorial_65_0.png

You can also change the sizes of the dots used in the rawdata swarmplot, and those used to indicate the effect sizes.

1  multi_2group.mean_diff.plot(raw_marker_size=3,
2                              es_marker_size=12);
_images/tutorial_67_0.png

Changing the y-limits for the rawdata axes, and for the contrast axes.

1  multi_2group.mean_diff.plot(swarm_ylim=(0, 5),
2                              contrast_ylim=(-2, 2));
_images/tutorial_69_0.png

If your effect size is qualitatively inverted (ie. a smaller value is a better outcome), you can simply invert the tuple passed to contrast_ylim.

1  multi_2group.mean_diff.plot(contrast_ylim=(2, -2),
2                              contrast_label="More negative is better!");
_images/tutorial_71_0.png

The contrast axes share the same y-limits as that of the delta - delta plot and thus the y axis of the delta - delta plot changes as well.

1  paired_delta2.mean_diff.plot(contrast_ylim=(3, -3),
2                               contrast_label="More negative is better!");
_images/tutorial_112_0.png

You can also change the y-limits and y-label for the delta - delta plot.

1  paired_delta2.mean_diff.plot(delta2_ylim=(3, -3),
2                               delta2_label="More negative is better!");
_images/tutorial_111_0.png

You can add minor ticks and also change the tick frequency by accessing the axes directly.

Each estimation plot produced by dabest has 2 axes. The first one contains the rawdata swarmplot; the second one contains the bootstrap effect size differences.

 1  import matplotlib.ticker as Ticker
 2
 3  f = two_groups_unpaired.mean_diff.plot()
 4
 5  rawswarm_axes = f.axes[0]
 6  contrast_axes = f.axes[1]
 7
 8  rawswarm_axes.yaxis.set_major_locator(Ticker.MultipleLocator(1))
 9  rawswarm_axes.yaxis.set_minor_locator(Ticker.MultipleLocator(0.5))
10
11  contrast_axes.yaxis.set_major_locator(Ticker.MultipleLocator(0.5))
12  contrast_axes.yaxis.set_minor_locator(Ticker.MultipleLocator(0.25))
_images/tutorial_73_0.png
 1  f = multi_2group.mean_diff.plot(swarm_ylim=(0,6),
 2                                 contrast_ylim=(-3, 1))
 3
 4  rawswarm_axes = f.axes[0]
 5  contrast_axes = f.axes[1]
 6
 7  rawswarm_axes.yaxis.set_major_locator(Ticker.MultipleLocator(2))
 8  rawswarm_axes.yaxis.set_minor_locator(Ticker.MultipleLocator(1))
 9
10  contrast_axes.yaxis.set_major_locator(Ticker.MultipleLocator(0.5))
11  contrast_axes.yaxis.set_minor_locator(Ticker.MultipleLocator(0.25))
_images/tutorial_74_0.png

For mini-meta plots, you can hide the weighted avergae plot by setting show_mini_meta=False in the plot() function.

1  mini_meta_paired.mean_diff.plot(show_mini_meta=False)
_images/tutorial_102_0.png

Similarly, you can also hide the delta-delta plot by setting show_delta2=False in the plot() function.

1  paired_delta2.mean_diff.plot(show_delta2=False)
_images/tutorial_113_0.png

Creating estimation plots in existing axes

Implemented in v0.2.6 by Adam Nekimken.

dabest.plot has an ax keyword that accepts any Matplotlib Axes. The entire estimation plot will be created in the specified Axes.

 1  from matplotlib import pyplot as plt
 2  f, axx = plt.subplots(nrows=2, ncols=2,
 3                        figsize=(15, 15),
 4                        gridspec_kw={'wspace': 0.25} # ensure proper width-wise spacing.
 5                       )
 6
 7  two_groups_unpaired.mean_diff.plot(ax=axx.flat[0]);
 8
 9  two_groups_paired.mean_diff.plot(ax=axx.flat[1]);
10
11  multi_2group.mean_diff.plot(ax=axx.flat[2]);
12
13  multi_2group_paired.mean_diff.plot(ax=axx.flat[3]);
_images/tutorial_76_0.png

In this case, to access the individual rawdata axes, use name_of_axes to manipulate the rawdata swarmplot axes, and name_of_axes.contrast_axes to gain access to the effect size axes.

1  topleft_axes = axx.flat[0]
2  topleft_axes.set_ylabel("New y-axis label for rawdata")
3  topleft_axes.contrast_axes.set_ylabel("New y-axis label for effect size")
4
5  f
_images/tutorial_78_0.png

Applying style sheets

Implemented in v0.2.0.

dabest can apply matplotlib style sheets to estimation plots. You can refer to this gallery of style sheets for reference.

1  import matplotlib.pyplot as plt
2  plt.style.use("dark_background")
1  multi_2group.mean_diff.plot();
_images/tutorial_81_0.png