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

**【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: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"]=3`と`add PyCall`の代わりに、`build PyCall`を打つと救われるかも？（←未確認です。もしくは、まっさらな状態からやった方がいいかも）
【参考URL】https://qiita.com/tenfu2tea/items/917dceb14687ffb1988c

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

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

```Julia: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](https://qiita-image-store.s3.amazonaws.com/0/167369/4a2d3f60-9ae1-b3ff-abd1-641344ae6757.png)



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

```Julia: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](https://qiita-image-store.s3.amazonaws.com/0/167369/c7351828-8b06-337f-a100-022787807033.png)


※このままでは、グラフで日本語を表示させることができません。日本語表示させるための手順は、[次回の記事](http://qiita.com/nyoi/items/d77aacad0f3ad997b60e#_reference-d3fd6adb9715ebf3c9ae)に書きました。
【関連】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の勉強もしないといけなそう…→**長い道のりだ・・・**