2015-03-04 3 views
1

У меня есть функция, которые построить линию, что-то вроде этого:Matplotlib - Ошибка прохождение линия аргумент через ** kwargs

def tmp_plot(*args, **kwargs): 
    plt.plot([1,2,3,4,5],[1,2,3,4,5], *args, **kwargs) 

и когда я звоню его пропускание линии в качестве ключевого слова аргумента, как, что :

tmp_plot(line = '-') 

Я получаю эту ошибку:

TypeError: set_lineprops() got multiple values for keyword argument 'line' 

но отлично работает с цветом аргумента.

Я использую Matplotlib 1.4.3 и Python 2.7.7

Любые подсказки?

ответ

2

Вы можете увидеть, где Matplotlib добавляет свой собственный аргумент line в Traceback ниже. Это означает, что ваш собственный аргумент ключевого слова является дубликатом собственного одной Matplotlib в set_lineprops на вызове:

In [1]: import matplotlib.pyplot as plt 
In [2]: plt.plot([1,2,3], [1,4,9], line='-') 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-82-f298702afcfe> in <module>() 
----> 1 plt.plot([1,2,3], [1,4,9], line='-') 

/Users/xnx/anaconda/envs/py33/lib/python3.3/site-packages/matplotlib/pyplot.py in plot(*args, **kwargs) 
    2985   ax.hold(hold) 
    2986  try: 
-> 2987   ret = ax.plot(*args, **kwargs) 
    2988   draw_if_interactive() 
    2989  finally: 

/Users/xnx/anaconda/envs/py33/lib/python3.3/site-packages/matplotlib/axes.py in plot(self, *args, **kwargs) 
    4137   lines = [] 
    4138 
-> 4139   for line in self._get_lines(*args, **kwargs): 
    4140    self.add_line(line) 
    4141    lines.append(line) 

/Users/xnx/anaconda/envs/py33/lib/python3.3/site-packages/matplotlib/axes.py in _grab_next_args(self, *args, **kwargs) 
    317     return 
    318    if len(remaining) <= 3: 
--> 319     for seg in self._plot_args(remaining, kwargs): 
    320      yield seg 
    321     return 

/Users/xnx/anaconda/envs/py33/lib/python3.3/site-packages/matplotlib/axes.py in _plot_args(self, tup, kwargs) 
    305   ncx, ncy = x.shape[1], y.shape[1] 
    306   for j in range(max(ncx, ncy)): 
--> 307    seg = func(x[:, j % ncx], y[:, j % ncy], kw, kwargs) 
    308    ret.append(seg) 
    309   return ret 

/Users/xnx/anaconda/envs/py33/lib/python3.3/site-packages/matplotlib/axes.py in _makeline(self, x, y, kw, kwargs) 
    257        **kw 
    258       ) 
--> 259   self.set_lineprops(seg, **kwargs) 
    260   return seg 
    261 

TypeError: set_lineprops() got multiple values for argument 'line' 

Возможно, вы имели в виду ls или linestyle вместо line в любом случае?

0

Я бы предположил, что внутренняя часть matplotlib распаковывает внутренний словарь параметров в дополнение к предоставленным вызывающим, без удаления дубликатов, так что вы и matplot внутренние элементы lib предоставляют отдельные параметры ключевого слова с тем же именем через два параллельных маршрута ,

Смежные вопросы