matplotlib的颜色选择打印得很好

vko*_*ori 8 printing matplotlib pandas

我正在使用pandas和matplotlib来生成包含大量条形图的条形图.

我知道如何循环选择所选颜色的列表(如何给出pandas/matplotlib条形图自定义颜色).问题是要选择什么颜色,以便我的图形可以很好地打印在纸上(这是一篇研究论文).我最感兴趣的是柱子和选择的颜色之间的足够对比,看起来很舒服.我想要多种颜色而不是灰度或单色调颜色.

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

end*_*ith 19

所以你的要求是"很多颜色"和"打印时没有两种颜色应该映射到相同的灰度值",对吗?第二个标准应该通过任何"连续"色彩图(其亮度单调增加或减少)来满足.我认为在matplotlib的所有选择中,你留下cubehelix(已经提到过)gnuplot,和gnuplot2:

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

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

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

在此输入图像描述

在此输入图像描述

对于疯狂变化的颜色(更愉快的事情很多,但也许不是你的柱状图),也许尝试了3在ColorBrewer色图,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)
Run Code Online (Sandbox Code Playgroud)

gnuplot条形图

gnuplot2条形图

cubehelix条形图

YlGnBu条形图

这些是新人:

新人颜色栏

viridis条形图


tac*_*ell 12

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

  • 'viridis' (将是2.0中的默认颜色图)
  • 'magma'
  • 'plasma'
  • 'inferno'.

设计这些颜色图的过程在https://youtu.be/xAoljeRJ3lU中介绍.

在此输入图像描述

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


我会建议cubehelix彩色地图.它被设计成在颜色和灰度方面具有正确的亮度排序


tia*_*ago 5

我不知道预定的方案.我通常会使用一些颜色来发布图.在选择颜色时,我主要考虑两件事:

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

如果在matplotlib图中没有指定颜色,则它具有循环的默认颜色集.这个答案对如何更改默认颜色集有很好的解释.您可以将其自定义为您喜欢的颜色集,以便绘图依次使用它们.