سؤال

في 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()

example image

ملحوظة: للاطلاع على أنواع أخرى من المؤامرات هذا المشنور على استخدام markeredgecolor و markerfacecolor.

نصائح أخرى

هل تعمل هذه؟

plt.scatter(np.random.randn(100), np.random.randn(100), facecolors='none')

example image

أو باستخدام Plot ()

plt.plot(np.random.randn(100), np.random.randn(100), 'o', mfc='none')

example image

إليك طريقة أخرى: هذا يضيف دائرة إلى المحاور الحالية أو المؤامرة أو الصورة أو أي شيء:

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 )

alt text

(يتم سحق الدوائر الموجودة في الصورة إلى القطع النارية بسبب 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 ، هنا هل بعض رمز العينة حول كيفية رسم مستطيلات الدوائر وما إلى ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top