visdat icon indicating copy to clipboard operation
visdat copied to clipboard

Affixing colours for R classes in `vis_dat`

Open njtierney opened this issue 8 years ago • 9 comments

So vis_dat uses the default ggplot colours, which are great! But, I wonder if perhaps it might be more informative to use specific colours for specific classes. For example, if the colour red was always associated with characters, and blue was integers, etc.

I'm not sure if there's an established palette for this sort of thing, but I guess I could look into using a nice text editor scheme for a starting point.

Thoughts are very welcome!

njtierney avatar May 29 '16 15:05 njtierney

For example:

  • Red = Character
  • Blue = Integer
  • Purple = Double
  • Green = Factor
  • Orange = Logical
  • Yellow = Date

njtierney avatar May 29 '16 15:05 njtierney

Make an ontology of data types, map it to a spectrum and line up the colours. Character and factor are similar, so colour them similarly. Dates are written as text but closer to doubles than anything, surely.

samclifford avatar May 30 '16 01:05 samclifford

This is a really cool idea!

njtierney avatar May 30 '16 02:05 njtierney

Grey = missing

That is my most fervently held belief.

Otherwise, I wonder if there is either something you should copy (Trifacta?) or some principles you should obey, relating to common forms of colourblindness, prevalence of different variables types, or what people are trying to distinguish. Re: the last thing, that actually means you would want character and factor to be really different because having a factor that you think is character is a huge source of data analysis headaches.

Whatever you do, seems like you'd want to make it fairly easy for user to change this palllete or look at "this" vs. everything else.

jennybc avatar May 30 '16 03:05 jennybc

Thanks @jennybc!

  1. Agreed that Grey = Missing!
  2. I agree with you re colourblindness - the default palette should be colourblind friendly.
  3. Re your point on making it easy to look at "this" vs. everything else, do you feel that this sort of ties into the idea of giving vis_dat expectations, as in #15? Or are you more thinking along the lines of this?
`vis_dat(data, compare = "Factor")` 
  1. In terms of looking at similarity of R data types, I could give more colour "distance" to those that are most similar to each other? I wonder if it's worthwhile spinning up a little survey to send out to people regarding R data type similarity to help sorta crowd source the idea. For example, they could be asked to rank types by their similarity, e.g:
Rank Type
1 Character
2 Date
3 Factor
4 Integer
5 Logical
6 Double

And then ask people to describe which two (or more) are often mistaken for another?

Perhaps this data-driven approach a bit too meta, though.

njtierney avatar May 30 '16 03:05 njtierney

Re your point on making it easy to look at "this" vs. everything else

I have a hard time telling the difference between the issue and the example above. But basically agree someone might want to look at only one issue at a time, i.e. just missing data or data that meet some other criteria.

In terms of looking at similarity of R data types, I could give more colour "distance" to those that are most similar to each other?

I think your own common sense and thought are enough (vs. survey). My point: the initial proposal has red for character and green for factor, which would be tough on colourblind people trying to find unexpected factors. Another important distinction to help people notice is probably integer vs double.

jennybc avatar May 30 '16 06:05 jennybc

Thanks @jennybc !

I'm really keen to implement #15 when I get the chance, at this stage here is where I'm at with the colours being fixed. commit https://github.com/njtierney/visdat/commit/b24cecc2865038686e058c15c3785415d92b2e55 has added a palette argument to vis_dat. There are three arguments, "default", "qual", and "cb_safe"

Default is just as-is

vis_dat(airquality, palette = "default")

image

"qual"

vis_dat(airquality, palette = "qual")

image

This is nice, but not super colour blind friendly.

"cb_safe" provides a better solution.

vis_dat(airquality, palette = "cb_safe")

image

One issue from here is that I have only provided colours for the 6 classes ("character", "date", "factor", "integer", "logical", "numeric"), and I would like to maybe provide a different set of colours for any extra classes that fall outside of these. Perhaps I can create a palette builder function that takes the classes in the plot, this might be able to link to scale_fill_brewer.

These colours are just working ideas at the moment.

I couldn't find colours from trifacta, at this stage I am using info from colorbrewer2.org

njtierney avatar May 31 '16 13:05 njtierney

just adding another pallete that might be cool: http://chriskempson.com/projects/base16/

njtierney avatar Jan 03 '17 05:01 njtierney

I want to chime in that I think the colorblind safe should be an option, not the default, since it reduces the utility quite a bit (for non-colorblind users).

jzadra avatar Nov 28 '18 18:11 jzadra