FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Add _repr_png_ and _repr_html_ to Colormap objects. by bdice · Pull Request #17888 · matplotlib/matplotlib · GitHub

Repository navigation

Add _repr_png_ and _repr_html_ to Colormap objects. - #17888

Merged
tacaswell merged 7 commits into
matplotlib:masterfrom
bdice:colormap-repr
Jul 12, 2020
Merged

tacaswell merged 7 commits into
matplotlib:masterfrom
bdice:colormap-repr

Conversation

bdice commented Jul 11, 2020 •
edited
Loading

Copy link
Copy Markdown
Contributor

PR Summary

This PR adds _repr_png_ and _repr_html_ methods to the matplotlib.colors.Colormap class, enabling visual representations of Colormap objects in IPython / Jupyter settings.

Demo

Resolves #15616.

PR Checklist

  • Has Pytest style unit tests
  • Code is Flake 8 compliant
  • New features are documented, with examples if plot related
  • Documentation is sphinx and numpydoc compliant
  • Added an entry to doc/users/next_whats_new/ if major new feature (follow instructions in README.rst there)
  • Documented in doc/api/next_api_changes/* if API changed in a backward-incompatible way

bdice marked this pull request as ready for review July 11, 2020 17:49

dopplershift left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Looks good pending CI passing

dopplershift added this to the v3.4.0 milestone Jul 11, 2020

dopplershift commented Jul 11, 2020 •
edited
Loading

Copy link
Copy Markdown
Contributor

This is going to be really awesome for our notebook users. I'll be sure to feature it in the workshops I teach.

tacaswell left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Better tests are always better, but I'm also 👍 in with any level of testing.

QuLogic commented Jul 11, 2020

Copy link
Copy Markdown
Member

For the PNG, I guess this is okay. However, colormaps have some other options like bad/over/under colors, which I think we could also insert into the HTML repr.

jklymak commented Jul 11, 2020

Copy link
Copy Markdown
Member

... good point - extend='both' would be a nice addition....

Copy link
Copy Markdown
Member

I am happy to bank this improvement and then sort out how to handle the over / under / bad.

@story645 suggested something like f'{name} (over {html rect of over color} | under {html rect of under color} | bad {html rect of bad color}'

Copy link
Copy Markdown
Member

Spoke with @bdice on audio. Because we don't currently have public api to get the under/over/bad values I am going to merge this PR as-is and @bdice we open a new PR adding get_* methods and adding them to the html repr.

jklymak commented Jul 12, 2020

Copy link
Copy Markdown
Member

I guess I'm somewhat leery about this. Is there some reason this doesn't just create a colorbar and then fill the png with that? You won't get the over under w/o the colorbar logic anyhow. It would also be nice if the repr had an axes either going from 0-1 or from 0-N where N is the number of colours.

Copy link
Copy Markdown
Member

I suggested to go down this route of direct PNG generation to get the simplest possible code to get a visual representation of the colormap. We already have a hard dependency on pillow so this seems way simpler than going through making a figure -> colorbar -> save it. I also think the split here between the png repr (just the color ramp) and the html (colorramp + metadata) so it will play nicely with some lower-fidelity UI (like terminals that can display png).

I do not think that the tick labels are particularly useful (we don't show them in https://matplotlib.org/3.2.2/tutorials/colors/colormaps.html) because we only want to show the gamut.

As for adding information to the html repr we should move that discussion to #17900

I'm going to go ahead and merge this (despite @jklymak 's concerns) because this is definitely an improvement and all of the user feedback I have seen on this has been super positive.

tacaswell merged commit 068e0f4 into matplotlib:master Jul 12, 2020

Copy link
Copy Markdown
Member

Congratulations on your first Matplotlib PR @bdice 🎉

Copy link
Copy Markdown

Really looking forward to this feature!

Question: Does this already deal with transparent colormaps? I recently had troubles establishing a custom colormap with transparency, because whenever I plotted it, the background in my notebook was white, so I couldn't tell if my transparency settings actually worked.

I ended up with this snippet, but it would be great if the _repr_html/_repr_png could just show a grey-checkered background.

x = numpy.arange(256)
fig, ax = pyplot.subplots(figsize=(12,1))
ax.scatter(x, numpy.ones_like(x) - 0.01, s=100, c=[
    cmap_without_transparency(v)
    for v in x
])
ax.scatter(x, numpy.ones_like(x) + 0.01, s=100, c=[
    cmap_with_transparency(v)
    for v in x
])
ax.set_ylim(0.9, 1.1)
pyplot.show()

QuLogic commented May 20, 2021

Copy link
Copy Markdown
Member

This is already available in 3.4.0. It does not do anything special for transparency.

This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
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.

Colormaps should have a _repr_html_ that is an image of the colormap

7 participants


Back | FazBrowse Home | New Git URL