Skip to content

ENH: Styler.bar accepts matplotlib colormap #43662

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

Merged
merged 14 commits into from
Oct 10, 2021

Conversation

attack68
Copy link
Contributor

No one has requested this but I think its nice none-the-less, especially in finance / science. Kind of like background_gradient with slightly different vizualisations.

Screen Shot 2021-09-19 at 21 25 07

Screen Shot 2021-09-19 at 21 32 01

@attack68 attack68 marked this pull request as ready for review September 20, 2021 21:47
@attack68 attack68 changed the title WIP: ENH: Styler.bar accepts matplotlib colormap ENH: Styler.bar accepts matplotlib colormap Sep 20, 2021
@attack68 attack68 added Enhancement Styler conditional formatting using DataFrame.style labels Sep 21, 2021
@@ -3523,15 +3521,48 @@ def css_calc(x, left: float, right: float, align: str):
"value defining the center line or a callable that returns a float"
)

rgbas = None
Copy link
Contributor

Choose a reason for hiding this comment

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

don't we have a similar utlity in the plotting routines?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

had a quick look, this is converting mpl colors to hex codes, which is not the usual direction for plotting.

ignoring the arg validation, though which is specific to the method, this op is just a single loop comprehension: [mpl_colors.rgb2hex(rgba) for rgba in rgbas]

Copy link
Contributor Author

Choose a reason for hiding this comment

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

an alternative is to add a cmap arg, which accepts a string or mpl ColorMap, similar to background_gradient and text_gradient.

Advantage is: i) consistency ii) autoloading a colormap from string rather than user have to create a Colormap instance.

Disadvatange is: having a color and a cmap arg which is slightly confusing although can b documented away.

?

Copy link
Contributor

Choose a reason for hiding this comment

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

hmm i do like the consisteny of i), can we kill the color arg (may need to deprecate)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

not really because you need differentiate between a color which is a valid css str e.g. "#ee3ee" or "rgb(10,200,10)" or "salmon" and between a string which is a matplotlib colormap, i.e. "inferno" or "PuBu",

Copy link
Contributor

Choose a reason for hiding this comment

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

do we have this color, cmap api anywhere else?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The following use color: highligh_min/max/betwen/quantile/null, and these use cmap: text/background_gradient. But the use is specific where either a specific color or a color gradient is useful.
For bar either is useful.

Matplot lib also separates the arguments on some functions, e.g. scatter, where it has a c, color and cmap argument: https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.scatter.html?highlight=scatter#matplotlib.axes.Axes.scatter

Copy link
Contributor

Choose a reason for hiding this comment

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

hah, mpl api is not great here

@attack68 attack68 requested a review from jreback September 23, 2021 19:23
@jreback jreback added this to the 1.4 milestone Oct 10, 2021
@jreback jreback merged commit c5eea60 into pandas-dev:master Oct 10, 2021
@jreback
Copy link
Contributor

jreback commented Oct 10, 2021

ok this is fine, thanks @attack68

@attack68 attack68 deleted the styler_bar_colors branch October 11, 2021 15:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Enhancement Styler conditional formatting using DataFrame.style
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants