【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に以下を打ち込む。
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"]=3
とadd PyCall
の代わりに、build PyCall
を打つと救われるかも?(←未確認です。もしくは、まっさらな状態からやった方がいいかも)
【参考URL】https://qiita.com/tenfu2tea/items/917dceb14687ffb1988c
#動作テスト
動作テスト用のコードを2例だけ示します。
【例1】1つのグラフエリアに曲線を2つ描画
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!で直前のグラフエリアに上書き
【例2】上下2段組のグラフエリアを作成し、それぞれに曲線を1つ描画
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列にしている)
※このままでは、グラフで日本語を表示させることができません。日本語表示させるための手順は、次回の記事に書きました。
【関連】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の勉強もしないといけなそう…→長い道のりだ・・・