I would like to set how xticks are aligned. There is the ha (for horizontalalignment) parameter which controls this with the possible values 'left', 'center' and 'right'.
To globally set this parameter, I tried to set xtick.alignment in my .matplotlibrc config file.
However when setting it to 'left', I get an error (when I start ipython):
Bad val 'right' on line #27
"xtick.alignment : right
"
in file "/home/moritz/.config/matplotlib/matplotlibrc"
Key xtick.alignment: Unrecognized alignment string 'right': valid strings are ['center', 'top', 'bottom', 'baseline', 'center_baseline']
So I tried to set it to 'bottom' (to see what happens) and plotted a simple curve (see code below), but then I got a ValueError:
/usr/lib/python3.8/site-packages/matplotlib/cbook/init.py in _check_in_list(values, **kwargs)
2189 for k, v in kwargs.items():
2190 if v not in values:
-> 2191 raise ValueError(
2192 "{!r} is not a valid value for {}; supported values are {}"
2193 .format(v, k, ', '.join(map(repr, values))))
ValueError: 'top' is not a valid value for align; supported values are 'center', 'right', 'left'
In conclusion, the matplotlibrc validation for the xtick.alignment parameter is bogus.
It looks like #7970 headed out to introduce a vertical-alignment parameter to y-ticklabels only. But then a rework of that in #8081 introduceda parameter for the vertical alignment for y-ticklabels and the horizontal alignment for x-ticklabels - except that validation is still for vertical-alignment only.
Such fix has to go on top of #16483 which is milestoned for 3.3, but given that the problem hasn't bothered anyone since 2.0.1, it might be ok to not hassle about backporting.
and validated it works. As for unit testing, is there a way to test this other than using image comparison tests? Something like a "get_tick_alignment" of the axis or something like that?
Activity
ImportanceOfBeingErnest commented on Feb 27, 2020
It looks like #7970 headed out to introduce a vertical-alignment parameter to y-ticklabels only. But then a rework of that in #8081 introduceda parameter for the vertical alignment for y-ticklabels and the horizontal alignment for x-ticklabels - except that validation is still for vertical-alignment only.
I suppose the easy fix is to just replace
matplotlib/lib/matplotlib/rcsetup.py
Lines 1306 to 1307 in 8ac3ea1
Such fix has to go on top of #16483 which is milestoned for 3.3, but given that the problem hasn't bothered anyone since 2.0.1, it might be ok to not hassle about backporting.
MuhammadFarooq1234 commented on Mar 3, 2020
If no one is working on this, I would like take a shot at it.
timhoffm commented on Mar 3, 2020
Go for it.
MuhammadFarooq1234 commented on Mar 6, 2020
Thanks, I've updated the rcsetup.py like so:
'xtick.alignment': ['center', ['center', 'right', 'left']]
and validated it works. As for unit testing, is there a way to test this other than using image comparison tests? Something like a "get_tick_alignment" of the axis or something like that?
Add test cases for matplotlib#16583
efiring commented on May 6, 2020
Closed by #16727.