Matplotlibのplot()に無名関数が使えない理由
Q&A
Closed
解決したいこと
初歩的な質問だったらすいません。
以下のようなコードを(Jupyterで)実行した際にエラーが出る理由を教えていただきたいです。
コード
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
%matplotlib inline
x = np.arange(-10,10)
plt.figure(figsize = (20, 6))
plt.plot(x, lambda x: 2*x)
plt.grid(True)
エラー
ValueError Traceback (most recent call last)
<ipython-input-10-b550b590b875> in <module>
7 x = np.arange(-10,10)
8 plt.figure(figsize = (20, 6))
----> 9 plt.plot(x, lambda x: 2*x)
10 plt.grid(True)
~\anaconda3\lib\site-packages\matplotlib\pyplot.py in plot(scalex, scaley, data, *args, **kwargs)
2838 @_copy_docstring_and_deprecators(Axes.plot)
2839 def plot(*args, scalex=True, scaley=True, data=None, **kwargs):
-> 2840 return gca().plot(
2841 *args, scalex=scalex, scaley=scaley,
2842 **({"data": data} if data is not None else {}), **kwargs)
~\anaconda3\lib\site-packages\matplotlib\axes\_axes.py in plot(self, scalex, scaley, data, *args, **kwargs)
1741 """
1742 kwargs = cbook.normalize_kwargs(kwargs, mlines.Line2D)
-> 1743 lines = [*self._get_lines(*args, data=data, **kwargs)]
1744 for line in lines:
1745 self.add_line(line)
~\anaconda3\lib\site-packages\matplotlib\axes\_base.py in __call__(self, data, *args, **kwargs)
271 this += args[0],
272 args = args[1:]
--> 273 yield from self._plot_args(this, kwargs)
274
275 def get_next_color(self):
~\anaconda3\lib\site-packages\matplotlib\axes\_base.py in _plot_args(self, tup, kwargs)
397
398 if x.shape[0] != y.shape[0]:
--> 399 raise ValueError(f"x and y must have same first dimension, but "
400 f"have shapes {x.shape} and {y.shape}")
401 if x.ndim > 2 or y.ndim > 2:
ValueError: x and y must have same first dimension, but have shapes (20,) and (1,)
質問の趣旨
無名関数を使わずにdefで関数を定義する、無名関数を変数に代入してから扱う(非推奨らしいですが)などをすることでエラーを回避できることは分かっていますが、なぜ直接無名関数を引数に入れたときだけエラーが発生するのかが分からないので、plot()と無名関数への理解を深めるために原因が知りたいです。
自分で調べてみても原因はわかりませんでしたがエラー文を読む限りなぜか無名関数が一回しか呼ばれてない(?)のかと予想しています。
回答よろしくおねがいします。
0