适合打印的matplotlib颜色选择

10

我正在使用pandas和matplotlib生成大量柱状图。

我知道如何循环遍历选定颜色的列表,(如何为pandas/matplotlib柱状图自定义颜色)。问题是选择哪些颜色使得我的图表在纸上打印出来看起来漂亮(这是一篇研究论文)。我最感兴趣的是列之间有足够的对比度,并且选择的颜色看起来令人愉悦。我希望有多种颜色而不是灰度或单色调色板。

是否有任何预先确定的选项可供选择?

3个回答

20

所以您的要求是“有很多颜色”并且“打印时没有两种颜色应映射到相同的灰度值”,对吗?第二个标准应该由任何“顺序”颜色映射(在亮度上单调增加或减少)满足。我认为在matplotlib的所有选择中,您只剩下、和:

3 colormaps, showing luminance and hue

白色线条代表每种颜色的亮度,因此可以看出每种颜色在打印时会映射到不同的灰度值。黑色线条是色调,显示它们循环穿过各种颜色。

请注意,cubehelix实际上是一个函数(from matplotlib._cm import cubehelix),您可以调整螺旋的参数以产生更广泛变化的颜色如此所示。换句话说,cubehelix不是一种颜色映射,而是一组颜色映射系列。这里有两个变化:

enter image description here

enter image description here

对于颜色变化较小的情况(对于许多事物来说更加愉悦,但可能不适用于您的条形图),可以尝试使用ColorBrewer 3种颜色地图:YlOrRdPuBuGnYlGnBu

3 colormaps with monotonic luminance but less hue variation

https://www.flickr.com/photos/omegatron/7298887952/

虽然这种颜色可以用于标识柱状图,但我不建议仅使用此颜色。您应始终使用文本标签作为主要标识符。还要注意,其中一些会产生完全与背景混合的白色条形,因为它们是用于热图而不是图表颜色的:

from matplotlib import pyplot as plt
import pandas, numpy as np  # I find np.random.randint to be better

# Make the data
x = [{i:np.random.randint(1,5)} for i in range(10)]
df = pandas.DataFrame(x)

# Make a list by cycling through the colors you care about
# to match the length of your data.
cmap = plt.get_cmap('cubehelix')
indices = np.linspace(0, cmap.N, len(x))
my_colors = [cmap(int(i)) for i in indices]

# Specify this list of colors as the `color` option to `plot`.
df.plot(kind='bar', stacked=True, color=my_colors)
gnuplot bar graph gnuplot2 bar graph cubehelix bar graph YlGnBu bar graph

这些是新来的人:

new guys colorbars viridis bar graph

14

在1.5版本中,matplotlib将会使用4种新的理性设计的颜色地图:

  • 'viridis'(2.0版默认颜色地图)
  • 'magma'
  • 'plasma'
  • 'inferno'

设计这些颜色映射的过程在SciPy 2015 | 为Matplotlib设计更好的默认颜色映射中有详细介绍。

enter image description here

用于此过程的工具可以通过pip install viscm进行安装。


我建议使用cubehelix颜色地图。它被设计成在彩色和灰度中都具有正确的亮度排序。


5

我不知道有预先制定的方案。我通常在发布图表时使用几种颜色。在选择颜色时,我主要考虑以下两点:

  1. 色盲这个维基百科页面提供了很多关于选择对大多数色盲人可辨别的颜色的好信息。如果你注意到“编辑提示”部分,一旦你考虑到这些指南,只有少数几组可用的颜色。(一个好的经验法则是永远不要混合红色和绿色!)你还可以使用链接的色盲模拟器来查看你的图表是否能够清晰地显示。
  2. 亮度:我所在领域中的大多数期刊默认情况下将以黑白方式发布。即使大多数人在线阅读文章,我仍然想确保图表在灰度打印时可被理解。因此,我会使用具有不同亮度的颜色来注意。测试的一个好方法是只将生成的图像去饱和,你就能很清楚地了解它在灰度打印时的样子。在许多情况下(特别是线状或散点图),我还使用其他东西来区分集合(例如线型,不同的标记)。

如果在matplotlib图中未指定颜色,则它有一个默认的颜色集合,并循环使用。 这个答案对如何更改默认颜色集合进行了很好的解释。你可以将其自定义为您喜欢的颜色集,因此图表会依次使用它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接