Skip to content

Commit

Permalink
delta-delta and mini meta addition to horizontal plots
Browse files Browse the repository at this point in the history
  • Loading branch information
JAnns98 committed Sep 28, 2024
1 parent 2f72fc0 commit f893736
Show file tree
Hide file tree
Showing 6 changed files with 154 additions and 92 deletions.
23 changes: 6 additions & 17 deletions dabest/misc_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -696,7 +696,7 @@ def set_xaxis_ticks_and_lims(show_delta2, show_mini_meta, rawdata_axes, contrast
contrast_axes.set_yticks(rawdata_axes.get_yticks())
else:
temp = rawdata_axes.get_yticks()
temp = np.append(temp, [max(temp) + 1, max(temp) + 2])
temp = np.append(temp, [max(temp) + 0, max(temp) + 1])
contrast_axes.set_yticks(temp)

if show_pairs:
Expand All @@ -707,24 +707,13 @@ def set_xaxis_ticks_and_lims(show_delta2, show_mini_meta, rawdata_axes, contrast
# Increase the xlim of raw data by 2
temp = rawdata_axes.get_ylim()
if show_pairs:
rawdata_axes.set_ylim(temp[0], temp[1] + 0.25)
rawdata_axes.set_ylim(temp[0], temp[1] + 0.00)
else:
rawdata_axes.set_ylim(temp[0], temp[1] + 2)
rawdata_axes.set_ylim(temp[0], temp[1] + 1)
contrast_axes.set_ylim(rawdata_axes.get_ylim())
else:
contrast_axes.set_ylim(rawdata_axes.get_ylim())

# Properly label the contrast ticks.
# for t in ticks_to_skip:
# contrast_xtick_labels.insert(t, "")

# if plot_kwargs["fontsize_contrastxlabel"] is not None:
# fontsize_contrastxlabel = plot_kwargs["fontsize_contrastxlabel"]

# contrast_axes.set_yticklabels(
# contrast_xtick_labels, fontsize=fontsize_contrastxlabel
# )

else:
if show_delta2 is False and show_mini_meta is False:
contrast_axes.set_xticks(rawdata_axes.get_xticks())
Expand Down Expand Up @@ -1178,7 +1167,7 @@ def Cumming_Plot_Aesthetic_Adjustments(plot_kwargs, show_delta2, effect_size_typ

def General_Plot_Aesthetic_Adjustments(show_delta2, show_mini_meta, contrast_axes, redraw_axes_kwargs, plot_kwargs,
yvar, effect_size_type, proportional, effectsize_df, is_paired, float_contrast,
rawdata_axes, og_ylim_raw, effect_size, horizontal=False):
rawdata_axes, og_ylim_raw, effect_size, show_pairs, horizontal=False):


if (show_delta2 or show_mini_meta) and not horizontal:
Expand Down Expand Up @@ -1270,12 +1259,12 @@ def General_Plot_Aesthetic_Adjustments(show_delta2, show_mini_meta, contrast_axe
delta2_label = "delta - delta"
else:
delta2_label = "deltas' g"
raise NotImplementedError("Delta2 is not yet supported for horizontal plots.")

# Set custom ylims, if they were specified.
swarm_ylim = plot_kwargs["swarm_ylim"]
contrast_ylim = plot_kwargs["contrast_ylim"]
if not proportional:

if not proportional or (proportional and show_pairs):
if swarm_ylim is None:
swarm_ylim = rawdata_axes.get_ylim()
rawdata_axes.set_ylim(swarm_ylim[1], swarm_ylim[0])
Expand Down
90 changes: 65 additions & 25 deletions dabest/plot_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -957,10 +957,10 @@ def contrast_bars_plotter(results: object, ax_to_plot: object, swarm_plot_ax: o
ax_to_plot.add_patch(mpatches.Rectangle((0,contrast_bars_x-0.5),contrast_bars_y, 0.5, zorder=-10, color=contrast_bars_colors[contrast_bars_x], **contrast_bars_kwargs))

if show_mini_meta:
ax_to_plot.add_patch(mpatches.Rectangle((0, max(swarm_plot_ax.get_yticks())+2-0.5), mini_meta_delta.difference, 0.5, zorder=-10, color='black', **contrast_bars_kwargs))
ax_to_plot.add_patch(mpatches.Rectangle((0, max(swarm_plot_ax.get_yticks())-0.5), mini_meta_delta.difference, 0.5, zorder=-10, color='black', **contrast_bars_kwargs))

if show_delta2:
ax_to_plot.add_patch(mpatches.Rectangle((0, max(swarm_plot_ax.get_yticks())+2-0.5), delta_delta.difference, 0.5, zorder=-10, color='black', **contrast_bars_kwargs))
ax_to_plot.add_patch(mpatches.Rectangle((0, max(swarm_plot_ax.get_yticks())-0.5), delta_delta.difference, 0.5, zorder=-10, color='black', **contrast_bars_kwargs))

else:
for contrast_bars_x,contrast_bars_y in zip(ticks_to_plot, contrast_means):
Expand Down Expand Up @@ -1250,7 +1250,8 @@ def slopegraph_plotter(dabest_obj, plot_data, xvar, yvar, color_col, plot_palett

def plot_minimeta_or_deltadelta_violins(show_mini_meta, effectsize_df, ci_type, rawdata_axes,
contrast_axes, violinplot_kwargs, halfviolin_alpha, ytick_color,
es_marker_size, group_summary_kwargs, contrast_xtick_labels, effect_size
es_marker_size, group_summary_kwargs, contrast_xtick_labels, effect_size,
horizontal=False
):
if show_mini_meta:
mini_meta_delta = effectsize_df.mini_meta_delta
Expand All @@ -1272,39 +1273,73 @@ def plot_minimeta_or_deltadelta_violins(show_mini_meta, effectsize_df, ci_type,
else:
ci_low = delta_delta.pct_low
ci_high = delta_delta.pct_high
# Create the violinplot.
# New in v0.2.6: drop negative infinities before plotting.
position = max(rawdata_axes.get_xticks()) + 2
v = contrast_axes.violinplot(
data[~np.isinf(data)], positions=[position], **violinplot_kwargs
)


fc = "grey"

halfviolin(v, fill_color=fc, alpha=halfviolin_alpha)
if horizontal:
position = max(rawdata_axes.get_yticks()) + 2
violinplot_kwargs.update({'vert': False, 'widths': 1})
v = contrast_axes.violinplot(
data[~np.isinf(data)], positions=[position], **violinplot_kwargs
)
half = "bottom"
effsize_y = [position]
ci_y = [position, position]
effsize_x = difference
ci_x = [ci_low, ci_high]

else:
position = max(rawdata_axes.get_xticks()) + 2
v = contrast_axes.violinplot(
data[~np.isinf(data)], positions=[position], **violinplot_kwargs
)
half = "right"
effsize_x = [position]
ci_x = [position, position]
effsize_y = difference
ci_y = [ci_low, ci_high]

halfviolin(v, fill_color=fc, alpha=halfviolin_alpha, half=half)

# Plot the effect size.
contrast_axes.plot(
[position],
difference,
effsize_x,
effsize_y,
marker="o",
color=ytick_color,
markersize=es_marker_size,
)
# Plot the confidence interval.
contrast_axes.plot(
[position, position],
[ci_low, ci_high],
ci_x,
ci_y,
linestyle="-",
color=ytick_color,
linewidth=group_summary_kwargs["lw"],
)
if show_mini_meta:
contrast_xtick_labels.extend(["", "Weighted delta"])
elif effect_size == "delta_g":
contrast_xtick_labels.extend(["", "deltas' g"])

if horizontal:
current_yticks = rawdata_axes.get_yticks()
current_yticks = np.append(current_yticks, position)
current_ylabels = rawdata_axes.get_yticklabels()
if show_mini_meta:
current_ylabels.extend(["Weighted delta"])
elif effect_size == "delta_g":
current_ylabels.extend(["deltas' g"])
else:
current_ylabels.extend(["delta-delta"])

rawdata_axes.set_yticks(current_yticks)
rawdata_axes.set_yticklabels(current_ylabels)

else:
contrast_xtick_labels.extend(["", "delta-delta"])
if show_mini_meta:
contrast_xtick_labels.extend(["", "Weighted delta"])
elif effect_size == "delta_g":
contrast_xtick_labels.extend(["", "deltas' g"])
else:
contrast_xtick_labels.extend(["", "delta-delta"])

return contrast_xtick_labels

Expand Down Expand Up @@ -1615,12 +1650,17 @@ def table_for_horizontal_plots(effectsize_df, ax, contrast_axes, ticks_to_plot,


### Plot the text
for i,loc in zip(tab.index, ticks_to_plot):
if show_mini_meta or show_delta2:
loc_new = loc if loc != 0.25 else loc+0.25
ax.text(0.5, loc_new, "{:+.2f}".format(tab.iloc[i,0])+text_units,ha="center", va="center", color=table_text_color,size=table_font_size)
else:
ax.text(0.5, loc, "{:+.2f}".format(tab.iloc[i,0])+text_units,ha="center", va="center", color=table_text_color,size=table_font_size)
if show_mini_meta or show_delta2:
new_ticks = ticks_to_plot + [max(ticks_to_plot)+2]
else:
new_ticks = ticks_to_plot.copy()
for i,loc in zip(tab.index, new_ticks):
ax.text(0.5, loc, "{:+.2f}".format(tab.iloc[i,0])+text_units,ha="center", va="center", color=table_text_color,size=table_font_size)
# if show_mini_meta or show_delta2:
# loc_new = loc if loc != 0.25 else loc+0.25
# ax.text(0.5, loc_new, "{:+.2f}".format(tab.iloc[i,0])+text_units,ha="center", va="center", color=table_text_color,size=table_font_size)
# else:
# ax.text(0.5, loc, "{:+.2f}".format(tab.iloc[i,0])+text_units,ha="center", va="center", color=table_text_color,size=table_font_size)

# ### Plot the dashes
# if show_mini_meta or show_delta2:
Expand Down
10 changes: 6 additions & 4 deletions dabest/plotter.py
Original file line number Diff line number Diff line change
Expand Up @@ -481,6 +481,7 @@ def effectsize_df_plotter(effectsize_df, **plot_kwargs):
rawdata_axes=rawdata_axes,
og_ylim_raw=og_ylim_raw,
effect_size=effect_size,
show_pairs=show_pairs,
)

################################################### GRIDKEY WIP
Expand Down Expand Up @@ -657,6 +658,7 @@ def effectsize_df_plotter_horizontal(effectsize_df, **plot_kwargs):
effectsize_df=effectsize_df,
plot_kwargs=plot_kwargs
)

if plot_kwargs['horizontal']:
float_contrast = False

Expand Down Expand Up @@ -757,11 +759,9 @@ def effectsize_df_plotter_horizontal(effectsize_df, **plot_kwargs):
rawdata_axes.set_yticks(np.arange(0, len(temp_all_plot_groups)))
rawdata_axes.set_yticklabels(temp_all_plot_groups)

# rawdata_axes.set_yticklabels(temp_all_plot_groups[::-1])

else:
# Plot the raw data as a set of Sankey Diagrams aligned like barplot.
raise NotImplementedError("Sankey Diagrams for horizontal plots are not implemented yet.")
# raise NotImplementedError("Sankey Diagrams for horizontal plots are not implemented yet.")
sankey_control_group, sankey_test_group = sankeydiag(
plot_data,
xvar=xvar,
Expand Down Expand Up @@ -949,7 +949,8 @@ def effectsize_df_plotter_horizontal(effectsize_df, **plot_kwargs):
es_marker_size=es_marker_size,
group_summary_kwargs=group_summary_kwargs,
contrast_xtick_labels=contrast_xtick_labels,
effect_size=effect_size
effect_size=effect_size,
horizontal=True
)


Expand Down Expand Up @@ -1035,6 +1036,7 @@ def effectsize_df_plotter_horizontal(effectsize_df, **plot_kwargs):
rawdata_axes=rawdata_axes,
og_ylim_raw=og_xlim_raw if plot_kwargs['horizontal'] else og_ylim_raw,
effect_size=effect_size,
show_pairs=show_pairs,
horizontal=True,
)

Expand Down
23 changes: 6 additions & 17 deletions nbs/API/misc_tools.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -751,7 +751,7 @@
" contrast_axes.set_yticks(rawdata_axes.get_yticks())\n",
" else:\n",
" temp = rawdata_axes.get_yticks()\n",
" temp = np.append(temp, [max(temp) + 1, max(temp) + 2])\n",
" temp = np.append(temp, [max(temp) + 0, max(temp) + 1])\n",
" contrast_axes.set_yticks(temp) \n",
"\n",
" if show_pairs:\n",
Expand All @@ -762,24 +762,13 @@
" # Increase the xlim of raw data by 2\n",
" temp = rawdata_axes.get_ylim()\n",
" if show_pairs:\n",
" rawdata_axes.set_ylim(temp[0], temp[1] + 0.25)\n",
" rawdata_axes.set_ylim(temp[0], temp[1] + 0.00)\n",
" else:\n",
" rawdata_axes.set_ylim(temp[0], temp[1] + 2)\n",
" rawdata_axes.set_ylim(temp[0], temp[1] + 1)\n",
" contrast_axes.set_ylim(rawdata_axes.get_ylim())\n",
" else:\n",
" contrast_axes.set_ylim(rawdata_axes.get_ylim())\n",
"\n",
" # Properly label the contrast ticks.\n",
" # for t in ticks_to_skip:\n",
" # contrast_xtick_labels.insert(t, \"\")\n",
"\n",
" # if plot_kwargs[\"fontsize_contrastxlabel\"] is not None:\n",
" # fontsize_contrastxlabel = plot_kwargs[\"fontsize_contrastxlabel\"]\n",
"\n",
" # contrast_axes.set_yticklabels(\n",
" # contrast_xtick_labels, fontsize=fontsize_contrastxlabel\n",
" # )\n",
"\n",
" else:\n",
" if show_delta2 is False and show_mini_meta is False:\n",
" contrast_axes.set_xticks(rawdata_axes.get_xticks())\n",
Expand Down Expand Up @@ -1233,7 +1222,7 @@
"\n",
"def General_Plot_Aesthetic_Adjustments(show_delta2, show_mini_meta, contrast_axes, redraw_axes_kwargs, plot_kwargs,\n",
" yvar, effect_size_type, proportional, effectsize_df, is_paired, float_contrast,\n",
" rawdata_axes, og_ylim_raw, effect_size, horizontal=False):\n",
" rawdata_axes, og_ylim_raw, effect_size, show_pairs, horizontal=False):\n",
"\n",
"\n",
" if (show_delta2 or show_mini_meta) and not horizontal:\n",
Expand Down Expand Up @@ -1325,12 +1314,12 @@
" delta2_label = \"delta - delta\"\n",
" else:\n",
" delta2_label = \"deltas' g\"\n",
" raise NotImplementedError(\"Delta2 is not yet supported for horizontal plots.\")\n",
" \n",
" # Set custom ylims, if they were specified.\n",
" swarm_ylim = plot_kwargs[\"swarm_ylim\"]\n",
" contrast_ylim = plot_kwargs[\"contrast_ylim\"]\n",
" if not proportional:\n",
"\n",
" if not proportional or (proportional and show_pairs):\n",
" if swarm_ylim is None:\n",
" swarm_ylim = rawdata_axes.get_ylim()\n",
" rawdata_axes.set_ylim(swarm_ylim[1], swarm_ylim[0])\n",
Expand Down
Loading

0 comments on commit f893736

Please sign in to comment.