このモジュールは、Python から Matplotlib プロット ライブラリ、特にmatplotlib.pyplot
モジュールへの Julia インターフェイスを提供します。
PyPlot は Julia PyCall パッケージを使用して、ほとんどまたはまったくオーバーヘッドなしで Julia から Matplotlib を直接呼び出します (配列はコピーを作成せずに渡されます)。 (代替の PythonCall.jl パッケージを使用する PyPlot.jl のバージョンについては、「PythonPlot.jl」も参照してください。)
このパッケージは、Julia のマルチメディア I/O API を利用して、IJulia のインライン グラフィックスなど、任意の Julia グラフィカル バックエンドでプロットを表示します。あるいは、Python ベースのグラフィカル Matplotlib バックエンドを使用して、対話型のプロット ズームなどをサポートすることもできます。
(この PyPlot パッケージは、IPython を使用して ZeroMQ ソケット上で PyPlot を使用していた Junfeng Li による同名の以前のパッケージを置き換えます。)
PyPlot を使用するには、Python Matplotlib ライブラリをマシンにインストールする必要があります。 GUI バックエンドを必要としない IJulia を使用してインライン プロットを行うことも、以下で説明するように Matplotlib の Qt、wx、または GTK+ バックエンドを使用することもできます。
Matplotlib がインストールされたら、Julia でPkg.add("PyPlot")
を使用するだけで、PyPlot とその依存関係をインストールできます。
Conda.jl パッケージを使用してプライベート (システムPATH
にない) Julia Python ディストリビューションを (Miniconda 経由で) インストールするように PyCall を設定した場合、PyPlot は必要に応じて Matplotlib を自動的にインストールします。
PyCall と PyPlot を初めてインストールする場合は、 Pkg.add("PyPlot")
を実行する前にENV["PYTHON"]=""
を実行してください。それ以外の場合は、次の方法で Conda を使用するように PyCall を再構成できます。
ENV [ " PYTHON " ] = " "
Pkg . build ( " PyCall " )
次回PyPlot
インポートすると、Conda に Matplotlib をインストールするように指示されます。
MacOS で完全に機能する PyPlot を入手するには、MacOS 10.9 以降の XQuartz をインストールするか、Anaconda Python ディストリビューションをインストールする必要があります。
MacOS 10.9 には Python と Matplotlib が付属していますが、このバージョンの Matplotlib はデフォルトで Cocoa GUI バックエンドを使用しており、PyPlot ではサポートされていません。 Tk バックエンドもサポートされていますが、Tk バックエンドは XQuartz をインストールしないと機能しません。
あるいは、Anaconda Python ディストリビューション ( ipython
およびその他の IJulia 依存関係も含まれます) をインストールすることもできます。
それ以外の場合は、Homebrew パッケージ マネージャーを使用できます。
brew install python gcc freetype pyqt
brew link --force freetype
export PATH= " /usr/local/bin: $PATH "
export PYTHONPATH= " /usr/local/lib/python2.7: $PYTHONPATH "
pip install numpy scipy matplotlib
(シェルを起動するたびに自動的に実行されるように、2 つのexport
コマンドを~/.profile
ファイルに追加することもできます。)
Matplotlib と PyPlot がインストールされ、IJulia などのグラフィックス対応 Julia 環境を使用している場合は、 using PyPlot
入力するだけで、matplotlib.pyplot API の関数の呼び出しを開始できます。例えば:
using PyPlot
# use x = linspace(0,2*pi,1000) in Julia 0.6
x = range ( 0 ; stop = 2 * pi , length = 1000 ); y = sin .( 3 * x + 4 * cos .( 2 * x));
plot (x, y, color = " red " , linewidth = 2.0 , linestyle = " -- " )
title ( " A sinusoidally modulated sinusoid " )
一般に、キーワード引数を含むすべての引数は Python の場合とまったく同じです。 (もちろん、多少の翻訳はありますが、たとえば Julia は Python のTrue
とNone
代わりにtrue
とnothing
使用します。)
完全なmatplotlib.pyplot
API は、ここでは説明できないほど広範です。詳細については、matplotlib.pyplot のドキュメントを参照してください。 Matplotlib のバージョン番号はPyPlot.version
によって返されます。
現在文書化されているmatplotlib.pyplot
API のみがエクスポートされます。モジュール内の他の関数を使用するには、 matplotlib.pyplot.foo(...)
をplt.foo(...)
として呼び出すこともできます。たとえば、 plt.plot(x, y)
も機能します。 (また、 matplotlib
モジュールの生のPyObject
、 PyPlot.matplotlib
としてもアクセスできます。)
Matplotlib は大文字の使用に関していくぶん一貫性がありません。 contour3D
はありますが、 bar3d
などがあります。 PyPlot は、そのような関数の名前をすべて大文字のD を使用するように変更します (例: hist2D
、 bar3D
など)。
Julia 組み込み関数の一部の関数も明示的に修飾する必要があります。特に、 matplotlib.pyplot.xcorr
などにアクセスするには、 PyPlot.xcorr
、 PyPlot.axes
、およびPyPlot.isinteractive
使用する必要があります。
Python の従来どおり、 plt.somefunction(...)
を介してすべての PyPlot 関数に排他的にアクセスしたい場合は、 import PyPlot; const plt = PyPlot
using PyPlot
代わりにimport PyPlot; const plt = PyPlot
使用します。
gcf()
を呼び出すことで、現在の Figure をFigure
オブジェクト ( matplotlib.pyplot.Figure
のラッパー) として取得できます。
Figure
タイプは Julia のマルチメディア I/O API をサポートしているため、 display(fig)
を使用してfig::PyFigure
表示し、 show(io, mime, fig)
(または Julia 0.4 ではwritemime
) を使用して特定のmime
タイプに書き込むことができます。 Matplotlib バックエンドによってサポートされる文字列 (例: "image/png"
または"application/pdf"
)。
Julia コマンドライン プロンプトや IJulia ノートブックなどの対話型 Julia プロンプトから PyPlot を使用する場合、プロット関数 ( plot
など) が評価された直後にプロットが表示されます。
ただし、非対話的に実行される Julia スクリプト (例: julia myscript.jl
) から PyPlot を使用する場合、Matplotlib は非対話モードで実行されます。つまり、 show()
を実行するまでプロット ウィンドウは開かれません ( plt.show()
と同等) Python の例ではplt.show()
)。
PyPlot は、IJulia 環境など、PNG、SVG、または PDF 画像を表示できる任意の Julia グラフィック バックエンドを使用できます。別のバックエンドを使用するには、単に目的のDisplay
指定してpushdisplay
を呼び出します。詳細については、Julia マルチメディア ディスプレイ API を参照してください。
一方、Python Matplotlib バックエンドの 1 つを使用して、プロットごとに対話型ウィンドウを開くこともできます (対話型のズーム、パンなどのため)。これは、次を実行することでいつでも行うことができます。
pygui ( true )
後続のプロットで Python ベースの GUI (可能な場合) をオンにします。一方、 pygui(false)
Julia バックエンドに戻ります。 Python GUI が実行されている場合でも、 display(gcf())
を実行することにより、Julia バックエンドで現在の Figure を表示できます。
PyPlot のインポート時に Julia グラフィック バックエンドが使用できない場合は、 pygui(true)
がデフォルトになります。
Tk、wxWidgets、GTK+ (バージョン 2 または 3)、および Qt (バージョン 4 または 5、PyQt5、PyQt4 または PySide 経由)、Python GUI バックエンドのみが PyPlot でサポートされています。 (明らかに、Python 用のこれらのツールキットのいずれかを最初にインストールしておく必要があります。) デフォルトでは、PyPlot は起動時に (インストールしたものに基づいて) これらのツールキットの 1 つを選択しますが、 PyCall モジュールを使用し、そのpygui
関数を使用して PyPlot をインポートする前にPython バックエンドを設定します。
using PyCall
pygui (gui)
using PyPlot
ここで、 gui
現在:tk
、 :gtk3
、 :gtk
、 :qt5
、 :qt4
、 :qt
、または:wx
のいずれかになります。 matplotlibrc ファイルの Matplotlib rcParams['backend']
パラメーターを使用してデフォルトを設定することもできます。
PyPlot モジュールは、カラー マップ (さまざまなプロット タイプの色に値を割り当てるために使用されます) の管理を簡素化するために、matplotlib.colors および matplotlib.cm モジュールに基づいていくつかの関数と型もエクスポートします。特に:
ColorMap
: matplotlib.colors.Colormap タイプのラッパー。次のコンストラクターが提供されています。
ColorMap{T<:Colorant}(name::String, c::AbstractVector{T}, n=256, gamma=1.0)
Colorant
の配列c
内の色を線形補間することによってn
成分のカラーマップを構築します ( ColorTypes.jl パッケージ)。 name
を自動的に構築したい場合は、代わりにColorMap(c, n=256, gamma=1.0)
を呼び出します。あるいは、色の配列を渡す代わりに、RGB コンポーネントまたは RGBA コンポーネントの 3 列または 4 列の行列をそれぞれ渡すこともできます (Matplotlib の ListedColorMap と同様)。
さらに一般的なカラー マップは、 ColorMap{T<:Real}(name::String, r::AbstractVector{(T,T,T)}, g::AbstractVector{(T,T,T)}, b::AbstractVector{(T,T,T)}, n=256, gamma=1.0)
コンストラクターで定義されているように、赤、緑、青、および (オプションで) アルファ コンポーネントの (x,y0,y1) タプルの配列を渡すことによって定義できます。 ColorMap{T<:Real}(name::String, r::AbstractVector{(T,T,T)}, g::AbstractVector{(T,T,T)}, b::AbstractVector{(T,T,T)}, n=256, gamma=1.0)
またはColorMap{T<:Real}(name::String, r::AbstractVector{(T,T,T)}, g::AbstractVector{(T,T,T)}, b::AbstractVector{(T,T,T)}, alpha::AbstractVector{(T,T,T)}, n=256, gamma=1.0)
ColorMap(name::String)
、 matplotlib.pyplot.get_cmap( name
) と同等の既存の (登録された) カラーマップを返します。
Python 関数によって返されるmatplotlib.colors.Colormap
オブジェクトは、自動的にColorMap
タイプに変換されます。
get_cmap(name::String)
またはget_cmap(name::String, lut::Integer)
は、matplotlib.pyplot.get_cmap 関数を呼び出します。
register_cmap(c::ColorMap)
またはregister_cmap(name::String, c::ColorMap)
は、関数 matplotlib.colormap.register を呼び出します。
get_cmaps()
現在登録されているカラーマップのVector{ColorMap}
を返します。
IJulia のような SVG サポート表示環境では、 ColorMap
およびVector{ColorMap}
オブジェクトがグラフィカルに表示されることに注意してください。 get_cmaps()
試してみてください!
PyPlot パッケージは、Matplotlib の mplot3d ツールキットから関数もインポートします。ただし、Matplotlib とは異なり、最初に Axes3d オブジェクトを作成しなくても、 bar3D
、 contour3D
、 contourf3D
、 plot3D
、 plot_surface
、 plot_trisurf
、 plot_wireframe
、またはscatter3D
(およびtext2D
、 text3D
) のいずれかを呼び出すだけで、3D プロットを直接作成できます。 Axes3d の対応する名前のメソッドと同様です。また、Matlab のような同義語のplot_surface
のsurf
(または 1d-array 引数のplot_trisurf
) と、 plot_wireframe
のmesh
もエクスポートします。たとえば、次のようにすることができます。
surf ( rand ( 30 , 40 ))
ランダムな 30×40 表面メッシュをプロットします。
Matplotlib とまったく同じように、たとえばsubplot(111, projection="3d")
使用して 3D 軸を持つサブプロットを明示的に作成することもできますが、最初にusing3D()
関数を呼び出して mplot3d がロードされていることを確認する必要があります (これはplot3D
などでは自動的に行われます)。 Axes3D
コンストラクターと art3D モジュールもエクスポートされます。
Matplotlib を使用すると、文字列内で方程式をドル記号 ( $ ... $
) で囲むだけで、プロット ラベルやタイトルなどで LaTeX 方程式を使用できます。ただし、Julia 文字列リテラルに LaTeX 方程式を入力するのは面倒です。Julia がドル記号やバックスラッシュ自体を解釈するのを防ぐためにエスケープが必要だからです。たとえば、LaTeX 方程式$alpha + beta$
Julia ではリテラル文字列"$\alpha + \beta$"
になります。
これを簡素化するために、PyPlot は LaTeXStrings パッケージを使用して、バックスラッシュやドル記号をエスケープせずにL"...."
によって構築される新しいLaTeXString
型を提供します。たとえば、上記の方程式を単にL"$alpha + beta$"
と書くだけで、次のようなことができます。
title ( L " Plot of $ G amma_3(x)$ " )
文字列に数式のみが含まれている場合は、ドル記号を省略できます (例: L"alpha + beta"
。ドル記号は自動的に追加されます。追加の利点として、 LaTeXString
は IJulia でレンダリングされた方程式として自動的に表示されます。詳細については、LaTeXStrings パッケージを参照してください。
デフォルトでは、IJulia のプロットは PNG 画像としてノートブックに送信されます。オプションで、ブラウザーにプロットを SVG 画像として表示するように PyPlot に指示できます。これには、解像度に依存しないという利点があります (つまり、IJulia ノートブックを PDF に変換する場合など、高解像度でピクセル化せずに表示されます)。実行中:
PyPlot . svg ( true )
これはデフォルトではありません。これは、ブラウザーでの SVG プロットの表示が (特に複雑なプロットの場合) 非常に遅く、バグのある SVG サポートを備えた一部のブラウザーでは不正確に表示される可能性があるためです。 PyPlot.svg()
メソッドは、SVG 表示が現在有効かどうかを返します。
これは、プロットを SVG またはその他の形式に手動でエクスポートすることとはまったく別のものであることに注意してください。 PyPlot がブラウザ表示に SVG を使用するかどうかに関係なく、 Matplotlib savefig コマンド (例: savefig("plot.svg")
を使用していつでもプロットを SVG にエクスポートできます。
次の例に従って、Matplotlib がグローバル パラメーターに使用するrcParams
ディクショナリを変更できます。
rcParams = PyPlot . PyDict (PyPlot . matplotlib. " rcParams " )
rcParams[ " font.size " ] = 15
(代わりにPyPlot.matplotlib.rcParams
使用した場合、Python rcParams
が変更されないように、PyCall は辞書のコピーを作成します。)
このモジュールは Steven G. Johnson によって作成されました。