Modul ini menyediakan antarmuka Julia ke pustaka plot Matplotlib dari Python, dan khususnya ke modul matplotlib.pyplot
.
PyPlot menggunakan paket Julia PyCall untuk memanggil Matplotlib langsung dari Julia dengan sedikit atau tanpa overhead (array diteruskan tanpa membuat salinan). (Lihat juga PythonPlot.jl untuk versi PyPlot.jl menggunakan paket alternatif PythonCall.jl.)
Paket ini memanfaatkan API I/O multimedia Julia untuk menampilkan plot di backend grafis Julia mana pun, termasuk sebagai grafik sebaris di IJulia. Alternatifnya, Anda dapat menggunakan backend Matplotlib grafis berbasis Python untuk mendukung pembesaran plot interaktif dan sebagainya.
(Paket PyPlot ini menggantikan paket sebelumnya dengan nama yang sama oleh Junfeng Li, yang menggunakan PyPlot melalui soket ZeroMQ dengan IPython.)
Anda harus menginstal pustaka Python Matplotlib di mesin Anda untuk menggunakan PyPlot. Anda dapat melakukan plot inline dengan IJulia, yang tidak memerlukan backend GUI, atau menggunakan backend Qt, wx, atau GTK+ dari Matplotlib seperti dijelaskan di bawah.
Setelah Matplotlib diinstal, Anda cukup menggunakan Pkg.add("PyPlot")
di Julia untuk menginstal PyPlot dan dependensinya.
Jika Anda mengatur PyCall untuk menggunakan paket Conda.jl untuk menginstal distribusi Julia Python pribadi (bukan di sistem PATH
) (melalui Miniconda), maka PyPlot akan secara otomatis menginstal Matplotlib sesuai kebutuhan.
Jika Anda menginstal PyCall dan PyPlot untuk pertama kalinya, lakukan saja ENV["PYTHON"]=""
sebelum menjalankan Pkg.add("PyPlot")
. Jika tidak, Anda dapat mengkonfigurasi ulang PyCall untuk menggunakan Conda melalui:
ENV [ " PYTHON " ] = " "
Pkg . build ( " PyCall " )
Saat berikutnya Anda mengimpor PyPlot
, Conda akan diminta untuk menginstal Matplotlib.
Di MacOS, Anda harus menginstal XQuartz untuk MacOS 10.9 atau lebih baru atau menginstal distribusi Anaconda Python untuk mendapatkan PyPlot yang berfungsi penuh.
MacOS 10.9 hadir dengan Python dan Matplotlib, tetapi versi Matplotlib ini secara default menggunakan backend Cocoa GUI, yang tidak didukung oleh PyPlot. Ia juga memiliki backend Tk, yang didukung, tetapi backend Tk tidak berfungsi kecuali Anda menginstal XQuartz.
Alternatifnya, Anda dapat menginstal distribusi Anaconda Python (yang juga mencakup ipython
dan dependensi IJulia lainnya).
Jika tidak, Anda dapat menggunakan manajer paket 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
(Anda mungkin ingin menambahkan dua perintah export
ke file ~/.profile
Anda sehingga keduanya dieksekusi secara otomatis setiap kali Anda memulai shell.)
Setelah Matplotlib dan PyPlot diinstal, dan Anda menggunakan lingkungan Julia berkemampuan grafis seperti IJulia, Anda cukup mengetik using PyPlot
dan mulai memanggil fungsi di API matplotlib.pyplot. Misalnya:
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 " )
Secara umum, semua argumen, termasuk argumen kata kunci, sama persis seperti di Python. (Dengan terjemahan kecil, tentu saja, misalnya Julia menggunakan true
dan nothing
alih-alih True
dan None
dari Python.)
API matplotlib.pyplot
lengkap terlalu luas untuk dijelaskan di sini; lihat dokumentasi matplotlib.pyplot untuk informasi lebih lanjut. Nomor versi Matplotlib dikembalikan oleh PyPlot.version
.
Hanya API matplotlib.pyplot
yang didokumentasikan saat ini yang diekspor. Untuk menggunakan fungsi lain dalam modul, Anda juga dapat memanggil matplotlib.pyplot.foo(...)
sebagai plt.foo(...)
. Misalnya, plt.plot(x, y)
juga berfungsi. (Dan PyObject
mentah untuk modul matplotlib
juga dapat diakses sebagai PyPlot.matplotlib
.)
Matplotlib agak tidak konsisten tentang kapitalisasi: ia memiliki contour3D
tetapi bar3d
, dan sebagainya. PyPlot mengganti nama semua fungsi tersebut menjadi menggunakan huruf kapital D (misalnya memiliki hist2D
, bar3D
, dan seterusnya).
Anda juga harus secara eksplisit memenuhi syarat beberapa fungsi bawaan fungsi Julia. Secara khusus, PyPlot.xcorr
, PyPlot.axes
, dan PyPlot.isinteractive
harus digunakan untuk mengakses matplotlib.pyplot.xcorr
dan sebagainya.
Jika Anda ingin mengakses semua fungsi PyPlot secara eksklusif melalui plt.somefunction(...)
, seperti konvensional di Python, Anda dapat melakukan import PyPlot; const plt = PyPlot
daripada using PyPlot
.
Anda bisa mendapatkan gambar saat ini sebagai objek Figure
(pembungkus matplotlib.pyplot.Figure
) dengan memanggil gcf()
.
Tipe Figure
mendukung API I/O multimedia Julia, sehingga Anda dapat menggunakan display(fig)
untuk menampilkan fig::PyFigure
dan show(io, mime, fig)
(atau writemime
di Julia 0.4) untuk menuliskannya ke tipe mime
tertentu string (misalnya "image/png"
atau "application/pdf"
) yang didukung oleh backend Matplotlib.
Jika Anda menggunakan PyPlot dari prompt Julia interaktif, seperti prompt baris perintah Julia atau notebook IJulia, maka plot akan muncul segera setelah fungsi plotting ( plot
dll.) dievaluasi.
Namun, jika Anda menggunakan PyPlot dari skrip Julia yang dijalankan secara non-interaktif (misalnya julia myscript.jl
), maka Matplotlib dijalankan dalam mode non-interaktif: jendela plot tidak akan dibuka hingga Anda menjalankan show()
(setara dengan plt.show()
dalam contoh Python).
PyPlot dapat menggunakan backend grafis Julia apa pun yang mampu menampilkan gambar PNG, SVG, atau PDF, seperti lingkungan IJulia. Untuk menggunakan backend yang berbeda, cukup panggil pushdisplay
dengan Display
yang diinginkan; lihat API tampilan multimedia Julia untuk detail lebih lanjut.
Di sisi lain, Anda mungkin ingin menggunakan salah satu backend Python Matplotlib untuk membuka jendela interaktif untuk setiap plot (untuk zoom interaktif, panning, dan sebagainya). Anda dapat melakukannya kapan saja dengan menjalankan:
pygui ( true )
untuk mengaktifkan GUI berbasis Python (jika memungkinkan) untuk plot berikutnya, sementara pygui(false)
akan kembali ke backend Julia. Bahkan ketika GUI Python sedang berjalan, Anda dapat menampilkan gambar saat ini dengan backend Julia dengan menjalankan display(gcf())
.
Jika tidak ada backend grafis Julia yang tersedia saat PyPlot diimpor, maka pygui(true)
adalah defaultnya.
Hanya Tk, wxWidgets, GTK+ (versi 2 atau 3), dan Qt (versi 4 atau 5; melalui PyQt5, PyQt4 atau PySide), backend GUI Python yang didukung oleh PyPlot. (Tentu saja, Anda harus menginstal salah satu dari toolkit ini untuk Python terlebih dahulu.) Secara default, PyPlot mengambil salah satu dari ini ketika dijalankan (berdasarkan apa yang telah Anda instal), tetapi Anda dapat memaksa toolkit tertentu untuk dipilih dengan mengimpor Modul PyCall dan menggunakan fungsi pygui
untuk menyetel backend Python sebelum mengimpor PyPlot:
using PyCall
pygui (gui)
using PyPlot
di mana gui
saat ini dapat menjadi salah satu dari :tk
, :gtk3
, :gtk
, :qt5
, :qt4
, :qt
, atau :wx
. Anda juga dapat menyetel default melalui parameter Matplotlib rcParams['backend']
di file matplotlibrc Anda.
Modul PyPlot juga mengekspor beberapa fungsi dan tipe berdasarkan modul matplotlib.colors dan matplotlib.cm untuk menyederhanakan pengelolaan peta warna (yang digunakan untuk menetapkan nilai pada warna dalam berbagai tipe plot). Secara khusus:
ColorMap
: pembungkus tipe matplotlib.colors.Colormap. Konstruktor berikut disediakan:
ColorMap{T<:Colorant}(name::String, c::AbstractVector{T}, n=256, gamma=1.0)
membuat peta warna n
-komponen dengan menginterpolasi warna secara linear dalam array c
dari Colorant
s (dari paket ColorTypes.jl). Jika Anda ingin name
dibuat secara otomatis, panggil ColorMap(c, n=256, gamma=1.0)
sebagai gantinya. Alternatifnya, alih-alih meneruskan array warna, Anda dapat meneruskan matriks komponen RGB atau RGBA yang terdiri dari 3 atau 4 kolom (mirip dengan ListedColorMap di Matplotlib).
Peta warna yang lebih umum lagi dapat didefinisikan dengan meneruskan array tupel (x,y0,y1) untuk komponen merah, hijau, biru, dan (opsional), seperti yang didefinisikan oleh konstruktor matplotlib.colors.LinearSegmentedColormap, melalui: 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)
atau 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)
mengembalikan peta warna (terdaftar) yang ada, setara dengan matplotlib.pyplot.get_cmap( name
).
objek matplotlib.colors.Colormap
yang dikembalikan oleh fungsi Python secara otomatis dikonversi ke tipe ColorMap
.
get_cmap(name::String)
atau get_cmap(name::String, lut::Integer)
memanggil fungsi matplotlib.pyplot.get_cmap.
register_cmap(c::ColorMap)
atau register_cmap(name::String, c::ColorMap)
memanggil fungsi matplotlib.colormap.register.
get_cmaps()
mengembalikan Vector{ColorMap}
dari peta warna yang saat ini terdaftar.
Perhatikan bahwa, mengingat lingkungan tampilan yang mendukung SVG seperti IJulia, objek ColorMap
dan Vector{ColorMap}
ditampilkan secara grafis; coba get_cmaps()
!
Paket PyPlot juga mengimpor fungsi dari toolkit mplot3d Matplotlib. Namun, tidak seperti Matplotlib, Anda dapat membuat plot 3D secara langsung tanpa terlebih dahulu membuat objek Axes3d, cukup dengan memanggil salah satu dari: bar3D
, contour3D
, contourf3D
, plot3D
, plot_surface
, plot_trisurf
, plot_wireframe
, atau scatter3D
(dan juga text2D
, text3D
), tepatnya seperti metode Axes3d yang diberi nama sesuai. Kami juga mengekspor sinonim seperti Matlab surf
untuk plot_surface
(atau plot_trisurf
untuk argumen array 1d) dan mesh
untuk plot_wireframe
. Misalnya, Anda dapat melakukan:
surf ( rand ( 30 , 40 ))
untuk memplot jaring permukaan 30x40 acak.
Anda juga dapat secara eksplisit membuat subplot dengan sumbu 3d melalui, misalnya, subplot(111, projection="3d")
, persis seperti di Matplotlib, tetapi Anda harus memanggil fungsi using3D()
terlebih dahulu untuk memastikan bahwa mplot3d dimuat (ini terjadi secara otomatis untuk plot3D
dll.). Konstruktor Axes3D
dan modul art3D juga diekspor.
Matplotlib memungkinkan Anda menggunakan persamaan LaTeX dalam label plot, judul, dan sebagainya hanya dengan mengapit persamaan dalam tanda dolar ( $ ... $
) di dalam string. Namun, mengetikkan persamaan LaTeX dalam literal string Julia adalah hal yang janggal karena pelolosan diperlukan untuk mencegah Julia menafsirkan tanda dolar dan garis miring terbalik itu sendiri; misalnya, persamaan LaTeX $alpha + beta$
akan menjadi string literal "$\alpha + \beta$"
di Julia.
Untuk menyederhanakannya, PyPlot menggunakan paket LaTeXStrings untuk menyediakan tipe LaTeXString
baru yang dibangun melalui L"...."
tanpa menghindari garis miring terbalik atau tanda dolar. Misalnya, seseorang cukup menulis L"$alpha + beta$"
untuk persamaan yang disebutkan di atas, dan dengan demikian Anda dapat melakukan hal-hal seperti:
title ( L " Plot of $ G amma_3(x)$ " )
Jika string Anda hanya berisi persamaan, Anda dapat menghilangkan tanda dolar, misalnya L"alpha + beta"
, dan persamaan tersebut akan ditambahkan secara otomatis. Sebagai manfaat tambahan, LaTeXString
secara otomatis ditampilkan sebagai persamaan yang diberikan di IJulia. Lihat paket LaTeXStrings untuk informasi lebih lanjut.
Secara default, plot di IJulia dikirim ke buku catatan sebagai gambar PNG. Secara opsional, Anda dapat memberi tahu PyPlot untuk menampilkan plot di browser sebagai gambar SVG, yang memiliki keuntungan karena tidak bergantung pada resolusi (sehingga ditampilkan tanpa pikselasi pada resolusi tinggi, misalnya jika Anda mengonversi buku catatan IJulia ke PDF), dengan berlari:
PyPlot . svg ( true )
Ini bukan default karena plot SVG di browser jauh lebih lambat untuk ditampilkan (terutama untuk plot yang kompleks) dan mungkin ditampilkan secara tidak akurat di beberapa browser dengan dukungan buggy SVG. Metode PyPlot.svg()
mengembalikan apakah tampilan SVG saat ini diaktifkan.
Perhatikan bahwa ini sepenuhnya terpisah dari mengekspor plot secara manual ke SVG atau format lainnya. Terlepas dari apakah PyPlot menggunakan SVG untuk tampilan browser, Anda dapat mengekspor plot ke SVG kapan saja dengan menggunakan perintah matplotlib savefig, misalnya savefig("plot.svg")
.
Anda dapat mengubah kamus rcParams
yang digunakan Matplotlib untuk parameter global dengan mengikuti contoh ini:
rcParams = PyPlot . PyDict (PyPlot . matplotlib. " rcParams " )
rcParams[ " font.size " ] = 15
(Jika Anda menggunakan PyPlot.matplotlib.rcParams
, PyCall akan membuat salinan kamus sehingga Python rcParams
tidak akan diubah.)
Modul ini ditulis oleh Steven G. Johnson.