Skip to content

Commit

Permalink
Created a function in plot_tools to plot the contrast curve for the e…
Browse files Browse the repository at this point in the history
…xtra mini meta and delta delta
  • Loading branch information
JAnns98 committed Sep 9, 2024
1 parent af1efba commit 6f8cb0d
Show file tree
Hide file tree
Showing 5 changed files with 257 additions and 116 deletions.
2 changes: 2 additions & 0 deletions dabest/_modidx.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,8 @@
'dabest.plot_tools.get_swarm_spans': ('API/plot_tools.html#get_swarm_spans', 'dabest/plot_tools.py'),
'dabest.plot_tools.halfviolin': ('API/plot_tools.html#halfviolin', 'dabest/plot_tools.py'),
'dabest.plot_tools.normalize_dict': ('API/plot_tools.html#normalize_dict', 'dabest/plot_tools.py'),
'dabest.plot_tools.plot_minimeta_or_deltadelta_violins': ( 'API/plot_tools.html#plot_minimeta_or_deltadelta_violins',
'dabest/plot_tools.py'),
'dabest.plot_tools.sankeydiag': ('API/plot_tools.html#sankeydiag', 'dabest/plot_tools.py'),
'dabest.plot_tools.single_sankey': ('API/plot_tools.html#single_sankey', 'dabest/plot_tools.py'),
'dabest.plot_tools.slopegraph_plotter': ( 'API/plot_tools.html#slopegraph_plotter',
Expand Down
64 changes: 63 additions & 1 deletion dabest/plot_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
# %% auto 0
__all__ = ['halfviolin', 'get_swarm_spans', 'error_bar', 'check_data_matches_labels', 'normalize_dict', 'width_determine',
'single_sankey', 'sankeydiag', 'summary_bars_plotter', 'contrast_bars_plotter', 'swarm_bars_plotter',
'delta_text_plotter', 'DeltaDotsPlotter', 'slopegraph_plotter', 'swarmplot', 'SwarmPlot']
'delta_text_plotter', 'DeltaDotsPlotter', 'slopegraph_plotter', 'plot_minimeta_or_deltadelta_violins',
'swarmplot', 'SwarmPlot']

# %% ../nbs/API/plot_tools.ipynb 4
import math
Expand Down Expand Up @@ -1173,6 +1174,67 @@ def slopegraph_plotter(dabest_obj, plot_data, xvar, yvar, color_col, plot_palett

x_start = x_start + grp_count

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
):
if show_mini_meta:
mini_meta_delta = effectsize_df.mini_meta_delta
data = mini_meta_delta.bootstraps_weighted_delta
difference = mini_meta_delta.difference
if ci_type == "bca":
ci_low = mini_meta_delta.bca_low
ci_high = mini_meta_delta.bca_high
else:
ci_low = mini_meta_delta.pct_low
ci_high = mini_meta_delta.pct_high
else:
delta_delta = effectsize_df.delta_delta
data = delta_delta.bootstraps_delta_delta
difference = delta_delta.difference
if ci_type == "bca":
ci_low = delta_delta.bca_low
ci_high = delta_delta.bca_high
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)

# Plot the effect size.
contrast_axes.plot(
[position],
difference,
marker="o",
color=ytick_color,
markersize=es_marker_size,
)
# Plot the confidence interval.
contrast_axes.plot(
[position, position],
[ci_low, ci_high],
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"])
else:
contrast_xtick_labels.extend(["", "delta-delta"])

return contrast_xtick_labels
...

# %% ../nbs/API/plot_tools.ipynb 6
def swarmplot(
data: pd.DataFrame,
Expand Down
122 changes: 65 additions & 57 deletions dabest/plotter.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ def effectsize_df_plotter(effectsize_df, **plot_kwargs):
delta_text_plotter,
DeltaDotsPlotter,
slopegraph_plotter,
plot_minimeta_or_deltadelta_violins,
)
from ._stats_tools.effsize import (
_compute_standardizers,
Expand Down Expand Up @@ -440,59 +441,66 @@ def effectsize_df_plotter(effectsize_df, **plot_kwargs):

# Plot mini-meta violin
if show_mini_meta or show_delta2:
if show_mini_meta:
mini_meta_delta = effectsize_df.mini_meta_delta
data = mini_meta_delta.bootstraps_weighted_delta
difference = mini_meta_delta.difference
if ci_type == "bca":
ci_low = mini_meta_delta.bca_low
ci_high = mini_meta_delta.bca_high
else:
ci_low = mini_meta_delta.pct_low
ci_high = mini_meta_delta.pct_high
else:
delta_delta = effectsize_df.delta_delta
data = delta_delta.bootstraps_delta_delta
difference = delta_delta.difference
if ci_type == "bca":
ci_low = delta_delta.bca_low
ci_high = delta_delta.bca_high
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)

# Plot the effect size.
contrast_axes.plot(
[position],
difference,
marker="o",
color=ytick_color,
markersize=es_marker_size,
)
# Plot the confidence interval.
contrast_axes.plot(
[position, position],
[ci_low, ci_high],
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"])
else:
contrast_xtick_labels.extend(["", "delta-delta"])
contrast_xtick_labels = plot_minimeta_or_deltadelta_violins(show_mini_meta=show_mini_meta, effectsize_df=effectsize_df,
ci_type=ci_type, rawdata_axes=rawdata_axes,contrast_axes=contrast_axes,
violinplot_kwargs=violinplot_kwargs, halfviolin_alpha=halfviolin_alpha,
ytick_color=ytick_color, es_marker_size=es_marker_size, group_summary_kwargs=group_summary_kwargs,
contrast_xtick_labels=contrast_xtick_labels, effect_size=effect_size
)

# if show_mini_meta:
# mini_meta_delta = effectsize_df.mini_meta_delta
# data = mini_meta_delta.bootstraps_weighted_delta
# difference = mini_meta_delta.difference
# if ci_type == "bca":
# ci_low = mini_meta_delta.bca_low
# ci_high = mini_meta_delta.bca_high
# else:
# ci_low = mini_meta_delta.pct_low
# ci_high = mini_meta_delta.pct_high
# else:
# delta_delta = effectsize_df.delta_delta
# data = delta_delta.bootstraps_delta_delta
# difference = delta_delta.difference
# if ci_type == "bca":
# ci_low = delta_delta.bca_low
# ci_high = delta_delta.bca_high
# 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)

# # Plot the effect size.
# contrast_axes.plot(
# [position],
# difference,
# marker="o",
# color=ytick_color,
# markersize=es_marker_size,
# )
# # Plot the confidence interval.
# contrast_axes.plot(
# [position, position],
# [ci_low, ci_high],
# 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"])
# else:
# contrast_xtick_labels.extend(["", "delta-delta"])

# Make sure the contrast_axes x-lims match the rawdata_axes xlims,
# and add an extra violinplot tick for delta-delta plot.
Expand Down Expand Up @@ -1099,8 +1107,8 @@ def effectsize_df_plotter(effectsize_df, **plot_kwargs):
if contrast_bars:
contrast_bars_plotter(results=results, ax_to_plot=contrast_axes, swarm_plot_ax=rawdata_axes,ticks_to_plot=ticks_to_plot,
contrast_bars_kwargs=contrast_bars_kwargs, color_col=color_col, swarm_colors=swarm_colors, show_mini_meta=show_mini_meta,
mini_meta_delta=mini_meta_delta if show_mini_meta else None, show_delta2=show_delta2,
delta_delta=delta_delta if show_delta2 else None, proportional=proportional, is_paired=is_paired)
mini_meta_delta=effectsize_df.mini_meta_delta if show_mini_meta else None, show_delta2=show_delta2,
delta_delta=effectsize_df.delta_delta if show_delta2 else None, proportional=proportional, is_paired=is_paired)

# Summary bars WIP
summary_bars = plot_kwargs["summary_bars"]
Expand All @@ -1113,8 +1121,8 @@ def effectsize_df_plotter(effectsize_df, **plot_kwargs):
if delta_text:
delta_text_plotter(results=results, ax_to_plot=contrast_axes, swarm_plot_ax=rawdata_axes, ticks_to_plot=ticks_to_plot, delta_text_kwargs=delta_text_kwargs, color_col=color_col, swarm_colors=swarm_colors,
is_paired=is_paired,proportional=proportional, float_contrast=float_contrast, show_mini_meta=show_mini_meta,
mini_meta_delta=mini_meta_delta if show_mini_meta else None, show_delta2=show_delta2,
delta_delta=delta_delta if show_delta2 else None)
mini_meta_delta=effectsize_df.mini_meta_delta if show_mini_meta else None, show_delta2=show_delta2,
delta_delta=effectsize_df.delta_delta if show_delta2 else None)
################################################### Swarm & Contrast & Summary Bars & Delta text WIP END

# Make sure no stray ticks appear!
Expand Down
63 changes: 62 additions & 1 deletion nbs/API/plot_tools.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -1225,7 +1225,68 @@
"\n",
" rawdata_axes.plot(x_points, y_points, **slopegraph_kwargs)\n",
"\n",
" x_start = x_start + grp_count"
" x_start = x_start + grp_count\n",
"\n",
"def plot_minimeta_or_deltadelta_violins(show_mini_meta, effectsize_df, ci_type, rawdata_axes,\n",
" contrast_axes, violinplot_kwargs, halfviolin_alpha, ytick_color, \n",
" es_marker_size, group_summary_kwargs, contrast_xtick_labels, effect_size\n",
" ):\n",
" if show_mini_meta:\n",
" mini_meta_delta = effectsize_df.mini_meta_delta\n",
" data = mini_meta_delta.bootstraps_weighted_delta\n",
" difference = mini_meta_delta.difference\n",
" if ci_type == \"bca\":\n",
" ci_low = mini_meta_delta.bca_low\n",
" ci_high = mini_meta_delta.bca_high\n",
" else:\n",
" ci_low = mini_meta_delta.pct_low\n",
" ci_high = mini_meta_delta.pct_high\n",
" else:\n",
" delta_delta = effectsize_df.delta_delta\n",
" data = delta_delta.bootstraps_delta_delta\n",
" difference = delta_delta.difference\n",
" if ci_type == \"bca\":\n",
" ci_low = delta_delta.bca_low\n",
" ci_high = delta_delta.bca_high\n",
" else:\n",
" ci_low = delta_delta.pct_low\n",
" ci_high = delta_delta.pct_high\n",
" # Create the violinplot.\n",
" # New in v0.2.6: drop negative infinities before plotting.\n",
" position = max(rawdata_axes.get_xticks()) + 2\n",
" v = contrast_axes.violinplot(\n",
" data[~np.isinf(data)], positions=[position], **violinplot_kwargs\n",
" )\n",
"\n",
" fc = \"grey\"\n",
"\n",
" halfviolin(v, fill_color=fc, alpha=halfviolin_alpha)\n",
"\n",
" # Plot the effect size.\n",
" contrast_axes.plot(\n",
" [position],\n",
" difference,\n",
" marker=\"o\",\n",
" color=ytick_color,\n",
" markersize=es_marker_size,\n",
" )\n",
" # Plot the confidence interval.\n",
" contrast_axes.plot(\n",
" [position, position],\n",
" [ci_low, ci_high],\n",
" linestyle=\"-\",\n",
" color=ytick_color,\n",
" linewidth=group_summary_kwargs[\"lw\"],\n",
" )\n",
" if show_mini_meta:\n",
" contrast_xtick_labels.extend([\"\", \"Weighted delta\"])\n",
" elif effect_size == \"delta_g\":\n",
" contrast_xtick_labels.extend([\"\", \"deltas' g\"])\n",
" else:\n",
" contrast_xtick_labels.extend([\"\", \"delta-delta\"])\n",
" \n",
" return contrast_xtick_labels\n",
" ..."
]
},
{
Expand Down
Loading

0 comments on commit 6f8cb0d

Please sign in to comment.