3 ms·
Just FYI, the colormap you picked is terrible. There's many experiments to back this claim: http://gvi.seas.harvard.edu/paper/evaluation-artery-visualizations-
by cscheid 14y ago
Just FYI, the colormap you picked is terrible. There's many experiments to back this claim:
http://gvi.seas.harvard.edu/paper/evaluation-artery-visualizations-heart-disease-diagnosis http://gvi.seas.harvard.edu/paper/evaluation-artery-visualiz...
http://www.jwave.vt.edu/~rkriz/Projects/create_color_table/color_07.pdf http://www.jwave.vt.edu/~rkriz/Projects/create_color_table/c...
Colormap design is arguably as hard as visualization design. My favorite go-to place for them is http://colorbrewer2.org http://colorbrewer2.org, but if you need to know only one thing about them, it's that varying hue continuously does not work nearly as well as you might think it does.
In addition, the fundamental reason scatterplots are bad, even with opacity, is essentially that opacity gives rise to an exponential relationship between overplotting and transparency.
There exists an alternative solution, which is to use additive blending and an adaptive linear colorscale, from zero to maximum-overdraw. Unfortunately, at present there exists no data visualization toolkits which support this.
- yummyfajitas 14y agoThey suggest the rainbow color map is a poor choice because it hides small details. I'm advocating regularization which ensures that you have no small details. But after reading that paper, I do agree that rainbow has some significant issues. One thing that might be worth trying: make a rainbow color map, but map values to colors in such a way that |x-y|=C x cielab_dist(color(x), color(y)).
- gammarator 14y agoI believe the 'Spectral' colormap (with a capital S) in matplotlib does exactly that. Based on the names, it seems [1, 2] (along with all the other capitalized matplotlib colormaps) to be a ColorBrewer [3] colormap, which are all designed with these perceptual considerations in mind [4]. [1] https://github.com/gka/chroma.js/wiki/Predefined-Colors https://github.com/gka/chroma.js/wiki/Predefined-Colors [2] http://matplotlib.sourceforge.net/examples/pylab_examples/show_colormaps.html http://matplotlib.sourceforge.net/examples/pylab_examples/sh... [3] http://colorbrewer2.com/ http://colorbrewer2.com/ [4] http://vis4.net/blog/posts/avoid-equidistant-hsv-colors/ http://vis4.net/blog/posts/avoid-equidistant-hsv-colors/
- carlob 14y ago>In addition, the fundamental reason scatterplots are bad, even with opacity, is essentially that opacity gives rise to an exponential relationship between overplotting and transparency. can you elaborate on this, I don't see why it would not be linear. >There exists an alternative solution, which is to use additive blending and an adaptive linear colorscale, from zero to maximum-overdraw. Unfortunately, at present there exists no data visualization toolkits which support this. I think this _might_ be done in Mathematica, since Graphics objects can be manipulated symbolically, but I might be wrong.
- cscheid 14y agoIt boils down to the (very reasonable) way alpha blending works. Alpha was originally designed to always lie between zero and one, which for compositing makes sense. For scatterplot colormapping, not so much: If you create a plot with opacity alpha, and which puts N points on top of each other, the remaining 'transparency', that is, the resulting opacity is 1 - (1 - alpha)^N This is an exponential, which has the unfortunate feature that it's flat for most of the regime, and then spikes in a relatively short scale. The spike is where we get color differentiation (different opacities get different colors). That's bad: color differentiation should be uniform across the scale. I'm pretty certain Mathematica doesn't do this right either, because it's a pixel-based technique that requires frame buffer manipulation. Instead of rendering with the usual blending operation, you do everything with additive blending, compute the maximum overdraw, and then color-scale linearly.