передача цветовой карты в качестве аргумента функции - PullRequest
1 голос
/ 16 мая 2019

Извинения, если это было решено в другом месте.Поиски на этом сайте информации о передаче объектов в функции приводят к публикациям, связанным с c ++.Результаты Google указывают на записи, которые занимаются созданием различных цветовых карт.

background

Я хотел бы использовать цветовые карты 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)

ожидается:

aфигура с линиями, окрашенными согласно viridis.

на самом деле:

фигура с линиями, окрашенными не в соответствии с viridis.

Я понимаю, что могу исправить это, переместив colors = plt.cm.viridis(np.linspace(0,1,len(data)) в функцию, но было бы неудобно связываться с исходным кодом каждый раз, когда я хочу изменить цвета.

вопрос:

как я могу передать цветовую карту пользовательской функции?Есть ли более простой подход к этому, которого мне не хватает?

Я действительно ценю помощь!

1 Ответ

1 голос
/ 16 мая 2019

Причина, по которой вы не видите эффекта, заключается в том, что вы используете другое имя для своего исходного словаря: plt_kwds вместо plot_kwds

По моему мнению, вы можете просто достичь желаемого эффекта, назначивцвета внутри цикла for с использованием ключевого слова color.Вам не нужно 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) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...