diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 837abcc..9624e07 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -1,6 +1,11 @@
 What's new in version 0.9
 -------------------------
-- Ability to disable totals plot with `totals_plot_elements=0`.
+
+- Fixes a bug where ``show_percentages`` used the incorrect denominator if
+  filtering (e.g. ``min_subset_size``) was applied. This bug was a regression
+  introduced in version 0.7. (:issue:`248`)
+- Ability to disable totals plot with `totals_plot_elements=0`. (:issue:`246`)
+- Ability to set totals y axis label (:issue:`243`)
 
 What's new in version 0.8
 -------------------------
@@ -14,7 +19,7 @@ What's new in version 0.8
 - Added `subsets` attribute to QueryResult. (:issue:`198`)
 - Fixed a bug where more than 64 categories could result in an error. (:issue:`193`)
 
-Patch release 0.8.1 handles deprecations in dependencies.
+Patch release 0.8.2 handles deprecations in dependencies.
 
 What's new in version 0.7
 -------------------------
diff --git a/upsetplot/plotting.py b/upsetplot/plotting.py
index 32ef1d8..1686251 100644
--- a/upsetplot/plotting.py
+++ b/upsetplot/plotting.py
@@ -50,8 +50,6 @@ def _process_data(
 
     df = results.data
     agg = results.subset_sizes
-    totals = results.category_totals
-    total = agg.sum()
 
     # add '_bin' to df indicating index in agg
     # XXX: ugly!
@@ -75,7 +73,7 @@ def _process_data(
     if reverse:
         agg = agg[::-1]
 
-    return total, df, agg, totals
+    return results.total, df, agg, results.category_totals
 
 
 def _multiply_alpha(c, mult):
@@ -673,8 +671,6 @@ class UpSet:
             fig.set_figheight((colw * (n_cats + sizes.sum())) / render_ratio)
 
         text_nelems = int(np.ceil(figw / colw - non_text_nelems))
-        # print('textw', textw, 'figw', figw, 'colw', colw,
-        #       'ncols', figw/colw, 'text_nelems', text_nelems)
 
         GS = self._reorient(matplotlib.gridspec.GridSpec)
         gridspec = GS(
diff --git a/upsetplot/reformat.py b/upsetplot/reformat.py
index f22ee9c..05234d9 100644
--- a/upsetplot/reformat.py
+++ b/upsetplot/reformat.py
@@ -162,17 +162,20 @@ class QueryResult:
         for `data`.
     category_totals : Series
         Total size of each category, regardless of selection.
+    total : number
+        Total number of samples / sum of value
     """
 
-    def __init__(self, data, subset_sizes, category_totals):
+    def __init__(self, data, subset_sizes, category_totals, total):
         self.data = data
         self.subset_sizes = subset_sizes
         self.category_totals = category_totals
+        self.total = total
 
     def __repr__(self):
         return (
             "QueryResult(data={data}, subset_sizes={subset_sizes}, "
-            "category_totals={category_totals}".format(**vars(self))
+            "category_totals={category_totals}, total={total}".format(**vars(self))
         )
 
     @property
@@ -267,7 +270,7 @@ def query(
     -------
     QueryResult
         Including filtered ``data``, filtered and sorted ``subset_sizes`` and
-        overall ``category_totals``.
+        overall ``category_totals`` and ``total``.
 
     Examples
     --------
@@ -322,11 +325,12 @@ def query(
 
     data, agg = _aggregate_data(data, subset_size, sum_over)
     data = _check_index(data)
-    totals = [
+    grand_total = agg.sum()
+    category_totals = [
         agg[agg.index.get_level_values(name).values.astype(bool)].sum()
         for name in agg.index.names
     ]
-    totals = pd.Series(totals, index=agg.index.names)
+    category_totals = pd.Series(category_totals, index=agg.index.names)
 
     if include_empty_subsets:
         nlevels = len(agg.index.levels)
@@ -358,15 +362,17 @@ def query(
 
     # sort:
     if sort_categories_by in ("cardinality", "-cardinality"):
-        totals.sort_values(ascending=sort_categories_by[:1] == "-", inplace=True)
+        category_totals.sort_values(
+            ascending=sort_categories_by[:1] == "-", inplace=True
+        )
     elif sort_categories_by == "-input":
-        totals = totals[::-1]
+        category_totals = category_totals[::-1]
     elif sort_categories_by in (None, "input"):
         pass
     else:
         raise ValueError("Unknown sort_categories_by: %r" % sort_categories_by)
-    data = data.reorder_levels(totals.index.values)
-    agg = agg.reorder_levels(totals.index.values)
+    data = data.reorder_levels(category_totals.index.values)
+    agg = agg.reorder_levels(category_totals.index.values)
 
     if sort_by in ("cardinality", "-cardinality"):
         agg = agg.sort_values(ascending=sort_by[:1] == "-")
@@ -380,12 +386,12 @@ def query(
             pd.MultiIndex.from_tuples(index_tuples, names=agg.index.names)
         )
     elif sort_by == "-input":
-        print("<", agg)
         agg = agg[::-1]
-        print(">", agg)
     elif sort_by in (None, "input"):
         pass
     else:
         raise ValueError("Unknown sort_by: %r" % sort_by)
 
-    return QueryResult(data=data, subset_sizes=agg, category_totals=totals)
+    return QueryResult(
+        data=data, subset_sizes=agg, category_totals=category_totals, total=grand_total
+    )

diff --git a/upsetplot/tests/test_upsetplot.py b/upsetplot/tests/test_upsetplot.py
index 3f65142..ffb112e 100644
--- a/upsetplot/tests/test_upsetplot.py
+++ b/upsetplot/tests/test_upsetplot.py
@@ -822,6 +822,7 @@ def test_filter_subsets(filter_params, expected, sort_by):
     )
     # category totals should not be affected
     assert_series_equal(upset_full.totals, upset_filtered.totals)
+    assert upset_full.total == pytest.approx(upset_filtered.total)
 
 
 @pytest.mark.parametrize(

Problems with show_percentages
I am using the plot function to make an upset plot with show_percentages=True. When I plot the whole upset plot the % values are calculated correctly, however when I use the min_subset_size=100 parameter, the % calculations change. I don't think the new percentage calculations uses the whole dataset but only what is being plotted. Is there a way to change this?

![image](https://github.com/jnothman/UpSetPlot/assets/54101443/4e0ee2c0-c450-4e8f-bc82-8dc38e0e3073)
![image](https://github.com/jnothman/UpSetPlot/assets/54101443/fcbee063-4c25-43cb-8757-c15379169d92)
 
upsetplot/tests/test_upsetplot.py::test_filter_subsets[cardinality-filter_params0-expected0] upsetplot/tests/test_upsetplot.py::test_filter_subsets[cardinality-filter_params1-expected1] upsetplot/tests/test_upsetplot.py::test_filter_subsets[cardinality-filter_params2-expected2] upsetplot/tests/test_upsetplot.py::test_filter_subsets[cardinality-filter_params3-expected3] upsetplot/tests/test_upsetplot.py::test_filter_subsets[cardinality-filter_params4-expected4] upsetplot/tests/test_upsetplot.py::test_filter_subsets[degree-filter_params0-expected0] upsetplot/tests/test_upsetplot.py::test_filter_subsets[degree-filter_params1-expected1] upsetplot/tests/test_upsetplot.py::test_filter_subsets[degree-filter_params2-expected2] upsetplot/tests/test_upsetplot.py::test_filter_subsets[degree-filter_params3-expected3] upsetplot/tests/test_upsetplot.py::test_filter_subsets[degree-filter_params4-expected4]
upsetplot/tests/test_upsetplot.py::test_process_data_series[None-cardinality-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[None-cardinality-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[None-degree-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[None-degree-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[None--cardinality-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[None--cardinality-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[None--degree-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[None--degree-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[None-None-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[None-None-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[None-input-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[None-input-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[None--input-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[None--input-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[input-cardinality-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[input-cardinality-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[input-degree-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[input-degree-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[input--cardinality-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[input--cardinality-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[input--degree-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[input--degree-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[input-None-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[input-None-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[input-input-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[input-input-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[input--input-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[input--input-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[-input-cardinality-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[-input-cardinality-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[-input-degree-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[-input-degree-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[-input--cardinality-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[-input--cardinality-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[-input--degree-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[-input--degree-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[-input-None-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[-input-None-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[-input-input-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[-input-input-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[-input--input-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[-input--input-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[cardinality-cardinality-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[cardinality-cardinality-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[cardinality-degree-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[cardinality-degree-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[cardinality--cardinality-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[cardinality--cardinality-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[cardinality--degree-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[cardinality--degree-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[cardinality-None-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[cardinality-None-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[cardinality-input-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[cardinality-input-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[cardinality--input-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[cardinality--input-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[-cardinality-cardinality-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[-cardinality-cardinality-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[-cardinality-degree-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[-cardinality-degree-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[-cardinality--cardinality-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[-cardinality--cardinality-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[-cardinality--degree-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[-cardinality--degree-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[-cardinality-None-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[-cardinality-None-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[-cardinality-input-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[-cardinality-input-x1] upsetplot/tests/test_upsetplot.py::test_process_data_series[-cardinality--input-x0] upsetplot/tests/test_upsetplot.py::test_process_data_series[-cardinality--input-x1] upsetplot/tests/test_upsetplot.py::test_subset_size_series[x0] upsetplot/tests/test_upsetplot.py::test_subset_size_series[x1] upsetplot/tests/test_upsetplot.py::test_subset_size_frame[x0] upsetplot/tests/test_upsetplot.py::test_subset_size_frame[x1] upsetplot/tests/test_upsetplot.py::test_not_unique[None-cardinality] upsetplot/tests/test_upsetplot.py::test_not_unique[None-degree] upsetplot/tests/test_upsetplot.py::test_not_unique[cardinality-cardinality] upsetplot/tests/test_upsetplot.py::test_not_unique[cardinality-degree] upsetplot/tests/test_upsetplot.py::test_include_empty_subsets upsetplot/tests/test_upsetplot.py::test_param_validation[kw0] upsetplot/tests/test_upsetplot.py::test_param_validation[kw1] upsetplot/tests/test_upsetplot.py::test_param_validation[kw2] upsetplot/tests/test_upsetplot.py::test_param_validation[kw3] upsetplot/tests/test_upsetplot.py::test_plot_smoke_test[kw0] upsetplot/tests/test_upsetplot.py::test_plot_smoke_test[kw1] upsetplot/tests/test_upsetplot.py::test_plot_smoke_test[kw2] upsetplot/tests/test_upsetplot.py::test_plot_smoke_test[kw3] upsetplot/tests/test_upsetplot.py::test_plot_smoke_test[kw4] upsetplot/tests/test_upsetplot.py::test_plot_smoke_test[kw5] upsetplot/tests/test_upsetplot.py::test_plot_smoke_test[kw6] upsetplot/tests/test_upsetplot.py::test_two_sets[set20-set10] upsetplot/tests/test_upsetplot.py::test_two_sets[set20-set11] upsetplot/tests/test_upsetplot.py::test_two_sets[set20-set12] upsetplot/tests/test_upsetplot.py::test_two_sets[set20-set13] upsetplot/tests/test_upsetplot.py::test_two_sets[set21-set10] upsetplot/tests/test_upsetplot.py::test_two_sets[set21-set11] upsetplot/tests/test_upsetplot.py::test_two_sets[set21-set12] upsetplot/tests/test_upsetplot.py::test_two_sets[set21-set13] upsetplot/tests/test_upsetplot.py::test_two_sets[set22-set10] upsetplot/tests/test_upsetplot.py::test_two_sets[set22-set11] upsetplot/tests/test_upsetplot.py::test_two_sets[set22-set12] upsetplot/tests/test_upsetplot.py::test_two_sets[set22-set13] upsetplot/tests/test_upsetplot.py::test_two_sets[set23-set10] upsetplot/tests/test_upsetplot.py::test_two_sets[set23-set11] upsetplot/tests/test_upsetplot.py::test_two_sets[set23-set12] upsetplot/tests/test_upsetplot.py::test_two_sets[set23-set13] upsetplot/tests/test_upsetplot.py::test_vertical upsetplot/tests/test_upsetplot.py::test_element_size upsetplot/tests/test_upsetplot.py::test_show_counts[horizontal] upsetplot/tests/test_upsetplot.py::test_show_counts[vertical] upsetplot/tests/test_upsetplot.py::test_add_stacked_bars[False-horizontal] upsetplot/tests/test_upsetplot.py::test_add_stacked_bars[False-vertical] upsetplot/tests/test_upsetplot.py::test_add_stacked_bars[True-horizontal] upsetplot/tests/test_upsetplot.py::test_add_stacked_bars[True-vertical] upsetplot/tests/test_upsetplot.py::test_add_stacked_bars_colors[colors0-expected0] upsetplot/tests/test_upsetplot.py::test_add_stacked_bars_colors[colors1-expected1] upsetplot/tests/test_upsetplot.py::test_add_stacked_bars_colors[Pastel1-expected2] upsetplot/tests/test_upsetplot.py::test_add_stacked_bars_colors[colors3-expected3] upsetplot/tests/test_upsetplot.py::test_add_stacked_bars_colors[<lambda>-expected4] upsetplot/tests/test_upsetplot.py::test_add_stacked_bars_sum_over[False-False-False] upsetplot/tests/test_upsetplot.py::test_add_stacked_bars_sum_over[False-False-True] upsetplot/tests/test_upsetplot.py::test_add_stacked_bars_sum_over[False-True-False] upsetplot/tests/test_upsetplot.py::test_add_stacked_bars_sum_over[False-True-True] upsetplot/tests/test_upsetplot.py::test_add_stacked_bars_sum_over[True-False-False] upsetplot/tests/test_upsetplot.py::test_add_stacked_bars_sum_over[True-False-True] upsetplot/tests/test_upsetplot.py::test_add_stacked_bars_sum_over[True-True-False] upsetplot/tests/test_upsetplot.py::test_add_stacked_bars_sum_over[True-True-True] upsetplot/tests/test_upsetplot.py::test_index_must_be_bool[x0] upsetplot/tests/test_upsetplot.py::test_matrix_plot_margins[horizontal-x0] upsetplot/tests/test_upsetplot.py::test_matrix_plot_margins[horizontal-x1] upsetplot/tests/test_upsetplot.py::test_matrix_plot_margins[horizontal-x2] upsetplot/tests/test_upsetplot.py::test_matrix_plot_margins[vertical-x0] upsetplot/tests/test_upsetplot.py::test_matrix_plot_margins[vertical-x1] upsetplot/tests/test_upsetplot.py::test_matrix_plot_margins[vertical-x2] upsetplot/tests/test_upsetplot.py::test_style_subsets[kwarg_list0-expected_subset_styles0-expected_legend0] upsetplot/tests/test_upsetplot.py::test_style_subsets[kwarg_list1-expected_subset_styles1-expected_legend1] upsetplot/tests/test_upsetplot.py::test_style_subsets[kwarg_list2-expected_subset_styles2-expected_legend2] upsetplot/tests/test_upsetplot.py::test_style_subsets[kwarg_list3-expected_subset_styles3-expected_legend3] upsetplot/tests/test_upsetplot.py::test_style_subsets[kwarg_list4-expected_subset_styles4-expected_legend4] upsetplot/tests/test_upsetplot.py::test_style_subsets[kwarg_list5-expected_subset_styles5-expected_legend5] upsetplot/tests/test_upsetplot.py::test_style_subsets[kwarg_list6-expected_subset_styles6-expected_legend6] upsetplot/tests/test_upsetplot.py::test_style_subsets[kwarg_list7-expected_subset_styles7-expected_legend7] upsetplot/tests/test_upsetplot.py::test_style_subsets[kwarg_list8-expected_subset_styles8-expected_legend8] upsetplot/tests/test_upsetplot.py::test_style_subsets[kwarg_list9-expected_subset_styles9-expected_legend9] upsetplot/tests/test_upsetplot.py::test_style_subsets[kwarg_list10-expected_subset_styles10-expected_legend10] upsetplot/tests/test_upsetplot.py::test_style_subsets[kwarg_list11-expected_subset_styles11-expected_legend11] upsetplot/tests/test_upsetplot.py::test_style_subsets[kwarg_list12-expected_subset_styles12-expected_legend12] upsetplot/tests/test_upsetplot.py::test_style_subsets[kwarg_list13-expected_subset_styles13-expected_legend13] upsetplot/tests/test_upsetplot.py::test_style_subsets[kwarg_list14-expected_subset_styles14-expected_legend14] upsetplot/tests/test_upsetplot.py::test_style_subsets[kwarg_list15-expected_subset_styles15-expected_legend15] upsetplot/tests/test_upsetplot.py::test_style_subsets[kwarg_list16-expected_subset_styles16-expected_legend16] upsetplot/tests/test_upsetplot.py::test_style_subsets[kwarg_list17-expected_subset_styles17-expected_legend17] upsetplot/tests/test_upsetplot.py::test_style_subsets_artists[horizontal] upsetplot/tests/test_upsetplot.py::test_style_subsets_artists[vertical] upsetplot/tests/test_upsetplot.py::test_many_categories