Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IPython console Matplotlib rc parameters are inconsistent when switching backends #22034

Closed
mrclary opened this issue Apr 28, 2024 · 3 comments · Fixed by #22088
Closed

IPython console Matplotlib rc parameters are inconsistent when switching backends #22034

mrclary opened this issue Apr 28, 2024 · 3 comments · Fixed by #22088

Comments

@mrclary
Copy link
Contributor

mrclary commented Apr 28, 2024

Problem Description

Spyder's IPython Console does not behave consistently with respect to Matplotlib rc settings when switching backends. The following table summarizes the problem.

Backend Preference Toggle Backend Expected Params Actual Params
Inline initial Spyder inline preferences Spyder inline preferences
Inline to interactive matplotlibrc Spyder kernel default
Inline back to inline Spyder inline preferences Spyder kernel default
Interactive initial matplotlibrc Spyder inline preferences
Interactive to inline Spyder inline preferences Spyder kernel default
Interactive back to interactive matplotlibrc Spyder inline preferences

With inline graphics backend:

In [1]: import matplotlib as mpl

In [2]: mpl.rcParams['savefig.format'], mpl.rcParams['figure.dpi'], mpl.rcParams['figure.figsize'], mpl.rcParams['font.size'], mpl.rcParams['figure.subplot.bottom']
Out[2]: ('pdf', 144.0, [6.0, 4.0], 8.0, 0.05)

In [3]: %matplotlib auto
Using matplotlib backend: QtAgg
Using matplotlib backend: QtAgg

In [4]: mpl.rcParams['savefig.format'], mpl.rcParams['figure.dpi'], mpl.rcParams['figure.figsize'], mpl.rcParams['font.size'], mpl.rcParams['figure.subplot.bottom']
Out[4]: ('pdf', 72.0, [6.0, 4.0], 10.0, 0.125)

In [5]: %matplotlib inline

In [6]: mpl.rcParams['savefig.format'], mpl.rcParams['figure.dpi'], mpl.rcParams['figure.figsize'], mpl.rcParams['font.size'], mpl.rcParams['figure.subplot.bottom']
Out[6]: ('pdf', 72.0, [6.0, 4.0], 10.0, 0.125)

In [7]: mpl.rc_file_defaults()

In [8]: mpl.rcParams['savefig.format'], mpl.rcParams['figure.dpi'], mpl.rcParams['figure.figsize'], mpl.rcParams['font.size'], mpl.rcParams['figure.subplot.bottom']
Out[8]: ('pdf', 99.0, [7.0, 5.0], 9.0, 0.1)

As shown, after switching to Qt backend, the parameters are updated to the kernel defaults (https://github.com/spyder-ide/spyder-kernels/blob/09c370aab411c954f869649279481636f666098b/spyder_kernels/console/start.py#L101C1-L116C1). Except that the savefig.format

Versions

  • Spyder version: 6.0.0a5 (standalone)
  • Python version: 3.10.13 64-bit
  • Qt version: 5.15.8
  • PyQt5 version: 5.15.9
  • Operating System: macOS-14.4.1-x86_64-i386-64bit

Dependencies

# Mandatory:
atomicwrites >=1.2.0              :  1.4.1 (OK)
chardet >=2.0.0                   :  5.2.0 (OK)
cloudpickle >=0.5.0               :  3.0.0 (OK)
cookiecutter >=1.6.0              :  2.5.0 (OK)
diff_match_patch >=20181111       :  20230430 (OK)
intervaltree >=3.0.2              :  3.1.0 (OK)
IPython >=8.13.0,<9.0.0,!=8.17.1  :  8.21.0 (OK)
jedi >=0.17.2,<0.20.0             :  0.19.1 (OK)
jellyfish >=0.7                   :  1.0.3 (OK)
jsonschema >=3.2.0                :  4.21.1 (OK)
keyring >=17.0.0                  :  24.3.0 (OK)
nbconvert >=4.0                   :  7.16.0 (OK)
numpydoc >=0.6.0                  :  1.6.0 (OK)
parso >=0.7.0,<0.9.0              :  0.8.3 (OK)
pexpect >=4.4.0                   :  4.9.0 (OK)
pickleshare >=0.4                 :  0.7.5 (OK)
psutil >=5.3                      :  5.9.8 (OK)
pygments >=2.0                    :  2.17.2 (OK)
pylint >=3.1,<4                   :  3.1.0 (OK)
pylint_venv >=3.0.2               :  3.0.3 (OK)
pyls_spyder >=0.4.0               :  0.4.0 (OK)
pylsp >=1.11.0,<1.12.0            :  1.11.0 (OK)
pylsp_black >=2.0.0,<3.0.0        :  2.0.0 (OK)
pyuca >=1.2                       :  1.2 (OK)
qdarkstyle >=3.2.0,<3.3.0         :  3.2.3 (OK)
qstylizer >=0.2.2                 :  0.2.2 (OK)
qtawesome >=1.3.1,<1.4.0          :  1.3.1 (OK)
qtconsole >=5.5.1,<5.6.0          :  5.5.1 (OK)
qtpy >=2.4.0                      :  2.4.1 (OK)
rtree >=0.9.7                     :  1.2.0 (OK)
setuptools >=49.6.0               :  69.0.3 (OK)
sphinx >=0.6.6                    :  7.2.6 (OK)
spyder_kernels >=3.0.0b5,<3.0.0b6 :  3.0.0b5 (OK)
superqt >=0.6.1,<1.0.0            :  0.6.1 (OK)
textdistance >=4.2.0              :  4.5.0 (OK)
three_merge >=0.1.1               :  0.1.1 (OK)
watchdog >=0.10.3                 :  4.0.0 (OK)
zmq >=24.0.0                      :  25.1.2 (OK)

# Optional:
cython >=0.21                     :  3.0.8 (OK)
matplotlib >=3.0.0                :  3.8.2 (OK)
numpy >=1.7                       :  1.26.4 (OK)
pandas >=1.1.1                    :  2.2.0 (OK)
scipy >=0.17.0                    :  1.12.0 (OK)
sympy >=0.7.3                     :  1.12 (OK)
@ccordoba12
Copy link
Member

Hey @mrclary, thanks for reporting. We don't respect the Matplotlib rc default parameters because we don't read them to set them in the kernel (we use the option set by users in our Preferences dialog).

I guess we'd need to do that to fix this issue, but since it's not critical, I'm going to leave it for 6.1

@mrclary
Copy link
Contributor Author

mrclary commented May 2, 2024

There are two prongs to this issue. First, if we only apply the settings conditioned on whether inline is the backend, then these settings will not incorrectly override the user's rc settings on kernel startup. Second, when switching from inline to a different backend in the same kernel, we only have to add matplotlib.rc_file_defaults() to the commands that change the backend.

I'll take a look and propose a fix.

@mrclary
Copy link
Contributor Author

mrclary commented May 14, 2024

@impact27, do you have any insight on this?

@mrclary mrclary changed the title Matplotlib rc parameter defaults not respected by interactive setting. IPython console Matplotlib rc parameters are inconsistent when switching backends May 15, 2024
@mrclary mrclary self-assigned this May 16, 2024
@ccordoba12 ccordoba12 modified the milestones: v6.1.0, v6.0beta2 May 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants