Skip to content

Commit 29a1e11

Browse files
committed
Edits to gridkey and code that is impacted by it (remove spines if gridkey)
1 parent 907c965 commit 29a1e11

File tree

7 files changed

+216
-183
lines changed

7 files changed

+216
-183
lines changed

dabest/misc_tools.py

Lines changed: 70 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1296,7 +1296,7 @@ def Gardner_Altman_Plot_Aesthetic_Adjustments(effect_size_type, plot_data, xvar,
12961296

12971297
def Cumming_Plot_Aesthetic_Adjustments(contrast_axes, reflines_kwargs, is_paired, show_pairs, two_col_sankey, idx, ticks_to_start_twocol_sankey,
12981298
proportional, ticks_to_skip, temp_idx, rawdata_axes, redraw_axes_kwargs, ticks_to_skip_contrast,
1299-
show_delta2, show_mini_meta, horizontal):
1299+
show_delta2, show_mini_meta, horizontal, skip_redraw_lines):
13001300

13011301
"""
13021302
Aesthetic adjustments for the Cumming plot.
@@ -1335,6 +1335,8 @@ def Cumming_Plot_Aesthetic_Adjustments(contrast_axes, reflines_kwargs, is_paired
13351335
A boolean flag to determine if the plot will have a mini-meta effect size.
13361336
horizontal : bool
13371337
A boolean flag to determine if the plot is for horizontal plotting.
1338+
skip_redraw_lines : bool
1339+
A boolean flag to skip adding spines back if True (for gridkey purposes).
13381340
"""
13391341

13401342
# If 0 lies within the ylim of the contrast axes, draw a zero reference line.
@@ -1354,75 +1356,76 @@ def Cumming_Plot_Aesthetic_Adjustments(contrast_axes, reflines_kwargs, is_paired
13541356
method(0, **reflines_kwargs)
13551357

13561358
# Add axes spine lines to link the relevant groups in the plot. (re-add as we removed spines)
1357-
if horizontal:
1358-
if two_col_sankey:
1359-
rightend_ticks = np.array([len(i) - 2 for i in idx]) + np.array(ticks_to_start_twocol_sankey)
1360-
starting_ticks = ticks_to_start_twocol_sankey.copy()
1361-
else:
1362-
if is_paired == "baseline" and show_pairs:
1363-
if proportional and is_paired is not None:
1364-
rightend_ticks = np.array([len(i) - 1 for i in idx]) + np.array(ticks_to_skip)
1365-
else:
1366-
rightend_ticks = np.array([len(i) - 1 for i in temp_idx]) + np.array(ticks_to_skip)
1359+
if not skip_redraw_lines:
1360+
if horizontal:
1361+
if two_col_sankey:
1362+
rightend_ticks = np.array([len(i) - 2 for i in idx]) + np.array(ticks_to_start_twocol_sankey)
1363+
starting_ticks = ticks_to_start_twocol_sankey.copy()
13671364
else:
1368-
rightend_ticks = np.array([len(i) - 1 for i in idx]) + np.array(ticks_to_skip)
1369-
starting_ticks = ticks_to_skip.copy()
1370-
1371-
for ax in [rawdata_axes]:
1372-
sns.despine(ax=ax, left=True)
1373-
xlim, ylim = ax.get_xlim(), ax.get_ylim()
1374-
redraw_axes_kwargs["x"] = xlim[0]
1375-
for k, start_tick in enumerate(starting_ticks):
1376-
end_tick = rightend_ticks[k]
1377-
ax.vlines(
1378-
ymin=start_tick,
1379-
ymax=end_tick,
1380-
**redraw_axes_kwargs
1381-
)
1382-
ax.set_xlim(xlim)
1383-
ax.set_ylim(ylim)
1384-
del redraw_axes_kwargs["x"]
1385-
1386-
# Remove y ticks and labels from the contrast axes.
1387-
sns.despine(ax=contrast_axes, left=True)
1388-
contrast_axes.set_yticks([])
1389-
contrast_axes.set_yticklabels([])
1390-
1391-
else: # Add spine lines to link the relevant groups in the plot. (re-add as we removed spines) - Vertical plots
1392-
if two_col_sankey:
1393-
rightend_ticks_raw = rightend_ticks_contrast = np.array([len(i) - 2 for i in idx]) + np.array(ticks_to_start_twocol_sankey)
1394-
starting_ticks_raw = starting_ticks_contrast = ticks_to_start_twocol_sankey
1395-
else:
1396-
if is_paired == "baseline" and show_pairs:
1397-
if proportional and is_paired is not None:
1398-
rightend_ticks_raw = rightend_ticks_contrast = np.array([len(i) - 1 for i in idx]) + np.array(ticks_to_skip)
1365+
if is_paired == "baseline" and show_pairs:
1366+
if proportional and is_paired is not None:
1367+
rightend_ticks = np.array([len(i) - 1 for i in idx]) + np.array(ticks_to_skip)
1368+
else:
1369+
rightend_ticks = np.array([len(i) - 1 for i in temp_idx]) + np.array(ticks_to_skip)
13991370
else:
1400-
rightend_ticks_raw = np.array([len(i) - 1 for i in temp_idx]) + np.array(ticks_to_skip)
1401-
temp_length = [(len(i) - 1) * 2 - 1 for i in idx] if proportional else [(len(i) - 1) for i in idx]
1402-
rightend_ticks_contrast = np.array(temp_length) + np.array(ticks_to_skip_contrast)
1403-
starting_ticks_raw, starting_ticks_contrast = ticks_to_skip, ticks_to_skip_contrast
1371+
rightend_ticks = np.array([len(i) - 1 for i in idx]) + np.array(ticks_to_skip)
1372+
starting_ticks = ticks_to_skip.copy()
1373+
1374+
for ax in [rawdata_axes]:
1375+
sns.despine(ax=ax, left=True)
1376+
xlim, ylim = ax.get_xlim(), ax.get_ylim()
1377+
redraw_axes_kwargs["x"] = xlim[0]
1378+
for k, start_tick in enumerate(starting_ticks):
1379+
end_tick = rightend_ticks[k]
1380+
ax.vlines(
1381+
ymin=start_tick,
1382+
ymax=end_tick,
1383+
**redraw_axes_kwargs
1384+
)
1385+
ax.set_xlim(xlim)
1386+
ax.set_ylim(ylim)
1387+
del redraw_axes_kwargs["x"]
1388+
1389+
# Remove y ticks and labels from the contrast axes.
1390+
sns.despine(ax=contrast_axes, left=True)
1391+
contrast_axes.set_yticks([])
1392+
contrast_axes.set_yticklabels([])
1393+
1394+
else: # Add spine lines to link the relevant groups in the plot. (re-add as we removed spines) - Vertical plots
1395+
if two_col_sankey:
1396+
rightend_ticks_raw = rightend_ticks_contrast = np.array([len(i) - 2 for i in idx]) + np.array(ticks_to_start_twocol_sankey)
1397+
starting_ticks_raw = starting_ticks_contrast = ticks_to_start_twocol_sankey
14041398
else:
1405-
rightend_ticks_raw = rightend_ticks_contrast = np.array([len(i) - 1 for i in idx]) + np.array(ticks_to_skip)
1406-
starting_ticks_raw = starting_ticks_contrast = ticks_to_skip
1407-
1408-
for ax, starting_ticks_current, rightend_ticks_current in zip(
1409-
[rawdata_axes, contrast_axes],
1410-
[starting_ticks_raw, starting_ticks_contrast],
1411-
[rightend_ticks_raw, rightend_ticks_contrast],
1412-
):
1413-
sns.despine(ax=ax, bottom=True)
1414-
xlim, ylim = ax.get_xlim(), ax.get_ylim()
1415-
redraw_axes_kwargs["y"] = ylim[0]
1416-
for k, start_tick in enumerate(starting_ticks_current):
1417-
end_tick = rightend_ticks_current[k]
1418-
ax.hlines(
1419-
xmin=start_tick,
1420-
xmax=end_tick,
1421-
**redraw_axes_kwargs
1422-
)
1423-
ax.set_xlim(xlim)
1424-
ax.set_ylim(ylim)
1425-
del redraw_axes_kwargs["y"]
1399+
if is_paired == "baseline" and show_pairs:
1400+
if proportional and is_paired is not None:
1401+
rightend_ticks_raw = rightend_ticks_contrast = np.array([len(i) - 1 for i in idx]) + np.array(ticks_to_skip)
1402+
else:
1403+
rightend_ticks_raw = np.array([len(i) - 1 for i in temp_idx]) + np.array(ticks_to_skip)
1404+
temp_length = [(len(i) - 1) * 2 - 1 for i in idx] if proportional else [(len(i) - 1) for i in idx]
1405+
rightend_ticks_contrast = np.array(temp_length) + np.array(ticks_to_skip_contrast)
1406+
starting_ticks_raw, starting_ticks_contrast = ticks_to_skip, ticks_to_skip_contrast
1407+
else:
1408+
rightend_ticks_raw = rightend_ticks_contrast = np.array([len(i) - 1 for i in idx]) + np.array(ticks_to_skip)
1409+
starting_ticks_raw = starting_ticks_contrast = ticks_to_skip
1410+
1411+
for ax, starting_ticks_current, rightend_ticks_current in zip(
1412+
[rawdata_axes, contrast_axes],
1413+
[starting_ticks_raw, starting_ticks_contrast],
1414+
[rightend_ticks_raw, rightend_ticks_contrast],
1415+
):
1416+
sns.despine(ax=ax, bottom=True)
1417+
xlim, ylim = ax.get_xlim(), ax.get_ylim()
1418+
redraw_axes_kwargs["y"] = ylim[0]
1419+
for k, start_tick in enumerate(starting_ticks_current):
1420+
end_tick = rightend_ticks_current[k]
1421+
ax.hlines(
1422+
xmin=start_tick,
1423+
xmax=end_tick,
1424+
**redraw_axes_kwargs
1425+
)
1426+
ax.set_xlim(xlim)
1427+
ax.set_ylim(ylim)
1428+
del redraw_axes_kwargs["y"]
14261429

14271430
# Add x-spine line for delta2/mini meta.
14281431
if (show_delta2 or show_mini_meta) and not horizontal:

dabest/plot_tools.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1604,7 +1604,9 @@ def grid_key_WIP(is_paired, idx, all_plot_groups, gridkey_rows, rawdata_axes, co
16041604
# raise errors if gridkey_rows is not a list, or if the list is empty
16051605
if isinstance(gridkey_rows, list) is False:
16061606
raise TypeError("gridkey_rows must be a list.")
1607-
elif len(gridkey_rows) == 0:
1607+
if any(isinstance(i, str) is False for i in gridkey_rows):
1608+
raise TypeError("gridkey_rows must contain only strings.")
1609+
if len(gridkey_rows) == 0:
16081610
warnings.warn("gridkey_rows is an empty list.")
16091611

16101612
# raise Warning if an item in gridkey_rows is not contained in any idx
@@ -1639,7 +1641,7 @@ def grid_key_WIP(is_paired, idx, all_plot_groups, gridkey_rows, rawdata_axes, co
16391641
gridkey_rows.append("Ns")
16401642
list_of_Ns = []
16411643
for i in groups_for_gridkey:
1642-
list_of_Ns.append(str(plot_data.groupby(xvar).count()[yvar].loc[i]))
1644+
list_of_Ns.append(str(plot_data.groupby(xvar, observed=False).count()[yvar].loc[i]))
16431645
table_cellcols.append(list_of_Ns)
16441646

16451647
# Adds a row for effectsizes with effectsize values

dabest/plotter.py

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,29 @@ def effectsize_df_plotter(effectsize_df, **plot_kwargs):
377377
redraw_axes_kwargs=redraw_axes_kwargs,
378378
horizontal=horizontal,
379379
)
380-
380+
381+
# GRIDKEY WIP
382+
skip_redraw_lines = False
383+
gridkey_rows = plot_kwargs["gridkey_rows"]
384+
if gridkey_rows is not None and not horizontal:
385+
grid_key_WIP(
386+
is_paired=is_paired,
387+
idx=idx,
388+
all_plot_groups=all_plot_groups,
389+
gridkey_rows=gridkey_rows,
390+
rawdata_axes=rawdata_axes,
391+
contrast_axes=contrast_axes,
392+
plot_data=plot_data,
393+
xvar=xvar,
394+
yvar=yvar,
395+
results=results,
396+
show_delta2=show_delta2,
397+
show_mini_meta=show_mini_meta,
398+
float_contrast=float_contrast,
399+
plot_kwargs=plot_kwargs,
400+
)
401+
skip_redraw_lines = True
402+
381403
# Make sure the contrast_axes x-lims match the rawdata_axes xlims,
382404
# and add an extra violinplot tick for delta-delta plot.
383405
# Name is xaxis but it is actually y-axis for horizontal plots
@@ -449,6 +471,7 @@ def effectsize_df_plotter(effectsize_df, **plot_kwargs):
449471
show_delta2 = show_delta2,
450472
show_mini_meta = show_mini_meta,
451473
horizontal=horizontal,
474+
skip_redraw_lines=skip_redraw_lines,
452475
)
453476

454477
# Add the dependent axes spines back in.
@@ -460,27 +483,6 @@ def effectsize_df_plotter(effectsize_df, **plot_kwargs):
460483
horizontal=horizontal
461484
)
462485

463-
# GRIDKEY WIP
464-
# if gridkey_rows is None, skip everything here
465-
gridkey_rows = plot_kwargs["gridkey_rows"]
466-
if gridkey_rows is not None and not horizontal:
467-
grid_key_WIP(
468-
is_paired=is_paired,
469-
idx=idx,
470-
all_plot_groups=all_plot_groups,
471-
gridkey_rows=gridkey_rows,
472-
rawdata_axes=rawdata_axes,
473-
contrast_axes=contrast_axes,
474-
plot_data=plot_data,
475-
xvar=xvar,
476-
yvar=yvar,
477-
results=results,
478-
show_delta2=show_delta2,
479-
show_mini_meta=show_mini_meta,
480-
float_contrast=float_contrast,
481-
plot_kwargs=plot_kwargs,
482-
)
483-
484486
# Swarm bars WIP
485487
swarm_bars = plot_kwargs["swarm_bars"]
486488
if swarm_bars and not proportional and not horizontal:

0 commit comments

Comments
 (0)