提问者:小点点

打印效果好的matplotlib的颜色选择


我使用熊猫和matplotlib生成条形图与大量的酒吧。

我知道如何循环通过选定颜色的列表(如何给熊猫/matplotlib条形图自定义颜色)。问题是选择什么颜色,以便我的图表在论文上打印得很好(这是一篇研究论文)。我最感兴趣的是柱子之间足够的对比度和看起来令人愉快的颜色选择。我希望有多种颜色,而不是灰度或单一色调的配色方案。

从人们使用的方案中是否有预先确定的方案可供选择?


共3个答案

匿名用户

所以你的要求是“大量的颜色”和“打印时没有两种颜色应该映射到相同的灰度值”,对吗?第二个标准应该满足任何“连续”的彩色贴图(单向亮度增加或减少)。我认为在matplotlib中的所有选择中,您只剩下cubehelix(已经提到),gnuplot2gnupt2

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

请注意,cubehelix实际上是一个函数(来自matplotlib.\u cm import cubehelix),您可以调整螺旋的参数以产生更广泛的颜色,如下所示。换句话说,cubehelix不是一个彩色贴图,它是一个彩色贴图家族。以下是两种变体:

对于变化较小的颜色(对许多事情来说更令人愉快,但对你的条形图来说可能不是),也许可以尝试ColorBrewer 3色地图,YlOrRdPuBuGnYlGnBu

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)

匿名用户

在1.5版本中,matplotlib将附带4个新的合理设计的彩色地图:

  • 'viridis'(默认颜色映射为2.0)
  • '岩浆'
  • '等离子'
  • 地狱.

Matplotlib | SciPy 2015的更好的默认颜色映射中介绍了设计这些颜色映射的过程。

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

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

匿名用户

我不知道预先确定的计划。我通常使用几种颜色来绘制出版图。在选择颜色时,我主要考虑两件事:

  1. 色盲:维基百科上的这个页面有很多关于选择颜色的好信息,这些颜色对大多数色盲的人来说是可以区分的。如果你注意到“编辑提示”部分,一旦你考虑到指南,只有几套颜色可用。(一个好的经验法则是永远不要混合红色和绿色!)您也可以使用链接的色盲模拟器来查看您的绘图是否清晰可见。
  2. 亮度:我所在领域的大多数期刊将发表在B

如果在matplotlib图中没有指定颜色,则它具有循环使用的默认颜色集。这个答案很好地解释了如何更改默认颜色集。你可以根据你喜欢的颜色来定制,这样情节就会依次使用它们。