LoginSignup
1
2

More than 1 year has passed since last update.

PythonやRからTikzに変換して簡単にレポートを作ろう

Last updated at Posted at 2023-05-05

レポート課題を美しく書きたいけど、めんどくさい

本稿は備忘録を目的として作成しています。初心者なので、よりよい方法があれば教えて下さい。

こう思った経験は皆さんあると思います。理系大学生の読者諸賢の方は、wordよりもTexを利用する方のほうが多いかもしれません。Texはたしかに便利なツールですが、その仕様などを覚えていこうとすると、存外時間がかかります。
特に図を描くのは大変です。主に次の二つ方法があります。

1:画像作成の外部ツールを利用して画像ファイルを挿入する
2:Tikzを使う

今回、紹介するのはPythonのライブラリを使って、描画した図をそのままTex側に渡すという方法を考えます。したがって、受験数学の幾何問題の図を作るなどの作業には適していません。実験のレポート課題や学部や修士の研究論文で使ってみてください。

初心者なので、よりよい方法があれば教えて下さい。

Pythonの場合

手順0:Tex環境を用意する

これは省略します。ただし、該当のプリアンブルには

\usepackage{pgfplots}

を追加しておいてください。

手順1:tikzplotlibのインストール

ライブラリをインストールしてください。

pip install numpy
pip install matplotlib
pip install tikzplotlib

手順2:グラフを作成する

matplotlibでグラフを作成しましょう。テストファイルを用意しました。

import numpy as np
import matplotlib.pyplot as plt
import tikzplotlib

x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)

plt.plot(x, y)
plt.xlabel("$x$")
plt.ylabel("$\sin(x)$")
plt.title("Plot of $\sin(x)$")

tikzplotlib.save("sinx_plot_tikz.tex")

実行した後は、エクスプローラーを見ればTexファイルを生成されていることを確認してください。

手順3:Tex環境で読み込む

importを利用してファイルを読み込みましょう。必ずコンパイルするファイルと同一階層に生成したファイルを置いて、次のコードを読み込んでください。

\begin{figure}[ht]
  \centering
  \input{sinx_plot_tikz.tex}
  \caption{Plot of $\sin(x)$}
\end{figure}

すると、matplotlibで生成した$\sin{x}$のグラフが読み込まれていることが確認できると思います。

改善案

いちいちタイトルを付けなおすのは面倒です。なので、タイトルは入力として受け取れることにしましょう。

title_input = input("Enter the plot title: ")
tikzplotlib.save(f"{title_input}.tex")

を追加してください。またtex内のcaptionも変更しておいてください。

Rの場合

ほとんど同じ感覚で出力できます。統計のヒストグラムなどを用いる際は、こちらのほうが使われるかもしれません。(Rをあまり使ったことがないので雑なのはお許しください)

install.packages("tikzDevice")

で必要なものをダウンロードをして

library(tikzDevice)

tikz("output_tikz.tex")

plot(x = rnorm(100), y = rnorm(100), main = "Scatterplot Example")
dev.off()

とします。
これは散布図のサンプルコードですが、ほかのものでもできるはずです。
同様に同一階層に出力するようにしておくとコンパイルのときにファイルを移動させる手間が省けて便利です。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2