Skip to content

buggy defaults for plot_multicomparison_fc #755

@emdann

Description

@emdann

Please make sure these conditions are met

  • I have checked that this issue has not already been reported.
  • I have confirmed this bug exists on the latest version of pertpy.
  • (optional) I have confirmed this bug exists on the main branch.

Report

With default figsize and parameters, plot_multicomparison_fc often throws an annoying error and doesn't plot the significance markers.

Example

model.plot_multicomparison_fc(all_results)

Image

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[120], line 1
----> 1 model.plot_multicomparison_fc(all_results)

File ~/miniforge3/envs/rpy2-voodoo/lib/python3.12/site-packages/pertpy/tools/_differential_gene_expression/_base.py:868, in MethodBase.plot_multicomparison_fc(self, results_df, n_top_vars, contrast_col, log2fc_col, pvalue_col, symbol_col, marker_size, figsize, x_label, y_label, show, return_fig, **heatmap_kwargs)
    865 for _i, row in results_df.iterrows():
    866     if row["significance"] != "n.s.":
    867         plt.scatter(
--> 868             x=x_locs[x_labels.index(row[symbol_col])],
    869             y=y_locs[y_labels.index(row[contrast_col])],
    870             s=_size[row["significance"]],
    871             marker="*",
    872             c="white",
    873         )
    875 plt.scatter([], [], s=marker_size, marker="*", c="black", label="< 0.001")
    876 plt.scatter([], [], s=math.floor(marker_size / 2), marker="*", c="black", label="< 0.01")

ValueError: 'IL5' is not in list

Simple fixes:

model.plot_multicomparison_fc(all_results, figsize=(18,3))
model.plot_multicomparison_fc(all_results, xticklabels=True)

Versions

<table class=table>
            <thead style="position: sticky; top: 0; background-color: var(--jp-layout-color0, var(--vscode-editor-background, white));">
        <tr><th>Package</th><th>Version</th></tr>
    </thead>
    <tbody>
        <tr><td><strong>pandas</strong></td><td>2.2.3</td></tr>
        <tr><td><strong>numpy</strong></td><td>1.26.4</td></tr>
        <tr><td><strong>scanpy</strong></td><td>1.11.0</td></tr>
        <tr><td><strong>anndata</strong></td><td>0.12.0.dev92+gccfb6e3</td></tr>
        <tr><td><strong>matplotlib</strong></td><td>3.9.3</td></tr>
        <tr><td><strong>seaborn</strong></td><td>0.13.2</td></tr>
        <tr><td><strong>pertpy</strong></td><td>0.10.0</td></tr>
    </tbody>
    <thead style="position: sticky; top: 0; background-color: var(--jp-layout-color0, var(--vscode-editor-background, white));">
        <tr><th>Component</th><th>Info</th></tr>
    </thead>
    <tbody>
        <tr><td>Python</td><td>3.12.0 | packaged by conda-forge | (main, Oct  3 2023, 08:43:22) [GCC 12.3.0]</td></tr>
        <tr><td>OS</td><td>Linux-6.1.0-30-amd64-x86_64-with-glibc2.36</td></tr>
        <tr><td>Updated</td><td>2025-04-30 23:43</td></tr>
    </tbody>
        </table>

        <details>
        <summary>Dependencies</summary>
                <div style="max-height: min(500px, 80vh); overflow-y: auto;">
    <table class=table>
            <thead style="position: sticky; top: 0; background-color: var(--jp-layout-color0, var(--vscode-editor-background, white));">
    <tr><th>Dependency</th><th>Version</th></tr>
</thead>
<tbody>
    <tr><td>session-info2</td><td>0.1.2</td></tr>
    <tr><td>pytorch-lightning</td><td>2.4.0</td></tr>
    <tr><td>Pyomo</td><td>6.8.2</td></tr>
    <tr><td>absl-py</td><td>2.1.0</td></tr>
    <tr><td>pytz</td><td>2024.2</td></tr>
    <tr><td>opt_einsum</td><td>3.4.0</td></tr>
    <tr><td>zarr</td><td>3.0.6</td></tr>
    <tr><td>kiwisolver</td><td>1.4.7</td></tr>
    <tr><td>Deprecated</td><td>1.2.18</td></tr>
    <tr><td>nvidia-cufft-cu12</td><td>11.2.1.3</td></tr>
    <tr><td>jaxopt</td><td>0.8.3</td></tr>
    <tr><td>xarray</td><td>2024.11.0</td></tr>
    <tr><td>jaraco.context</td><td>5.3.0</td></tr>
    <tr><td>parso</td><td>0.8.4</td></tr>
    <tr><td>traitlets</td><td>5.14.3</td></tr>
    <tr><td>jedi</td><td>0.19.2</td></tr>
    <tr><td>jaraco.functools</td><td>4.0.1</td></tr>
    <tr><td>six</td><td>1.17.0</td></tr>
    <tr><td>nvidia-nvjitlink-cu12</td><td>12.4.127</td></tr>
    <tr><td>jaxlib</td><td>0.4.35</td></tr>
    <tr><td>PyYAML</td><td>6.0.2</td></tr>
    <tr><td>debugpy</td><td>1.8.9</td></tr>
    <tr><td>python-dateutil</td><td>2.9.0.post0</td></tr>
    <tr><td>matplotlib-inline</td><td>0.1.7</td></tr>
    <tr><td>rich</td><td>13.9.4</td></tr>
    <tr><td>pyzmq</td><td>26.2.0</td></tr>
    <tr><td>jaxtyping</td><td>0.2.36</td></tr>
    <tr><td>cffi</td><td>1.17.1</td></tr>
    <tr><td>packaging</td><td>24.2</td></tr>
    <tr><td>pycparser</td><td>2.22</td></tr>
    <tr><td>toolz</td><td>0.12.1</td></tr>
    <tr><td>docrep</td><td>0.3.2</td></tr>
    <tr><td>sparsecca</td><td>0.3.1</td></tr>
    <tr><td>lamin_utils</td><td>0.13.9</td></tr>
    <tr><td>regex</td><td>2024.11.6 (2.5.148)</td></tr>
    <tr><td>mpmath</td><td>1.3.0</td></tr>
    <tr><td>chardet</td><td>5.2.0</td></tr>
    <tr><td>multipledispatch</td><td>1.0.0 (0.6.0)</td></tr>
    <tr><td>pure_eval</td><td>0.2.3</td></tr>
    <tr><td>ml_collections</td><td>1.0.0</td></tr>
    <tr><td>nvidia-curand-cu12</td><td>10.3.5.147</td></tr>
    <tr><td>chex</td><td>0.1.87</td></tr>
    <tr><td>pydeseq2</td><td>0.5.0</td></tr>
    <tr><td>more-itertools</td><td>10.5.0</td></tr>
    <tr><td>tqdm</td><td>4.67.1</td></tr>
    <tr><td>platformdirs</td><td>4.3.6</td></tr>
    <tr><td>joblib</td><td>1.4.2</td></tr>
    <tr><td>threadpoolctl</td><td>3.5.0</td></tr>
    <tr><td>stack-data</td><td>0.6.3</td></tr>
    <tr><td>triton</td><td>3.1.0</td></tr>
    <tr><td>setuptools</td><td>75.6.0</td></tr>
    <tr><td>nvidia-cuda-runtime-cu12</td><td>12.4.127</td></tr>
    <tr><td>comm</td><td>0.2.2</td></tr>
    <tr><td>msgpack</td><td>1.1.0</td></tr>
    <tr><td>nvidia-cublas-cu12</td><td>12.4.5.8</td></tr>
    <tr><td>ott-jax</td><td>0.5.0</td></tr>
    <tr><td>wcwidth</td><td>0.2.13</td></tr>
    <tr><td>texttable</td><td>1.7.0</td></tr>
    <tr><td>mudata</td><td>0.3.1</td></tr>
    <tr><td>typing_extensions</td><td>4.12.2</td></tr>
    <tr><td>statsmodels</td><td>0.14.4</td></tr>
    <tr><td>ipykernel</td><td>6.29.5</td></tr>
    <tr><td>asttokens</td><td>3.0.0</td></tr>
    <tr><td>scvi-tools</td><td>1.2.1</td></tr>
    <tr><td>etils</td><td>1.11.0</td></tr>
    <tr><td>pillow</td><td>11.0.0</td></tr>
    <tr><td>certifi</td><td>2024.8.30 (2024.08.30)</td></tr>
    <tr><td>nvidia-cuda-cupti-cu12</td><td>12.4.127</td></tr>
    <tr><td>pyarrow</td><td>15.0.2</td></tr>
    <tr><td>torchmetrics</td><td>1.6.0</td></tr>
    <tr><td>ml_dtypes</td><td>0.5.0</td></tr>
    <tr><td>jax</td><td>0.4.35</td></tr>
    <tr><td>patsy</td><td>1.0.1</td></tr>
    <tr><td>donfig</td><td>0.8.1.post1</td></tr>
    <tr><td>decoupler</td><td>1.8.0</td></tr>
    <tr><td>lightning</td><td>2.4.0</td></tr>
    <tr><td>numpyro</td><td>0.16.0</td></tr>
    <tr><td>interface-meta</td><td>1.3.0</td></tr>
    <tr><td>fsspec</td><td>2024.10.0</td></tr>
    <tr><td>numcodecs</td><td>0.15.1</td></tr>
    <tr><td>natsort</td><td>8.4.0</td></tr>
    <tr><td>wrapt</td><td>1.17.0</td></tr>
    <tr><td>nvidia-nccl-cu12</td><td>2.21.5</td></tr>
    <tr><td>pyparsing</td><td>3.2.0</td></tr>
    <tr><td>pyro-ppl</td><td>1.9.1</td></tr>
    <tr><td>nvidia-cuda-nvrtc-cu12</td><td>12.4.127</td></tr>
    <tr><td>leidenalg</td><td>0.10.2</td></tr>
    <tr><td>lightning-utilities</td><td>0.11.9</td></tr>
    <tr><td>psutil</td><td>6.1.0</td></tr>
    <tr><td>jaraco.collections</td><td>5.1.0</td></tr>
    <tr><td>pynndescent</td><td>0.5.13</td></tr>
    <tr><td>blitzgsea</td><td>1.3.47</td></tr>
    <tr><td>ipywidgets</td><td>8.1.5</td></tr>
    <tr><td>prompt_toolkit</td><td>3.0.48</td></tr>
    <tr><td>flax</td><td>0.10.2</td></tr>
    <tr><td>tornado</td><td>6.4.2</td></tr>
    <tr><td>formulaic-contrasts</td><td>0.2.0</td></tr>
    <tr><td>urllib3</td><td>2.2.3</td></tr>
    <tr><td>jupyter_client</td><td>8.6.3</td></tr>
    <tr><td>numba</td><td>0.60.0</td></tr>
    <tr><td>formulaic</td><td>1.0.2</td></tr>
    <tr><td>scipy</td><td>1.14.1</td></tr>
    <tr><td>adjustText</td><td>1.3.0</td></tr>
    <tr><td>equinox</td><td>0.11.9</td></tr>
    <tr><td>requests</td><td>2.32.3</td></tr>
    <tr><td>ipython</td><td>8.30.0</td></tr>
    <tr><td>nvidia-cusolver-cu12</td><td>11.6.1.9</td></tr>
    <tr><td>decorator</td><td>5.1.1</td></tr>
    <tr><td>crc32c</td><td>2.7.1</td></tr>
    <tr><td>nvidia-nvtx-cu12</td><td>12.4.127</td></tr>
    <tr><td>simplejson</td><td>3.19.3</td></tr>
    <tr><td>torch</td><td>2.5.1 (2.5.1+cu124)</td></tr>
    <tr><td>sympy</td><td>1.13.1</td></tr>
    <tr><td>PubChemPy</td><td>1.0.4</td></tr>
    <tr><td>scikit-learn</td><td>1.5.2</td></tr>
    <tr><td>nvidia-cudnn-cu12</td><td>9.1.0.70</td></tr>
    <tr><td>h5py</td><td>3.12.1</td></tr>
    <tr><td>nvidia-cusparse-cu12</td><td>12.3.1.170</td></tr>
    <tr><td>charset-normalizer</td><td>3.4.0</td></tr>
    <tr><td>optax</td><td>0.2.4</td></tr>
    <tr><td>jupyter_core</td><td>5.7.2</td></tr>
    <tr><td>jaraco.text</td><td>3.12.1</td></tr>
    <tr><td>lineax</td><td>0.0.7</td></tr>
    <tr><td>idna</td><td>3.10</td></tr>
    <tr><td>executing</td><td>2.1.0</td></tr>
    <tr><td>ply</td><td>3.11</td></tr>
    <tr><td>Pygments</td><td>2.18.0</td></tr>
    <tr><td>sparse</td><td>0.15.4</td></tr>
    <tr><td>cycler</td><td>0.12.1</td></tr>
    <tr><td>attrs</td><td>24.2.0</td></tr>
    <tr><td>igraph</td><td>0.11.8</td></tr>
    <tr><td>legacy-api-wrap</td><td>1.4.1</td></tr>
    <tr><td>filelock</td><td>3.16.1</td></tr>
    <tr><td>llvmlite</td><td>0.43.0</td></tr>
    <tr><td>scikit-misc</td><td>0.5.1</td></tr>
</tbody>
    </table>
</div>
    </details>
        <details>
            <summary>Copyable Markdown</summary>
            <pre>| Package    | Version               |
| ---------- | --------------------- |
| pandas     | 2.2.3                 |
| numpy      | 1.26.4                |
| scanpy     | 1.11.0                |
| anndata    | 0.12.0.dev92+gccfb6e3 |
| matplotlib | 3.9.3                 |
| seaborn    | 0.13.2                |
| pertpy     | 0.10.0                |

| Dependency               | Version                |
| ------------------------ | ---------------------- |
| session-info2            | 0.1.2                  |
| pytorch-lightning        | 2.4.0                  |
| Pyomo                    | 6.8.2                  |
| absl-py                  | 2.1.0                  |
| pytz                     | 2024.2                 |
| opt_einsum               | 3.4.0                  |
| zarr                     | 3.0.6                  |
| kiwisolver               | 1.4.7                  |
| Deprecated               | 1.2.18                 |
| nvidia-cufft-cu12        | 11.2.1.3               |
| jaxopt                   | 0.8.3                  |
| xarray                   | 2024.11.0              |
| jaraco.context           | 5.3.0                  |
| parso                    | 0.8.4                  |
| traitlets                | 5.14.3                 |
| jedi                     | 0.19.2                 |
| jaraco.functools         | 4.0.1                  |
| six                      | 1.17.0                 |
| nvidia-nvjitlink-cu12    | 12.4.127               |
| jaxlib                   | 0.4.35                 |
| PyYAML                   | 6.0.2                  |
| debugpy                  | 1.8.9                  |
| python-dateutil          | 2.9.0.post0            |
| matplotlib-inline        | 0.1.7                  |
| rich                     | 13.9.4                 |
| pyzmq                    | 26.2.0                 |
| jaxtyping                | 0.2.36                 |
| cffi                     | 1.17.1                 |
| packaging                | 24.2                   |
| pycparser                | 2.22                   |
| toolz                    | 0.12.1                 |
| docrep                   | 0.3.2                  |
| sparsecca                | 0.3.1                  |
| lamin_utils              | 0.13.9                 |
| regex                    | 2024.11.6 (2.5.148)    |
| mpmath                   | 1.3.0                  |
| chardet                  | 5.2.0                  |
| multipledispatch         | 1.0.0 (0.6.0)          |
| pure_eval                | 0.2.3                  |
| ml_collections           | 1.0.0                  |
| nvidia-curand-cu12       | 10.3.5.147             |
| chex                     | 0.1.87                 |
| pydeseq2                 | 0.5.0                  |
| more-itertools           | 10.5.0                 |
| tqdm                     | 4.67.1                 |
| platformdirs             | 4.3.6                  |
| joblib                   | 1.4.2                  |
| threadpoolctl            | 3.5.0                  |
| stack-data               | 0.6.3                  |
| triton                   | 3.1.0                  |
| setuptools               | 75.6.0                 |
| nvidia-cuda-runtime-cu12 | 12.4.127               |
| comm                     | 0.2.2                  |
| msgpack                  | 1.1.0                  |
| nvidia-cublas-cu12       | 12.4.5.8               |
| ott-jax                  | 0.5.0                  |
| wcwidth                  | 0.2.13                 |
| texttable                | 1.7.0                  |
| mudata                   | 0.3.1                  |
| typing_extensions        | 4.12.2                 |
| statsmodels              | 0.14.4                 |
| ipykernel                | 6.29.5                 |
| asttokens                | 3.0.0                  |
| scvi-tools               | 1.2.1                  |
| etils                    | 1.11.0                 |
| pillow                   | 11.0.0                 |
| certifi                  | 2024.8.30 (2024.08.30) |
| nvidia-cuda-cupti-cu12   | 12.4.127               |
| pyarrow                  | 15.0.2                 |
| torchmetrics             | 1.6.0                  |
| ml_dtypes                | 0.5.0                  |
| jax                      | 0.4.35                 |
| patsy                    | 1.0.1                  |
| donfig                   | 0.8.1.post1            |
| decoupler                | 1.8.0                  |
| lightning                | 2.4.0                  |
| numpyro                  | 0.16.0                 |
| interface-meta           | 1.3.0                  |
| fsspec                   | 2024.10.0              |
| numcodecs                | 0.15.1                 |
| natsort                  | 8.4.0                  |
| wrapt                    | 1.17.0                 |
| nvidia-nccl-cu12         | 2.21.5                 |
| pyparsing                | 3.2.0                  |
| pyro-ppl                 | 1.9.1                  |
| nvidia-cuda-nvrtc-cu12   | 12.4.127               |
| leidenalg                | 0.10.2                 |
| lightning-utilities      | 0.11.9                 |
| psutil                   | 6.1.0                  |
| jaraco.collections       | 5.1.0                  |
| pynndescent              | 0.5.13                 |
| blitzgsea                | 1.3.47                 |
| ipywidgets               | 8.1.5                  |
| prompt_toolkit           | 3.0.48                 |
| flax                     | 0.10.2                 |
| tornado                  | 6.4.2                  |
| formulaic-contrasts      | 0.2.0                  |
| urllib3                  | 2.2.3                  |
| jupyter_client           | 8.6.3                  |
| numba                    | 0.60.0                 |
| formulaic                | 1.0.2                  |
| scipy                    | 1.14.1                 |
| adjustText               | 1.3.0                  |
| equinox                  | 0.11.9                 |
| requests                 | 2.32.3                 |
| ipython                  | 8.30.0                 |
| nvidia-cusolver-cu12     | 11.6.1.9               |
| decorator                | 5.1.1                  |
| crc32c                   | 2.7.1                  |
| nvidia-nvtx-cu12         | 12.4.127               |
| simplejson               | 3.19.3                 |
| torch                    | 2.5.1 (2.5.1+cu124)    |
| sympy                    | 1.13.1                 |
| PubChemPy                | 1.0.4                  |
| scikit-learn             | 1.5.2                  |
| nvidia-cudnn-cu12        | 9.1.0.70               |
| h5py                     | 3.12.1                 |
| nvidia-cusparse-cu12     | 12.3.1.170             |
| charset-normalizer       | 3.4.0                  |
| optax                    | 0.2.4                  |
| jupyter_core             | 5.7.2                  |
| jaraco.text              | 3.12.1                 |
| lineax                   | 0.0.7                  |
| idna                     | 3.10                   |
| executing                | 2.1.0                  |
| ply                      | 3.11                   |
| Pygments                 | 2.18.0                 |
| sparse                   | 0.15.4                 |
| cycler                   | 0.12.1                 |
| attrs                    | 24.2.0                 |
| igraph                   | 0.11.8                 |
| legacy-api-wrap          | 1.4.1                  |
| filelock                 | 3.16.1                 |
| llvmlite                 | 0.43.0                 |
| scikit-misc              | 0.5.1                  |

| Component | Info                                                                          |
| --------- | ----------------------------------------------------------------------------- |
| Python    | 3.12.0 | packaged by conda-forge | (main, Oct  3 2023, 08:43:22) [GCC 12.3.0] |
| OS        | Linux-6.1.0-30-amd64-x86_64-with-glibc2.36                                    |
| Updated   | 2025-04-30 23:43                                                              |</pre>
        </details>

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions