将颜色图作为参数传递给函数

时间:2019-05-16 13:31:35

标签: python matplotlib

抱歉,如果这已在其他地方解决。在此站点上有关将对象传递给函数的搜索导致与c ++相关的帖子。 Google的结果指向与生成不同颜色图有关的条目。

背景

我想使用matplotlib颜色图为线图着色。此外,我希望能够指定哪个颜色图,就像我所说的functrion。

方法:

import numpy as np, matplotlib.pyplot as plt

data = [[1,2,3,4], [5,6,7,8], [6,7,83,5]]

def plotting_function(data, color_map=plt.cm.viridis, plot_kwds=None)

    colors = color_map(np.linspace(0,1,len(data))

    if plot_kwds is None:
        plt_kwds = {}

    for i, y in enumerate(data):
        x_axis = range(len(y))
        plot_kwds['color'] = colors[i]
        plt.plot(x_axis, y, **plot_kwds)

预期:

带有根据绿线着色的线条的图形。

实际上:

一个数字,其线条的颜色不符合虹膜。

我意识到我可以通过将colors = plt.cm.viridis(np.linspace(0,1,len(data))移到函数中来解决此问题,但是每次我想更改颜色时都弄乱了源代码是很不方便的。

问题:

如何将颜色图传递给自定义函数? 我缺少一种更简单的方法吗?

我非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

看不见效果的原因是因为您为初始词典使用了不同的名称:plt_kwds而不是plot_kwds

我认为,您可以通过使用color关键字在for循环内分配颜色来简单地实现所需的效果。您不需要plot_kwds

import numpy as np
import matplotlib.pyplot as plt

data = [[1,2,3,4], [5,6,7,8], [6,7,83,5]]

def plotting_function(data, color_map=plt.cm.viridis, plot_kwds=None):
    colors = color_map(np.linspace(0,1,len(data)))

    for i, y in enumerate(data):
        x_axis = range(len(y))
        plt.plot(x_axis, y, color=colors[i])

plotting_function(data)        

enter image description here

回答第二个问题,您可以使用例如传递所需的颜色图

plotting_function(data, color_map=plt.cm.jet)