كيف تفعل مؤامرة مبعثرة مع دوائر فارغة في بيثون؟
-
30-09-2019 - |
سؤال
في Python ، مع Matplotlib ، كيف يمكن لمؤامرة مبعثرة مع فارغة يتم رسم الدوائر؟ الهدف هو رسم دوائر فارغة حولها بعض من الأقراص الملونة التي تم رسمها بالفعل بواسطة scatter()
, ، لتسليط الضوء عليها ، من الناحية المثالية دون الحاجة إلى إعادة رسم الدوائر الملونة.
حاولت facecolors=None
, ، ولكن دون جدوى.
المحلول
من توثيق للتشتت:
Optional kwargs control the Collection properties; in particular:
edgecolors:
The string ‘none’ to plot faces with no outlines
facecolors:
The string ‘none’ to plot unfilled outlines
حاول القيام بما يلي:
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randn(60)
y = np.random.randn(60)
plt.scatter(x, y, s=80, facecolors='none', edgecolors='r')
plt.show()
ملحوظة: للاطلاع على أنواع أخرى من المؤامرات هذا المشنور على استخدام markeredgecolor
و markerfacecolor
.
نصائح أخرى
هل تعمل هذه؟
plt.scatter(np.random.randn(100), np.random.randn(100), facecolors='none')
أو باستخدام Plot ()
plt.plot(np.random.randn(100), np.random.randn(100), 'o', mfc='none')
إليك طريقة أخرى: هذا يضيف دائرة إلى المحاور الحالية أو المؤامرة أو الصورة أو أي شيء:
from matplotlib.patches import Circle # $matplotlib/patches.py
def circle( xy, radius, color="lightsteelblue", facecolor="none", alpha=1, ax=None ):
""" add a circle to ax= or current axes
"""
# from .../pylab_examples/ellipse_demo.py
e = Circle( xy=xy, radius=radius )
if ax is None:
ax = pl.gca() # ax = subplot( 1,1,1 )
ax.add_artist(e)
e.set_clip_box(ax.bbox)
e.set_edgecolor( color )
e.set_facecolor( facecolor ) # "none" not None
e.set_alpha( alpha )
(يتم سحق الدوائر الموجودة في الصورة إلى القطع النارية بسبب imshow aspect="auto"
).
في Matplotlib 2.0 هناك معلمة تسمى fillstyle
مما يسمح بالتحكم بشكل أفضل على علامات الطريق. في حالتي ، استخدمتها مع errorbars ولكنها تعمل مع العلامات بشكل عامhttp://matplotlib.org/api/_as_gen/matplotlib.axes.axes.errorbar.html
fillstyle
يقبل القيم التالية: ['full' | "اليسار" | "الحق" | 'القاع' | 'top' | 'لا أحد'
هناك شيئان مهمان يجب وضعهما في الاعتبار عند استخدامه fillstyle
,
1) إذا تم تعيين MFC على أي نوع من القيمة ، فسوف يستغرق الأمر الأولوية ، وبالتالي ، إذا قمت بتعيين FillStyle على "لا شيء" ، فلن يسري. لذا تجنب استخدام MFC بالتزامن مع FillStyle
2) قد ترغب في التحكم في عرض حافة العلامة (باستخدام markeredgewidth
أو mew
) لأنه إذا كانت العلامة صغيرة نسبيًا وكان عرض الحافة سميكًا ، فستبدو العلامات مملوءة على الرغم من أنها ليست كذلك.
فيما يلي مثال باستخدام errorbars:
myplot.errorbar(x=myXval, y=myYval, yerr=myYerrVal, fmt='o', fillstyle='none', ecolor='blue', mec='blue')
لذلك أفترض أنك تريد تسليط الضوء على بعض النقاط التي تناسب معايير معينة. يمكنك استخدام أمر Prelude لإجراء مؤامرة مبعثرة ثانية من نقاط Hightlighted مع دائرة فارغة ومكالمة أولى لرسم جميع النقاط. تأكد من أن s paramter صغير بما فيه الكفاية للدوائر الفارغة الأكبر لإحاطة تلك الأصغر المملوءة.
الخيار الآخر هو عدم استخدام مبعثر ورسم التصحيحات بشكل فردي باستخدام أمر الدائرة/القطع الناقص. هذه في matplotlib.patches ، هنا هل بعض رمز العينة حول كيفية رسم مستطيلات الدوائر وما إلى ذلك.