10

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

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

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

4

3 回答 3

20

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

3 个颜色图,显示亮度和色调

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

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

在此处输入图像描述

在此处输入图像描述

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

3 个具有单调亮度但色调变化较小的颜色图

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 条形图 gnuplot2条形图 立方体螺旋条形图 YlGnBu 条形图

这些是新人:

新人彩条 viridis 条形图
于 2013-03-25T19:38:22.717 回答
14

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

  • 'viridis'(从 2.0 开始的默认颜色图)
  • 'magma'
  • 'plasma'
  • 'inferno'.

A Better Default Colormap for Matplotlib |中介绍了设计这些颜色图的过程。科学 2015 年

在此处输入图像描述

为这个过程开发的工具可以通过pip install viscm.


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

于 2012-12-21T02:55:08.243 回答
5

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

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

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

于 2012-12-20T09:45:35.343 回答