Skip to content
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

Guidance colorizing values within a column #655

Open
jmw86069 opened this issue Jan 24, 2024 · 2 comments
Open

Guidance colorizing values within a column #655

jmw86069 opened this issue Jan 24, 2024 · 2 comments

Comments

@jmw86069
Copy link

I'm excited about this package, and am hopeful it might fit my needs.

I'm trying to colorize values within a column - I have logic, functions, methods I can use to colorize values in a column. I do not see how to apply this logic.

The simplest use case is to colorize positive numeric values blue, since negative is red.
Similarly, I have categorical colors, how might I apply them to a character column?

Best guess, I need to write custom functions to override pillar:::pillar_shaft.classname() for every column class, by the class of data in each column.

Is there another way to inject color into the output?

The vignette/extensions does not describe where to inject color. The custom Body function does receive column values, however they are pillar_component objects which contain data values in the form of (undocumented) pillar_ornament object. I think these values have already been updated by a previous pillar_shaft() step.

In the vctrs package, the vignette "Printing vectors nicely in tibbles" implements a custom function deg_min_color() to demonstrate how to colorize parts of column values. This mechanism is applied to all columns of a given class. So it leads me to conclude that I need to write custom functions for each column class.

However, if I implement a custom pillar_shaft.numeric(), it misses all the fun stuff that happens inside the (hidden) pillar:::pillar_shaft_number(). Same for pillar:::pillar_shaft.character().

Finally, I see new_pillar_shaft() can accept ANSI escape codes in argument formatted, however I don't see how to provide ANSI formatting of my own.

Ideal world, I'd like to pass an optional colorization function... somewhere. :)

Thank you for any guidance!

@jmw86069
Copy link
Author

I'll be upfront, I anticipate a totally reasonable response might be "Try it and let us know if it works."

I think that's a reasonable next step, no shade.

Imagine I write custom functions pillar_shaft.numeric(), pillar_shaft.integer64(), pillar_shaft.character(), pillar_shaft.factor() I probably cover everything I could reasonable handle. If it doesn't work for some reason, then I have something concrete to post and ask.

However, if there happens to be an easier mechanism that I'm missing, then let me know if you have a few minutes. :) Or let me know there is one and I'll look harder for it. Best to you.

@krlmlr
Copy link
Member

krlmlr commented Jan 26, 2024

Thanks for your interest.

I can't spend time thinking deeply about it now. Have you seen https://pillar.r-lib.org/articles/printing.html?

If that doesn't help, a good way might be to implement your desired behavior in a fork of the pillar package. We could then think about how to implement this using the existing extension options.

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

No branches or pull requests

2 participants