我使用熊猫和matplotlib生成条形图与大量的酒吧。
我知道如何循环通过选定颜色的列表(如何给熊猫/matplotlib条形图自定义颜色)。问题是选择什么颜色,以便我的图表在论文上打印得很好(这是一篇研究论文)。我最感兴趣的是柱子之间足够的对比度和看起来令人愉快的颜色选择。我希望有多种颜色,而不是灰度或单一色调的配色方案。
从人们使用的方案中是否有预先确定的方案可供选择?
所以你的要求是“大量的颜色”和“打印时没有两种颜色应该映射到相同的灰度值”,对吗?第二个标准应该满足任何“连续”的彩色贴图(单向亮度增加或减少)。我认为在matplotlib中的所有选择中,您只剩下cubehelix
(已经提到),gnuplot2
和gnupt2
:
白线是每种颜色的亮度,因此可以看到每种颜色在打印时将映射到不同的灰度值。黑线是色调,表示它们在各种颜色中循环。
请注意,cubehelix实际上是一个函数(来自matplotlib.\u cm import cubehelix
),您可以调整螺旋的参数以产生更广泛的颜色,如下所示。换句话说,cubehelix不是一个彩色贴图,它是一个彩色贴图家族。以下是两种变体:
对于变化较小的颜色(对许多事情来说更令人愉快,但对你的条形图来说可能不是),也许可以尝试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)
在1.5版本中,matplotlib将附带4个新的合理设计的彩色地图:
'viridis'
(默认颜色映射为2.0)'岩浆'
'等离子'
地狱
.Matplotlib | SciPy 2015的更好的默认颜色映射中介绍了设计这些颜色映射的过程。
为该过程开发的工具可以通过pip install viscm
安装。
我建议使用cubehelix
彩色地图。它被设计成在颜色和灰度上都有正确的亮度顺序。
我不知道预先确定的计划。我通常使用几种颜色来绘制出版图。在选择颜色时,我主要考虑两件事:
如果在matplotlib图中没有指定颜色,则它具有循环使用的默认颜色集。这个答案很好地解释了如何更改默认颜色集。你可以根据你喜欢的颜色来定制,这样情节就会依次使用它们。