Thanks to visit codestin.com
Credit goes to github.com

Skip to content

[Bug]: Setting font.sans-serif is impossible by the intended way using matplotlib.rc because it contains a hyphen. #30021

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

Open
matj1 opened this issue May 6, 2025 · 1 comment
Milestone

Comments

@matj1
Copy link

matj1 commented May 6, 2025

Bug summary

The functions matplotlib.rc and matplotlib.pyplot.rc process settings given as named parameters. Named parameters can't contain hyphens; therefore, it is impossible to set font.sans-serif so because it contains a hyphen.

It is possible to set the parameter by different means, but this seems like the main way, so I consider that it does not work a significant shortcoming. How else this parameter can be set:

  • matplotlib.rcParams["font.sans-serif"] = "Fira Sans"
  • matplotlib.rc("font", **{"sans-serif": "Fira Sans"})

Code for reproduction

from matplotlib import rc
rc("font", sans-serif="Fira Sans")

Actual outcome

>>> from matplotlib import rc
>>> rc("font", sans-serif="Fira Sans")
  File "<python-input-1>", line 1
    rc("font", sans-serif="Fira Sans")
               ^^^^^^^^^^^
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?

Expected outcome

I think that that the parameter is named font.sans-serif is a mistake, and it should be named something like font.sans_serif with an underscore. It may be too late to change that, but an alias would work. rc already has aliases like lwlinewidth, lslinestyle, ccolor. I expect that there would be an alias like sanssans-serif so I could use rc("font", sans="Fira Sans").

Additional information

No response

Operating system

No response

Matplotlib Version

3.10.1

Matplotlib Backend

No response

Python version

Python 3.13.3

Jupyter version

No response

Installation

None

@tacaswell
Copy link
Member

I agree that adding an alias of 'sans': 'sans-serif' is a reasonable feature to add (as is maybe 'sans_serif'). Any interest in working on that @matj1 ?

Changing the name of the rcparam is not something I think is should be on the table. We have carried this name for 21+ years. It is not worth the cost of thrashing all of the users who are setting it one of the other ways to ask them to change their code.

Unfortunately given that this is a syntax error there is no way for us to inject a better error.


It appears we gained the font.sans-serif rcparam in 41f1c49 in April 2004 (it can now drink in the US) where as def rf() first shows up in e34a333 in September 2004 (however due to a glitch in the migration from svn -> git that commit has a lot of code just "appear" so it is not definitive that the key existed before the function).

Personally I reach for mpl.rcParams[...] = ... first and view rc as a helper (as it a wrapper around the calling setitem).

@tacaswell tacaswell added this to the v3.11.0 milestone May 6, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants