Tagebuch von Spargel

最近zennに移行しましたhttps://zenn.dev/spargel

matlab2tikzで論文用グラフ作成のイライラを減らす(matlab,latex,tikzを使用)

はじめに

論文においてしばしばグラフを挿入することがあると思います.本ページではそんな論文作成時にぶつかる壁の解決策になることを願って書き置きします.
グラフを画像で提出しなくてはならない場合もあると思いますので,あくまでも自己責任でお願いいたします.

グラフ作成の悩み

グラフを論文に取り込むにあたり,.epsや.png等でグラフを保存し,latexソース上で\includegraphics{hoge.eps}のようにして挿入することが多いと思います.
そのような際によく,

  • 座標軸の数字が大きすぎた(小さすぎた)
  • 線が細すぎた(太すぎた)
  • ラベルの大きさが(ry
  • etc...

ということが起こります.これを修正するためにまたグラフ作成ツールを開いてグラフを編集して再度保存して…を繰り返すことがよくあり,数が多くなるとそれだけストレスになっていきます.
そこでmatlab2tikzとtikzを使用することによりテキストエディタ上で調整できるようになり効率アップを期待することができます.

本ページの内容

何が便利?

  • グラフ編集に一々グラフ作成ソフトを開かなくて良い.テキストエディタ上で調整できる.

著者の環境

流れ

  • グラフ作成(matlab)
  • matlab2tikzを使用してグラフ出力し,myfigure.texを作成
  • latexにmyfigure.texを取り込み
  • 細々とした編集を行う

matlab2tikzの導入

matlab2tikz.zipをここ
jp.mathworks.com

からダウンロードします.右上にdownloadとあるのでそこをクリックすればzipがダウンロード出来ます.
zipファイルを解凍したあと,``\src''下のファイルをmalabで現在の階層にコピーします.
もしくは,MATLAB下にmatlab2tikzフォルダーを作成してその中にコピーし,

addpath(~/MATLAB/matlab2tikz)

として検索パスに追加するのが楽かもしれません.
この動画Latex Tutorial #16: Matlab Grafiken in Latex - YouTube
を見てもらうのが一番分かりやすいかとおもいます(ドイツ語だけど).
これで準備完了です.

論文挿入用グラフの作成

グラフ出力ファイルmyfigure.texの作成

{ y=\sin(x)}のグラフを挿入することにします.
次のコードでグラフを作成します.

x=0:0.1:10;
y = sin(x);
plot(x,y)

すると次のようなグラフが出力されます.
f:id:Spargel:20180729161447p:plain:w300

このグラフが出力されている状態で,matlabコマンドライン上で以下のコマンドを実行します.
すると保存先選択が出てくるので適当な場所に適当な名前で保存してください.

matlab2tikz('width','\figWidth','height','\figHight')

「\figWidth」と「\figWidth」は後のlatexで挿入時に大きさを設定するのに必要です.以下のように直接大きさを指定しても良いですが後々の調整を考えるとおすすめ出来ません.

matlab2tikz('width','3cm','height','40mm')%no recommend

また,データ点数が多いとlatexコンパイルエラーを起こす場合があります.
これを防ぐには,

cleanfigure()
matlab2tikz('width','\figWidth','height','\figHight')

というようにcleanfigure()を実行することでいい感じにデータ点を間引いてくれるようです.


上記で出力されたtexファイル(myfigure.tex)は以下のようになります.

中身の解説

\begin{axis}[ ~ ]の~部分でグラフに関する設定を行い,その後で実際にplotしています.

  • height=, wight=は図の高さと幅を決める
  • xmin=, xmax=はプロットの値域を決める
  • legen pos = {north east},を追加することで凡例の位置を記載可能.
  • ytick={ -1, -0.8, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1},とするとyラベルの数字を指定可能

また,\addplot [color=mycolor1]line width=3.0pt追記して,\addplot [color=mycolor1, line width=3.0pt]とすることで線の太さを変更できます.
このあたりの設定については以下のブログ
abenori.blogspot.com
を読んでもらうと分かりやすいです.
以上のようにすることで,テキストエディタ上でグラフの体裁を変えることが出来ます.

myfigure.texlatexファイルに取り込む

tikzとpgfplotsを用います.TexLive2017にははじめから入っていると思います.
latexファイルのプリアンプルを次のように書きます.

\documentclass[~,dvipdfmx]{jsarticle}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\newlength\figHeight
\newlength\figWidth

はじめにdvipdfmxを指定するのを忘れないようにしてください.忘れるとgraphicsパッケージと競合してpngなどが読み込めなくなるそうです.
ja.stackoverflow.com

そしてグラフを挿入したい場所で

\begin{document}
~~~
\begin{figure}
	\setlength{\figHeight}{30mm}
	\setlength{\figWidth}{40mm}
	\input{myfigure.tex}
\end{figure}
~~

とすることでグラフを挿入することが可能です.
またグラフの数字などもlatexソースファイル準拠になるのでフォントの調整が不要となります.

ほんとうに楽になるかどうかは人によると思います.
つかいこなせば便利かもしれないです.
使用は自己責任でお願いします![再掲]