LoginSignup
10
10

More than 3 years have passed since last update.

【Julia】PlotsをバックエンドPyPlotの下で使えるようにするための手順

Last updated at Posted at 2017-02-27

【17.11.20改訂】Julia v0.6.1と最新のパッケージの現状に合うように内容を見直しました。
【20.05.13改定】Julia v1.4.1と最新のパッケージでも同様に動作することを確認しました。パッケージの追加方法についての古い記述を見直しました。

PlotsをバックエンドPyPlotの下で使うには?

前提

★Juliaがインストールされている状態を想定します(v0.6.1とv1.4.1では動作確認しています)。
★事前にPythonを手動でインストールしていない。
★Pythonユーザーの方で、自分でインストールしたPythonを使用して、動作させたい場合のことは、良く分かりません(Pythonのことは、全然理解していないので)。

やること

Juliaを立ち上げ、REPLに以下を打ち込む。

Julia
ENV["CONDA_JL_VERSION"]=3
]add PyCall #v0.6時代までは、Pkg.add("PyCall")
            #先頭の]はREPLをパッケージモードに移す
add PyPlot #v0.6時代までは、Pkg.add("PyPlot")
add Plots #v0.6時代までは、Pkg.add("Plots")
キー[BackSpace]を押す #REPLを通常モードに戻す

※最初の2行についてはtenfu2teaさんの記事(↓参考URL参照のこと)に従って修正しました(Juliaのバージョンアップに伴って動作しなくなったため)。
※ネット環境のある所で行う必要がある(追加機能のダウンロードとインストールがどんどん行われるため)。
※時間は掛かっても、初回の実行で済みます。
※もし、ENV["CONDA_JL_VERSION"]=3を打つ前に、既にadd PyPlotを打ったことがある場合には、ENV["CONDA_JL_VERSION"]=3add PyCallの代わりに、build PyCallを打つと救われるかも?(←未確認です。もしくは、まっさらな状態からやった方がいいかも)
【参考URL】https://qiita.com/tenfu2tea/items/917dceb14687ffb1988c

動作テスト

動作テスト用のコードを2例だけ示します。

【例1】1つのグラフエリアに曲線を2つ描画

Julia
using Plots
import Plots.PlotMeasures.px  #pxを単位のように使用するための準備(Plotsのバージョンアップに伴ってpxはimportやusingしておく必要が出た)
pyplot() #バックエンドをPyPlotにする
x=collect(0:0.01:2*pi)
y1=sin.(x)
y2=cos.(x)
plot(x, y1, xlab="yokojiku x [mm]",
            ylab="tatejiku y [mm]",
            lab="seigen",
            leg=:bottomleft,    #凡例の位置の指定
            margin=15px)        #マージンの指定
plot!(x, y2, lab="yogen")       #plot!で直前のグラフエリアに上書き

rei1.png

【例2】上下2段組のグラフエリアを作成し、それぞれに曲線を1つ描画

Julia
using Plots
import Plots.PlotMeasures.px
pyplot() #バックエンドをPyPlotにする
x=collect(0:0.01:2*pi)
y1=sin.(x)
y2=cos.(x)
p1=plot(x, y1, lab="seigen")
p2=plot(x, y2, lab="yogen")
plot(p1,p2, xlab="yokojiku x [mm]",
            ylab="tatejiku y [mm]",
            leg=:bottomleft,
            margin=15px,
            layout=grid(2,1)) #グラフエリアの段組設定(ここでは2行1列にしている)

rei2.png

※このままでは、グラフで日本語を表示させることができません。日本語表示させるための手順は、次回の記事に書きました。
【関連】http://qiita.com/taki__taki__/items/e85939fee01ae0c185e1
(PyPlot単体についての日本語表示させる方法についての記事)

【おまけ1】少しPlotsを紹介

Julia単体ではグラフ描画機能は提供されておらず、グラフ描画のための追加機能(パッケージ)を任意にインストール(]でパッケージモードに移った状態でadd パッケージ名を入力。※v0.6時代まではPkg.add("パッケージ名")を入力)する必要があります。Juliaでグラフを描きたくて、これまで、パッケージとして、Gadfly、Winston、PyPlot、Plots等、色々試しましたが、最近は、Plotsを常用しています。なかでも、バックエンドPyPlotは好きです。文法(記述方式)が直感的で、柔軟で、しかも、高度なグラフが描けると感じています。(最近はGRも動作が軽快で好き。)
【公式URL】https://github.com/JuliaPlots/Plots.jl

【おまけ2】Plotsでいうバックエンドって何?

ここでいうバックエンドというのは、グラフ描画のためのコアのパッケージのことを指します。実は、Plots単体には、グラフ描画の機能はありません。Plotsは、別のグラフ描画のためのパッケージ(PyPlot、GR、PlotlyJS等)の力を借りて、グラフ描画を行います。だったら、PyPlot単体やGR単体を使えば良いじゃないのかという疑問も湧くとは思います。ただ、Plotsを使えば、各種バックエンドの文法を吸収した、Juliaらしい分かり易いグラフ描画ための文法によって、グラフが描けるようになります。なので、Plotsは自分(Juliaユーザで非Pythonユーザの生臭者)にとっては、以下の利点を感じました。
★【Plots+PyPlot】→Juliaらしい文法で分かり易い!→でも、強力なPyPlotの機能が使える!→楽できる!すぐできる!
一方、PyPlotだけでは、以下のように感じてしまいます。
★【PyPlot単体】→強力なグラフが描けそう→でも、PyPlotの文法が難解に見える…→グラフを描きたいだけなのに、Pythonの勉強もしないといけなそう…→長い道のりだ・・・

10
10
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
10
10