matploblib.pyplot
module은 thread-safe 하지 않다고 한다.
실제로 다음과 같이 plt.title()
에서 문제가 발생하였다.
plt.title("Measure distribution")
File "/opt/conda/envs/rapids/lib/python3.7/site-packages/matplotlib/pyplot.py", line 3031, in title
return gca().set_title(
File "/opt/conda/envs/rapids/lib/python3.7/site-packages/matplotlib/pyplot.py", line 879, in gca
return gcf().gca(**kwargs)
File "/opt/conda/envs/rapids/lib/python3.7/site-packages/matplotlib/figure.py", line 1957, in gca
return self.add_subplot(1, 1, 1, **kwargs)
File "/opt/conda/envs/rapids/lib/python3.7/site-packages/matplotlib/figure.py", line 1421, in add_subplot
return self._add_axes_internal(key, a)
File "/opt/conda/envs/rapids/lib/python3.7/site-packages/matplotlib/figure.py", line 1425, in _add_axes_internal
self._axstack.add(key, ax)
File "/opt/conda/envs/rapids/lib/python3.7/site-packages/matplotlib/figure.py", line 130, in add
super().remove((key, a_existing))
File "/opt/conda/envs/rapids/lib/python3.7/site-packages/matplotlib/cbook/__init__.py", line 654, in remove
raise ValueError('Unknown element o')
ValueError: Unknown element o
따라서 multi-thread programming 시 pyplot
을 사용하여 그림을 그리는 경우 문제가 발생할 수 있기 때문에 pyplot
대신 axes
객체를 사용하여 그림을 그려야 한다.
대부분의 method는 동일한 이름을 가지고 있거나 pyplot
method 이름 앞에 set_
을 붙여주기만 하면 된다.
다만, pyplot.xticks()
계열은 axes.set_xticks()
와 axes.set_xticklabels()
로 나누어 적는다.
# pyplot version
fig = plt.figure()
plt.xticks(range(10), range(1, 11))
# axes version
fig = plt.figure()
ax = fig.gca()
ax.set_xticks(range(10))
ax.set_xticklabels(range(1, 11))
PREVIOUSEtc