minus sign instead of hyphen in negative axes labels

Matplotlib currently uses the "hyphen" character instead of a "minus
sign" when printing negative numbers in plots.

While these two characters are traditionally not distinguished in
monospaced fonts, there is a big difference in proportional fonts. A
hyphen (Unicode character 0x002d) is very short and used between words,
whereas a minus sign (Unicode: 0x2212) is much longer and looks exactly
like the horizontal part of a plus sign.

Practically all modern fonts do contain a minus sign. In those fonts
that still lack a minus sign, the (often slightly lower/thinner/longer)
"en dash" is usually a much less painful substitute than the hyphen.
[The PostScript standard encoding lacks a minus sign, but the PostScript
symbol font has one at 0x2d, as documented in
http://www.unicode.org/Public/MAPPINGS/VENDORS/ADOBE/symbol.txt ]

Example:

from pylab import *
plot([-3, -2, -1], [1,-3,-2])
title(u"wrong: -2..+2 correct: \u22122..+2")
show()

Is there a way to cause matplotlib to use the correct minus-sign glyph?
That would help to keep typographically very picky editors of scientific
journals happy ...

Markus

···

--
Markus Kuhn, Computer Laboratory, University of Cambridge
http://www.cl.cam.ac.uk/~mgk25/ || CB3 0FD, Great Britain

Presently, there's no direct way to do this. matplotlib uses the standard Python (derived from C) number formatting which uses a hyphen. There are a couple of workarounds, however.

You can set a custom tick formatter by providing a function and wrapping it in a FuncFormatter object. (See attached). You can have your function replace all of the hyphens with minus signs, or force it to use the mathtext formatting (which uses minus signs by default) by wrapping the text in '$'. Alternatively, if your plot is designed for inclusion in t a (La)TeX document, you can turn usetex on in your matplotlibrc.

All that said, it might be nice to make this the default behavior in future versions of matplotlib. We're about to make a release, so I don't want to put this in right now. Could you possibly file a "Feature Request" in the tracker so we don't lose track of this?

Cheers,
Mike

Markus Kuhn wrote:

···

Matplotlib currently uses the "hyphen" character instead of a "minus
sign" when printing negative numbers in plots.

While these two characters are traditionally not distinguished in
monospaced fonts, there is a big difference in proportional fonts. A
hyphen (Unicode character 0x002d) is very short and used between words,
whereas a minus sign (Unicode: 0x2212) is much longer and looks exactly
like the horizontal part of a plus sign.

Practically all modern fonts do contain a minus sign. In those fonts
that still lack a minus sign, the (often slightly lower/thinner/longer)
"en dash" is usually a much less painful substitute than the hyphen.
[The PostScript standard encoding lacks a minus sign, but the PostScript
symbol font has one at 0x2d, as documented in
http://www.unicode.org/Public/MAPPINGS/VENDORS/ADOBE/symbol.txt ]

Example:

from pylab import *
plot([-3, -2, -1], [1,-3,-2])
title(u"wrong: -2..+2 correct: \u22122..+2")
show()

Is there a way to cause matplotlib to use the correct minus-sign glyph?
That would help to keep typographically very picky editors of scientific
journals happy ...

Markus

--
Michael Droettboom
Science Software Branch
Operations and Engineering Division
Space Telescope Science Institute
Operated by AURA for NASA

Forgot to attach example. Sorry.

Michael Droettboom wrote:

custom_minus.py (346 Bytes)

···

Presently, there's no direct way to do this. matplotlib uses the standard Python (derived from C) number formatting which uses a hyphen. There are a couple of workarounds, however.

You can set a custom tick formatter by providing a function and wrapping it in a FuncFormatter object. (See attached). You can have your function replace all of the hyphens with minus signs, or force it to use the mathtext formatting (which uses minus signs by default) by wrapping the text in '$'. Alternatively, if your plot is designed for inclusion in t a (La)TeX document, you can turn usetex on in your matplotlibrc.

All that said, it might be nice to make this the default behavior in future versions of matplotlib. We're about to make a release, so I don't want to put this in right now. Could you possibly file a "Feature Request" in the tracker so we don't lose track of this?

Cheers,
Mike

Markus Kuhn wrote:

Matplotlib currently uses the "hyphen" character instead of a "minus
sign" when printing negative numbers in plots.

While these two characters are traditionally not distinguished in
monospaced fonts, there is a big difference in proportional fonts. A
hyphen (Unicode character 0x002d) is very short and used between words,
whereas a minus sign (Unicode: 0x2212) is much longer and looks exactly
like the horizontal part of a plus sign.

Practically all modern fonts do contain a minus sign. In those fonts
that still lack a minus sign, the (often slightly lower/thinner/longer)
"en dash" is usually a much less painful substitute than the hyphen.
[The PostScript standard encoding lacks a minus sign, but the PostScript
symbol font has one at 0x2d, as documented in
http://www.unicode.org/Public/MAPPINGS/VENDORS/ADOBE/symbol.txt ]

Example:

from pylab import *
plot([-3, -2, -1], [1,-3,-2])
title(u"wrong: -2..+2 correct: \u22122..+2")
show()

Is there a way to cause matplotlib to use the correct minus-sign glyph?
That would help to keep typographically very picky editors of scientific
journals happy ...

Markus

--
Michael Droettboom
Science Software Branch
Operations and Engineering Division
Space Telescope Science Institute
Operated by AURA for NASA