Skip to content

Conversation

@lucasb-eyer
Copy link

Again a note that this is on top of a few previous PRs, so only look at
the last commit, the other ones are duplicates and will disappear upon
merging the other PRs.

The previous fix to make FuncFormatter work, in
https://github.com/mpld3/mplexporter/pull/67/files
and
mpld3/mpld3@e7fa282
had two issues still: 1) the mpl FuncFormatter API also takes the index as
second argument, which was missing. 2) it exported tickvalues only in
the FixedLocator case, so these were missing for non-fixed FuncFormatter
and hence the FuncFormatter codepath, which also requires them to be
present, was never hit with non-fixed locators.

This fixes both. Again, this was figured out and helped with gpt-codex
and my careful review+cleanup. Codex even identified the two original
commits I'm linking above :)

This will allow to render both major and minor gridlines in mpld3, which
fixes the following issue: mpld3/mpld3#527

As per usual, disclaimer that I co-developed this with gpt-5.1-codex,
having it figure out the issues and give implementation recommendations,
with me testing, verifying, and tidying up the code.

Here's what it has to say, especially wrt the change in API call:

- include minor tick values/length and minor grid style in axis props so minor ticks/grids render in mpld3
- read grid color/linewidth/linestyle from tick kwargs (and rcParams fallback) instead of inspecting gridlines[0], avoiding the get_gridlines(which=…) API that isn’t available on matplotlib 3.10”

Rationale for the kw/rc approach:
`Axis.get_gridlines()` doesn’t accept `which` on matplotlib 3.10, so probing `gridlines[0]` for minor/major fails. Pulling style from the tick keyword dict (which matplotlib populates with `grid_*` fields when you call `ax.grid(...)`) plus
`rcParams` defaults gives the same style without needing `get_gridlines(which=…)`, keeping compatibility and matching user-set grid styles.

(I verified, indeed get_gridlines does not allow specifying which ones - seems like an omission in matplotlib API to me)
Minor ticklabels were missing altogether,
The previous fix to make FuncFormatter work, in
https://github.com/mpld3/mplexporter/pull/67/files
and
mpld3/mpld3@e7fa282
had two issues still: 1) the mpl FuncFormatter API also takes the index as
second argument, which was missing. 2) it exported `tickvalues` only in
the FixedLocator case, so these were missing for non-fixed FuncFormatter
and hence the FuncFormatter codepath, which also requires them to be
present, was never hit with non-fixed locators.

Also add a test, and let tests import `matplotlib` via the
backend-setting mechanism, not only `plt`.

This fixes both. Again, this was figured out and helped with gpt-codex
and my careful review+cleanup. Codex even identified the two original
commits I'm linking above :)
@lucasb-eyer lucasb-eyer force-pushed the lb-functormatter-nonfixed branch from bbf3ff0 to 81af9ee Compare December 16, 2025 09:13
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

Successfully merging this pull request may close these issues.

1 participant