2018년 8월 31일 금요일

Tikz 01 : x, y축과 간단한 함수 그래프 그리기

Tikz를 사용하면 그림이나 그래프를 정확히(?) 그릴 수 있다. 파워포인트에서 그래프를 대충~ 그렸었다면 일차함수, 이차함수, 삼각함수 등 우리가 그리고 싶은 수식이 있다면 어떤 그래프든 그릴 수 있다.

그리고 그린 그래프는 심지어 벡터다. 우와!!

프로그램을 짤 때 "Hello"를 출력하기 위해 여러방법이 있듯, Tikz 역시 다양한 코드가 존재한다.
앞으로 내가 설명하는 코드가 최적의 코드라는 건 절대 아니다.
그냥 내가 아는 범위 내에서, 그리고 모르는 부분은 구글링하면서, 그래도 모르는 부분은 내 Latex 스승님^^ 에게 물어가면서 배운 것이다.
또 다른 코드가 존재한다면 언제든 리플로 알려주면 나도 적극적으로 반영하도록 노력(?)하겠다.

제일 먼저 $x$축과 $y$축을 그리고 간단한 이차함수 $x^2+1$ 그래프를 그려보자.
(그러기 위해서 컴퓨터에는 Latex이 설치되어 있어야 한다.)

준비가 모두 되었다면 다음 코드를 입력한다.
\documentclass[]{article}
\usepackage{tikz}

\begin{document}
 \pagenumbering{gobble}
 \begin{figure}
  \begin{tikzpicture}[scale=1]
  
   \draw [thick,->] (-2.5,0) --  (2.5,0) node [anchor=north] {$x$};
   \draw [thick,->] (0,-1)  -- (0,5) node [anchor=east] {$y$};
   
   \node [below] at (-0.3,0) {$0$};
   
   \draw[domain=-2:2, smooth,thick,,variable=\x, blue] plot ({\x},{\x*\x+0.5});
   
  \end{tikzpicture}
 \end{figure}
\end{document}

그리고 컴파일을 하게 되면 다음과 같은 그래프가 나타난다. 기본 article 사이즈에 그래프를 그렸기 때문에 여백을 잘라줘야 한다. 여백을 자르는 방법은 pdfcrop 명령을 사용한다.(http://woolmakes.blogspot.com/2018/08/tikz-pdf.html)
























코드에서 그래프를 그리는 부분은 \begin{tikzpicure} ~ \end{tikzpicture} 이다.
\draw는 선을 그린다.
\node로 "0"을 표시했다.

그리고 \pagenumbering{gobble} 은 tikzd와 딱히 상관이 없는 코드인데 페이지 넘버를 숨긴다. 페이지 넘버가 표시되어 있는 경우에 pdfcrop을 하게 되면 그래프 영역 뿐 아니라 페이지 넘버까지 함께 crop이 되기 때문이다.

좀 다른 그래프를 그려보자.
\documentclass[]{article}
\usepackage{tikz}

\begin{document}
 \pagenumbering{gobble}
 \begin{figure}
  \begin{tikzpicture}[scale=1]
  
   \draw [thick,->] (-2.5,0) --  (2.5,0) node [anchor=north] {$x$};
   \draw [thick,->] (0,-3)  -- (0,3) node [anchor=east] {$y$};
   
   \node [below] at (-0.3,0) {$0$};
   
   \draw[domain=-0.6:2, smooth,thick,,variable=\x, blue] plot ({\x},{1/ (\x + 1)});
   \draw[domain=-2.5:-1.4, smooth,thick,,variable=\x, blue] plot ({\x},{1/ (\x + 1)});
   
   
  \end{tikzpicture}
 \end{figure}

함수로 그래프를 그리는 경우에 발산하는 경우가 있다. 위 그래프가 그렇다. $x$가 -1으로 가면 -1보다 작은 경우에는 $-\infty$로 -1보다 큰 경우에는 $+\infty$로 발산한다. 그래서 latex 컴파일시 에러가 뜬다. 그래서 영역을 나눠서 두 개로 그렸다.




댓글 1개:

  1. 혹시 저 코드를 보면 domain=(숫자):(숫자)가 있는데 이것이 의미하는바가 무엇인가요?

    답글삭제