توفر هذه الوحدة واجهة Julia لمكتبة الرسم Matplotlib من Python، وتحديدًا إلى وحدة matplotlib.pyplot
.
يستخدم PyPlot حزمة Julia PyCall للاتصال بـ Matplotlib مباشرة من Julia مع القليل من الحمل أو بدونه (يتم تمرير المصفوفات دون عمل نسخة). (راجع أيضًا PythonPlot.jl للحصول على إصدار PyPlot.jl باستخدام حزمة PythonCall.jl البديلة.)
تستفيد هذه الحزمة من واجهة برمجة تطبيقات الإدخال/الإخراج للوسائط المتعددة الخاصة بـ Julia لعرض المخططات في أي واجهة رسومية خلفية لـ Julia، بما في ذلك الرسومات المضمنة في IJulia. وبدلاً من ذلك، يمكنك استخدام الواجهة الخلفية Matplotlib الرسومية المستندة إلى Python لدعم تكبير/تصغير الحبكة التفاعلية وما إلى ذلك.
(تحل حزمة PyPlot هذه محل حزمة سابقة تحمل نفس الاسم بواسطة Junfeng Li، والتي استخدمت PyPlot عبر مقبس ZeroMQ مع IPython.)
ستحتاج إلى تثبيت مكتبة Python Matplotlib على جهازك حتى تتمكن من استخدام PyPlot. يمكنك إما إجراء رسم مضمّن باستخدام IJulia، الذي لا يتطلب واجهة مستخدم رسومية خلفية، أو استخدام واجهات Qt أو wx أو GTK+ الخلفية لـ Matplotlib كما هو موضح أدناه.
بمجرد تثبيت Matplotlib، يمكنك فقط استخدام Pkg.add("PyPlot")
في Julia لتثبيت PyPlot وتبعياته.
إذا قمت بإعداد PyCall لاستخدام حزمة Conda.jl لتثبيت توزيع Julia Python خاص (ليس في نظام PATH
) (عبر Miniconda)، فسيقوم PyPlot تلقائيًا بتثبيت Matplotlib حسب الحاجة.
إذا كنت تقوم بتثبيت PyCall وPyPlot لأول مرة، فما عليك سوى إجراء ENV["PYTHON"]=""
قبل تشغيل Pkg.add("PyPlot")
. بخلاف ذلك، يمكنك إعادة تكوين PyCall لاستخدام Conda عبر:
ENV [ " PYTHON " ] = " "
Pkg . build ( " PyCall " )
في المرة التالية التي تقوم فيها باستيراد PyPlot
، سيطلب من Conda تثبيت Matplotlib.
في نظام التشغيل MacOS، يجب عليك إما تثبيت XQuartz لنظام التشغيل MacOS 10.9 أو الأحدث أو تثبيت توزيعة Anaconda Python للحصول على PyPlot كامل الوظائف.
يأتي 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
(قد ترغب في إضافة أمري export
إلى ملف ~/.profile
الخاص بك بحيث يتم تنفيذهما تلقائيًا عند بدء تشغيل الصدفة.)
بمجرد تثبيت Matplotlib وPyPlot، واستخدام بيئة Julia القادرة على الرسومات مثل IJulia، يمكنك ببساطة الكتابة 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 " )
بشكل عام، جميع الوسيطات، بما في ذلك وسيطات الكلمات الرئيسية، هي نفسها تمامًا كما في بايثون. (مع الترجمات البسيطة، بالطبع، تستخدم جوليا، على سبيل المثال، true
و nothing
بدلاً من True
و None
في بايثون.)
واجهة برمجة matplotlib.pyplot
الكاملة واسعة جدًا بحيث لا يمكن وصفها هنا؛ راجع وثائق matplotlib.pyplot لمزيد من المعلومات. يتم إرجاع رقم إصدار Matplotlib بواسطة PyPlot.version
.
يتم تصدير واجهة برمجة تطبيقات matplotlib.pyplot
الموثقة حاليًا فقط. لاستخدام وظائف أخرى في الوحدة، يمكنك أيضًا استدعاء matplotlib.pyplot.foo(...)
كـ plt.foo(...)
. على سبيل المثال، يعمل plt.plot(x, y)
أيضًا. (ويمكن أيضًا الوصول إلى PyObject
الخام لوحدات matplotlib
باسم PyPlot.matplotlib
.)
يعتبر Matplotlib غير متسق إلى حد ما فيما يتعلق بالأحرف الكبيرة: فهو يحتوي على contour3D
ولكن bar3d
وما إلى ذلك. يقوم PyPlot بإعادة تسمية جميع هذه الوظائف لاستخدام الحرف D الكبير (على سبيل المثال، يحتوي على hist2D
و bar3D
وما إلى ذلك).
يجب عليك أيضًا تأهيل بعض الوظائف المضمنة في وظائف جوليا بشكل صريح. على وجه الخصوص، يجب استخدام PyPlot.xcorr
و PyPlot.axes
و PyPlot.isinteractive
للوصول إلى matplotlib.pyplot.xcorr
وما إلى ذلك.
إذا كنت ترغب في الوصول إلى جميع وظائف PyPlot حصريًا من خلال plt.somefunction(...)
، كما هو معتاد في Python، فيمكنك import PyPlot; const plt = PyPlot
بدلاً من using PyPlot
.
يمكنك الحصول على الشكل الحالي ككائن Figure
(مجمّع حول matplotlib.pyplot.Figure
) عن طريق استدعاء gcf()
.
يدعم نوع Figure
واجهة برمجة تطبيقات الإدخال/الإخراج للوسائط المتعددة لجوليا، لذا يمكنك استخدام display(fig)
لإظهار fig::PyFigure
و show(io, mime, fig)
(أو writemime
في Julia 0.4) لكتابته إلى نوع mime
محدد سلسلة (على سبيل المثال "image/png"
أو "application/pdf"
) مدعومة من قبل الواجهة الخلفية لـ Matplotlib.
إذا كنت تستخدم PyPlot من موجه Julia التفاعلي، مثل موجه سطر أوامر Julia أو دفتر ملاحظات IJulia، فستظهر المخططات فورًا بعد تقييم وظيفة التخطيط ( plot
وما إلى ذلك).
ومع ذلك، إذا كنت تستخدم PyPlot من برنامج نصي Julia يتم تشغيله بشكل غير تفاعلي (على سبيل المثال، julia myscript.jl
)، فسيتم تنفيذ Matplotlib في الوضع غير التفاعلي: لا يتم فتح نافذة الرسم حتى تقوم بتشغيل show()
(أي ما يعادل plt.show()
في أمثلة بايثون).
يمكن لـ PyPlot استخدام أي واجهة خلفية لرسومات Julia قادرة على عرض صور PNG أو SVG أو PDF، مثل بيئة IJulia. لاستخدام واجهة خلفية مختلفة، ما عليك سوى استدعاء pushdisplay
مع Display
المطلوب؛ راجع واجهة برمجة تطبيقات عرض الوسائط المتعددة لجوليا لمزيد من التفاصيل.
من ناحية أخرى، قد ترغب في استخدام إحدى واجهات Python Matplotlib الخلفية لفتح نافذة تفاعلية لكل قطعة أرض (للتكبير/التصغير التفاعلي، والتحريك، وما إلى ذلك). يمكنك القيام بذلك في أي وقت عن طريق تشغيل:
pygui ( true )
لتشغيل واجهة المستخدم الرسومية المستندة إلى Python (إن أمكن) للمخططات اللاحقة، بينما سيعود pygui(false)
إلى واجهة Julia الخلفية. حتى عند تشغيل واجهة المستخدم الرسومية لـ Python، يمكنك عرض الشكل الحالي باستخدام الواجهة الخلفية لـ Julia عن طريق تشغيل display(gcf())
.
إذا لم تكن الواجهة الخلفية لرسومات Julia متاحة عند استيراد PyPlot، فإن pygui(true)
هو الإعداد الافتراضي.
فقط Tk وwxWidgets وGTK+ (الإصدار 2 أو 3) وQt (الإصدار 4 أو 5؛ عبر PyQt5 أو PyQt4 أو PySide)، يتم دعم واجهات Python GUI الخلفية بواسطة PyPlot. (من الواضح أنه يجب عليك تثبيت إحدى مجموعات الأدوات هذه لـ Python أولاً.) افتراضيًا، يختار PyPlot واحدة من هذه الأدوات عند بدء التشغيل (استنادًا إلى ما قمت بتثبيته)، ولكن يمكنك فرض اختيار مجموعة أدوات معينة عن طريق استيراد ملف وحدة PyCall واستخدام وظيفة pygui
الخاصة بها لتعيين واجهة Python الخلفية قبل استيراد PyPlot:
using PyCall
pygui (gui)
using PyPlot
حيث يمكن أن تكون gui
حاليًا واحدة من :tk
أو :gtk3
أو :gtk
أو :qt5
أو :qt4
أو :qt
أو :wx
. يمكنك أيضًا تعيين الإعداد الافتراضي عبر معلمة Matplotlib rcParams['backend']
في ملف matplotlibrc الخاص بك.
تقوم وحدة PyPlot أيضًا بتصدير بعض الوظائف والأنواع بناءً على وحدتي matplotlib.colors وmatplotlib.cm لتبسيط إدارة خرائط الألوان (التي تُستخدم لتعيين قيم للألوان في أنواع الرسم المختلفة). بخاصة:
ColorMap
: غلاف حول نوع matplotlib.colors.Colormap. يتم توفير المنشئات التالية:
يقوم ColorMap{T<:Colorant}(name::String, c::AbstractVector{T}, n=256, gamma=1.0)
بإنشاء خريطة ألوان مكونة n
عن طريق الاستيفاء الخطي للألوان في المصفوفة c
الخاصة بـ Colorant
s (من حزمة ColorTypes.jl). إذا كنت تريد إنشاء name
تلقائيًا، فاتصل بـ ColorMap(c, n=256, gamma=1.0)
بدلاً من ذلك. بدلاً من ذلك، بدلاً من تمرير مجموعة من الألوان، يمكنك تمرير مصفوفة مكونة من 3 أو 4 أعمدة من مكونات RGB أو RGBA، على التوالي (على غرار ListedColorMap في Matplotlib).
يمكن تعريف خرائط الألوان الأكثر عمومية عن طريق تمرير صفائف من (x، y0، y1) للمكونات الأحمر والأخضر والأزرق و (اختياريًا) ألفا، كما هو محدد بواسطة مُنشئ matplotlib.colors.LinearSegmentedColormap، عبر: 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
).
يتم تحويل كائنات matplotlib.colors.Colormap
التي يتم إرجاعها بواسطة وظائف Python تلقائيًا إلى نوع 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}
لخرائط الألوان المسجلة حاليًا.
لاحظ أنه، نظرًا لبيئة العرض الداعمة لـ SVG مثل IJulia، يتم عرض كائنات ColorMap
و Vector{ColorMap}
بيانيًا؛ جرب get_cmaps()
!
تستورد حزمة PyPlot أيضًا الوظائف من مجموعة أدوات MPlot3d الخاصة بـ Matplotlib. على عكس Matplotlib، يمكنك إنشاء مخططات ثلاثية الأبعاد مباشرةً دون إنشاء كائن Axes3d أولاً، ببساطة عن طريق استدعاء أحد: bar3D
أو contour3D
أو contourf3D
أو plot3D
أو plot_surface
أو plot_trisurf
أو plot_wireframe
أو scatter3D
(بالإضافة إلى text2D
أو text3D
) بالضبط مثل الأساليب المسماة المقابلة لـ Axes3d. نقوم أيضًا بتصدير surf
المشابهة لـ Matlab لـ plot_surface
(أو plot_trisurf
لوسيطات المصفوفة 1d) mesh
لـ plot_wireframe
. على سبيل المثال، يمكنك القيام بما يلي:
surf ( rand ( 30 , 40 ))
لرسم شبكة سطحية عشوائية 30 × 40.
يمكنك أيضًا إنشاء قطعة فرعية ذات محاور ثلاثية الأبعاد بشكل صريح عبر، على سبيل المثال، subplot(111, projection="3d")
، تمامًا كما في Matplotlib، ولكن يجب عليك أولاً استدعاء الدالة using3D()
للتأكد من تحميل mplot3d (يحدث هذا تلقائيًا لـ plot3D
وما إلى ذلك). يتم أيضًا تصدير مُنشئ Axes3D
ووحدة art3D.
يتيح لك Matplotlib استخدام معادلات LaTeX في تسميات المخططات والعناوين وما إلى ذلك ببساطة عن طريق تضمين المعادلات في علامات الدولار ( $ ... $
) داخل السلسلة. ومع ذلك، فإن كتابة معادلات LaTeX في سلسلة جوليا الحرفية أمر غريب لأن الهروب ضروري لمنع جوليا من تفسير علامات الدولار والخطوط المائلة العكسية نفسها؛ على سبيل المثال، معادلة LaTeX $alpha + beta$
ستكون السلسلة الحرفية "$\alpha + \beta$"
في جوليا.
لتبسيط ذلك، يستخدم PyPlot حزمة LaTeXStrings لتوفير نوع LaTeXString
جديد يتم إنشاؤه عبر L"...."
دون الهروب من الخطوط المائلة العكسية أو علامات الدولار. على سبيل المثال، يمكن للمرء ببساطة كتابة 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 لعرض المتصفح، يمكنك تصدير قطعة أرض إلى SVG في أي وقت باستخدام أمر Matplotlib savefig، على سبيل المثال savefig("plot.svg")
.
يمكنك تعديل قاموس rcParams
الذي يستخدمه Matplotlib للمعلمات العامة باتباع هذا المثال:
rcParams = PyPlot . PyDict (PyPlot . matplotlib. " rcParams " )
rcParams[ " font.size " ] = 15
(إذا استخدمت PyPlot.matplotlib.rcParams
بدلاً من ذلك، فسيقوم PyCall بإنشاء نسخة من القاموس حتى لا يتم تعديل Python rcParams
.)
تمت كتابة هذه الوحدة بواسطة ستيفن ج. جونسون.