【问题标题】:Color selection for matplotlib that prints well打印良好的 matplotlib 的颜色选择
【发布时间】:2012-12-07 18:11:00
【问题描述】:

我正在使用 pandas 和 matplotlib 生成带有很多条形的条形图。

我知道如何循环浏览选定颜色的列表 (How to give a pandas/matplotlib bar graph custom colors)。 问题是要选择什么颜色,以便我的图表可以很好地打印在纸上(用于研究论文)。我最感兴趣的是列之间的足够对比和看起来令人愉快的颜色选择。我想要多种颜色而不是灰度或单色调配色方案。

是否有任何预先确定的方案可供人们使用?

【问题讨论】:

    标签: printing matplotlib pandas


    【解决方案1】:

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

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

    注意,cubehelix 实际上是一个函数 (from matplotlib._cm import cubehelix),您可以调整 helix 的参数以产生更广泛的颜色,as shown here。换句话说,cubehelix 不是颜色图,它是一组颜色图。这里有 2 个变体:

    对于变化较少的颜色(对许多事情来说更令人愉悦,但可能不适用于您的条形图),不妨试试 ColorBrewer 3 色地图,YlOrRd、PuBuGn、YlGnBu:

    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)
    

    这些是新人:

    【讨论】:

      【解决方案2】:

      在 1.5 中,matplotlib 将附带 4 个新的合理设计的颜色图:

      • 'viridis'(2.0 的默认颜色图)
      • 'magma'
      • 'plasma'
      • 'inferno'。

      设计这些颜色图的过程在A Better Default Colormap for Matplotlib | SciPy 2015 中介绍。

      为此过程开发的工具可以通过pip install viscm安装。


      我建议使用cubehelix 彩色地图。 designed 在颜色和灰度上都有正确的亮度排序。

      【讨论】:

        【解决方案3】:

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

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

        如果在 matplotlib 图中未指定颜色,则它有一组默认的循环颜色。 This answer 对如何更改默认颜色集有很好的解释。您可以将其自定义为您喜欢的一组颜色,以便绘图轮流使用它们。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-05-24
          • 2018-08-12
          • 1970-01-01
          • 2021-08-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-03
          相关资源
          最近更新 更多