Skip to content

Jupyter 노트북에서 %matplotlib inline의 해독하기

Jupyter 노트북(또는 Google Colab 같은 도구를 사용할 때)에서 파이썬 데이터 시각화 작업을 하다 보면, 종종 많은 노트북 상단에 이상한 한 줄을 발견할 수 있습니다: %matplotlib inline. 처음 보면 마치 어떤 마법의 주문처럼 보이는데, 어느 순간 그것이 정말로 무언가를 하는 명령임을 알게 될 겁니다! 이번 초보자용 안내서에서는 **%matplotlib inline**이 사실 무엇을 하는 것인지, 언제 사용하면 좋은지, 어떻게 활용하는지(예제 코드를 포함하여), 그리고 최신 Jupyter 환경에서는 굳이 필요 없는지도 설명합니다. 마지막에는 이 작은 "마법" 명령이 왜 이렇게 흔히 보이고, 어떻게 해서 Matplotlib 그래프가 인라인으로(코드 바로 아래) 보여지게 하는지 알게 될 겁니다. 바로 시작해 볼까요?

%matplotlib inline이란 무엇인가요?

**%matplotlib inline**은 IPython과 Jupyter 노트북에서 이용할 수 있는 특별한 매직 명령어입니다. 매직 명령어(앞에 % 기호가 붙는)는 일반 파이썬 문법이 아니며, 대신 IPython 커널의 동작 방식을 설정하는 명령어입니다 (IPython 매직 명령어 설명 - 공식 문서 (opens in a new tab)). 이 경우, %matplotlib inline은 Jupyter에게 Matplotlib의 "인라인" 백엔드를 사용하라고 지시하는 것인데, 이는 그림이 별도 창이 아닌 노트북 내부에 바로 보여지도록 하는 환경설정입니다 (DataCamp 튜토리얼 (opens in a new tab), Saturn Cloud 가이드 (opens in a new tab)).

쉽게 말해, %matplotlib inline은 Jupyter에 "내가 그림을 그릴 때마다, 별도 창이 아니라 바로 이 노트북 안에 보여줘"라고 말하는 것과 같습니다. 보통(이 설정이 없으면), Matplotlib은 새 창을 열거나 인터랙티브한 뷰어를 띄우도록 시도하거나, 플롯 객체를 텍스트로 표시하는 것(즉, Line2D object at 0x... 같은 것)만 보여줍니다 (Saturn Cloud 블로그 (opens in a new tab)). 하지만 %matplotlib inline 명령은 이를 방지하고 그래프 출력을 노트북 페이지 안에 embed 시킵니다.

왜 "인라인"일까요? 내부적으로, Matplotlib은 여러 백엔드(그래프 렌더링을 담당하는 엔진 또는 도구)를 갖고 있는데, 이 중 inline 백엔드는 그래프를 정적 이미지로 노트북 내에 그려주는 역할을 합니다 (Medium - ';%matplotlib inline'이 하는 일 (opens in a new tab)). 어떤 백엔드는 외부 창(gui 창)을 열어 플롯을 보여주기도 하고, 어떤 것은 노트북 내에 바로 표시합니다. %matplotlib inline은 바로 이 inline 백엔드를 활성화하는 명령어로, 이 설정 하에 그려지는 모든 플롯은 노트북 내부의 정적 이미지로 보여지게 됩니다. 특히 데이터 분석에서는 그림과 코드가 함께 보여지는 게 좋아서 매우 유용하죠.

그리고 이 명령어가 앞에 % 기호를 붙인 "매직" 명령어인 이유는, 이게 기본 파이썬 문법이 아니라 Jupyter/IPython 특화된 명령어라는 의미입니다 (IPython 공식 문서 (opens in a new tab)). 일반 파이썬 스크립트에는 쓸 수 없으며, 노트북 또는 IPython 세션 내에서만 작동합니다.

언제(왜) %matplotlib inline을 사용해야 할까요?

%matplotlib inline은 특히 Jupyter 노트북이나 JupyterLab 같은 대화형 환경에서, 바로 그 자리에서 그림을 보여주고 싶을 때 유용합니다. 데이터 탐색, 데이터 과학, 튜토리얼 노트북 등을 할 때 주로 쓰입니다. 사용 시점 예시는 다음과 같습니다:

  • 인터랙티브한 데이터 분석: 데이터를 탐색하며 많은 차트를 그리고 싶을 때, 그림이 바로 그 아래에 나오니 비교가 쉽고 빠릅니다. 별도 창을 열 필요없이 노트북 안에 그림이 딱 붙어 있죠 (Saturn Cloud 튜토리얼 (opens in a new tab)). 반복 작업 시, 플롯 명령을 수정하고 다시 실행하면 즉시 결과를 볼 수 있어 편리합니다.

  • 분석 결과 정리 및 공유: 그림이 인라인으로 박제돼 있기 때문에, 노트북 저장 후 HTML이나 PDF로 내보내면 그림도 함께 저장됩니다. 결과물을 공유할 때 별도의 그림 파일 없이도 노트북 속 그림이 그대로 보여집니다.

  • 대용량 데이터 또는 복잡한 시각화: 여러 플롯을 연속해서 돌릴 때, 인라인으로 쌓아 올리면 한 눈에 많은 시각자료를 볼 수 있습니다. 설명(마크다운 문자열)과 함께 플롯을 섞어가며 이야기를 만들 수 있죠.

  • 교육, 튜토리얼 목적으로: 많은 튜토리얼에서는 맨 앞에 %matplotlib inline을 넣어서, 사용자가 코드를 실행할 때 바로 그림이 보여지도록 설계되어 있습니다. 처음 배우는 사람도 플롯이 안 뜨는 괴로움을 피할 수 있죠.

반면, 일반 파이썬 스크립트에서는 사용할 수 없습니다. (즉, plt.show() 를 호출하는 것으로 충분)하고, 이 명령어는 오직 Jupyter/IPython 환경에 특화된 것임을 잊지 마세요.

때와 방법%matplotlib inline 사용하는 예시

설정 방법은 아주 간단합니다. 노트북의 가장 위쪽 셀에 넣기만 하면 되는데, 흔히 import matplotlib.pyplot as plt 다음에 위치시킵니다. 예를 들어:

# 노트북 맨 위쪽에 넣는 경우:
%matplotlib inline
import matplotlib.pyplot as plt
 
# 이후 그림 생성
plt.figure(figsize=(4,3))
plt.plot([1, 2, 3], [2, 4, 6], color="blue", marker="o")
plt.title("예제 플롯")
plt.xlabel("X 값")
plt.ylabel("Y 값")
plt.show()

여기서 첫 줄에 %matplotlib inline이 있으면, 그 이후의 모든 플롯이 노트북 내부에 보여집니다. 이 명령은 아무 것도 출력하지 않으며 내부 설정을 변경하는 역할만 합니다. import matplotlib.pyplot as plt는 그림을 그리기 위한 표준 방법입니다.

이제 이 명령 뒤에 plt.plot(), plt.bar(), plt.scatter() 등 각종 플롯 명령을 작성하면, 별도 창이 아니라 바로 아래에 그림으로 보여지게 됩니다. plt.show()를 넣는 것도 가능하지만, 대부분은 마지막에 알아서 출력되기 때문에 생략해도 무방합니다.

오늘날에는 %matplotlib inline이 꼭 필요할까?

여러분이 생각할 수 있는 질문: "이 명령어가 그렇게 편하다면, 계속 써야 하는 걸까?" 최근 Jupyter 버전에서는 대부분 이 명령어 없이도 그림이 인라인으로 나오는 경우가 많아졌습니다. (즉, 기본 설정이 이미 인라인 백엔드가 되어 있기 때문) (DataCamp 튜토리얼 (opens in a new tab), Saturn Cloud (opens in a new tab)). 예를 들어, import matplotlib.pyplot as plt하거나, pandas의 .plot()을 쓰기만 해도, 환경이 자동으로 인라인 모드로 전환됩니다.

그래서 사실 오늘날 대부분의 최신 Jupyter 노트북은 별도로 %matplotlib inline을 적지 않아도 그림이 노트북 내부에 바로 보이게 되어 있습니다. 이는 공식 문서 (opens in a new tab)에서도 언급되며, 거의 대부분의 경우 생략해도 괜찮음을 알려줍니다.

하지만, 명시적으로 넣어두는 것도 나쁘지 않으며, 특히 아래와 같은 경우에는 여전히 유용합니다:

  • 노트북의 호환성을 위해 확실하게 원한다면
  • 오래된 환경이나, 특정 서버, 클라우드 환경 등에서는 꼭 넣어야 하는 경우가 있음
  • 다른 사람이 작성한 노트북을 열 때, 그림이 안 보여서 혼란을 방지하려는 목적으로
  • 명확성을 위해 **"이 노트는 인라인 그림을 사용한다"**라고 표기하는 습관

요약하자면, 오늘날 대부분의 환경은 이미 인라인 그림을 지원하기 때문에, %matplotlib inline을 써야 하는 필수 조건은 아닙니다. 그러나, 명확성을 위해 또는 호환성을 위해 넣어두기도 하고, 많은 템플릿/튜토리얼에서도 여전히 볼 수 있습니다.

결론

간단히 말해, %matplotlib inline은 **Jupyter 노트북에서 그림이 바로 보여지도록 해주는 작은 "마법의 명령어"**입니다. 이전에는 기본이었고 많이 사용했으며, 지금도 여전히 흔히 붙여 넣는 관행이지만, 최신 문서와 환경에서는 굳이 쓸 필요 없이 그림이 인라인으로 나오기도 합니다.

하지만, 아직도 명령어를 넣으면 확실하게 그림이 보여지고, 여러 상황에서의 호환성과 명확성을 위해 추천됩니다. 지금 사용하는 환경에 따라, 또는 노트북의 목적으로 따라, 적절히 활용하시면 됩니다.

꼭 기억하세요: %matplotlib inline으로 인해, 이후 생성하는 모든 플롯들은 별도 창이 아니라 바로 노트북 내부에 깔끔하게 보여진다는 사실입니다. 통상 데이터 분석, 시각화, 튜토리얼 등에서 매우 요긴하게 쓰이는 만능 명령어죠!


참고 자료:

  • Saturn Cloud 블로그 – Jupyter Notebook Matplotlib Inline: A Beginner's Guide
  • DataCamp – Exploring Matplotlib Inline: A Quick Tutorial
  • Medium – All About %matplotlib inline: Why Should You Stop Using This Today?
  • Stack Overflow 질문들 – %matplotlib inline 필요 여부와 사용법에 관한 다양한 논의
  • IPython 매직 명령어 공식 문서