이 모듈은 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 버전은 기본적으로 PyPlot에서 지원되지 않는 Cocoa GUI 백엔드를 사용합니다. 또한 지원되는 Tk 백엔드가 있지만 XQuartz를 설치하지 않으면 Tk 백엔드가 작동하지 않습니다.
또는 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
(쉘을 시작할 때마다 자동으로 실행되도록 두 개의 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
.
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()
와 동일). plt.show()
(Python 예제에서는)).
PyPlot은 IJulia 환경과 같이 PNG, SVG 또는 PDF 이미지를 표시할 수 있는 Julia 그래픽 백엔드를 사용할 수 있습니다. 다른 백엔드를 사용하려면 원하는 Display
사용하여 pushdisplay
호출하면 됩니다. 자세한 내용은 Julia 멀티미디어 디스플레이 API를 참조하세요.
반면에 Python Matplotlib 백엔드 중 하나를 사용하여 각 플롯(대화형 확대/축소, 패닝 등)에 대한 대화형 창을 열 수도 있습니다. 다음을 실행하여 언제든지 이 작업을 수행할 수 있습니다.
pygui ( true )
후속 플롯에 대해 Python 기반 GUI(가능한 경우)를 켜는 반면 pygui(false)
Julia 백엔드로 돌아갑니다. Python GUI가 실행 중인 경우에도 display(gcf())
실행하여 Julia 백엔드로 현재 그림을 표시할 수 있습니다.
PyPlot을 가져올 때 Julia 그래픽 백엔드를 사용할 수 없는 경우 pygui(true)
기본값입니다.
Tk, wxWidgets, GTK+(버전 2 또는 3) 및 Qt(버전 4 또는 5, PyQt5, PyQt4 또는 PySide를 통해), Python GUI 백엔드만 PyPlot에서 지원됩니다. (분명히 Python용 툴킷 중 하나를 먼저 설치해야 합니다.) 기본적으로 PyPlot은 시작 시 이 중 하나를 선택하지만(설치한 항목에 따라) 다음을 가져와서 특정 툴킷을 강제로 선택하도록 할 수 있습니다. 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과 유사).
matplotlib.colors.LinearSegmentedColormap 생성자에서 정의한 대로 빨간색, 녹색, 파란색 및 (선택적으로) 알파 구성 요소에 대한 (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의 상응하는 이름의 메서드와 같습니다. 또한 plot_surface
(또는 1D 배열 인수의 경우 plot_trisurf
)에 대한 Matlab과 유사한 동의어 surf
과 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 이미지로 전송됩니다. 선택적으로 PyPlot에 브라우저에 플롯을 SVG 이미지로 표시하도록 지시할 수 있습니다. 이는 해상도에 독립적이라는 이점이 있습니다(예를 들어 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
사용한 경우 PyCall은 Python rcParams
수정되지 않도록 사전의 복사본을 만듭니다.)
이 모듈은 Steven G. Johnson이 작성했습니다.