পাইথনে খালি চেনাশোনা সহ একটি স্ক্যাটার প্লট কীভাবে করবেন?


166

পাইথনে, ম্যাটপ্লাটলিবের সাথে, খালি চেনাশোনা সহ একটি স্ক্যাটার প্লট কীভাবে প্লট করা যায়? লক্ষ্যটি হ'ল ইতোমধ্যে প্লট করা কিছু রঙিন ডিস্কের চারপাশে খালি চেনাশোনাগুলি আঁকুন scatter(), যাতে এগুলি হাইলাইট করা যায়, আদর্শভাবে রঙিন চেনাশোনাগুলি পুনরায় আঁকানো ছাড়াই।

আমি চেষ্টা করেছিলাম facecolors=None, কোন লাভ হয়নি।


1
বিভিন্ন রঙের খালি / ফাঁকা স্ক্রেটার প্লট আঁকার লোকেরা এই প্রশ্নের দিকে নজর দিতে পারে ।
ImportanceOfBeingEnnest

উত্তর:


242

বিক্ষিপ্ত জন্য ডকুমেন্টেশন থেকে :

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

উদাহরণ চিত্র

দ্রষ্টব্য: অন্যান্য ধরণের প্লটের জন্য এবং ব্যবহারের জন্য এই পোস্টটি দেখুন ।markeredgecolormarkerfacecolor


4
ধন্যবাদ! গ্যাচচাটি হ'ল যে আরও সাধারণ (পাইথনে) facecolors=Noneকাজ করে না, যা আমাকে ট্রিপ করেছিল।
এরিক হে লেবিগোট

24
খুব উপকারী. এটি markerfacecolor='none', এখন এইভাবেই।
হিচাম_ইই

2
আমি আমার matplotlib শৈলীটি এমনভাবে তৈরি করেছি যা প্রান্তগুলিকে শূন্যতে সেট করে। যদি আপনি কোনও চিহ্ন markerfacecolor='none'যোগ করার চেষ্টা না করে দেখেনmarkeredgewidth=1.0
ওলাস

এই অ্যাপ্রোচটি ম্যাটপ্লটলিবের স্ট্যান্ডার্ড আমদানি করার পরে %matplotlib inlineএবং সমুদ্রের কাঠিটিকে import matplotlib.pyplot as pltপূর্বনির্ধারিত হিসাবে পূর্বনির্ধারিত হিসাবে সেট করার পরেও সিবর্নে ব্যবহার করা যেতে পারেimport seaborn as sns; sns.set()
Jakob

68

এই কাজ করবে?

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

উদাহরণ চিত্র

বা প্লট ব্যবহার করে ()

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

উদাহরণ চিত্র


3
আপনি যখন plotপরিবর্তে ব্যবহার করেন তখন এটি কার্যকরscatter
ট্রেভর বয়েড স্মিথ

2
জন্য scatter, আপনি edgecolorsমত নির্দিষ্ট করা প্রয়োজন edgecolors='r'। অন্যথায়, চেনাশোনাগুলি অদৃশ্য হয়ে যায়। এখানে দেখুন
টিটি

14

এখানে অন্য উপায় রয়েছে: এটি বর্তমান অক্ষ, প্লট বা চিত্র বা যা কিছু যা একটি বৃত্ত যোগ করে:

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")।


5

ম্যাটপ্ল্লোব ২.০-তে একটি প্যারামিটার বলা হয়েছে fillstyle যা মার্কার পূরণ করার পথে আরও ভাল নিয়ন্ত্রণের সুযোগ দেয়। আমার ক্ষেত্রে আমি এটিকে ত্রুটিবারগুলি দিয়ে ব্যবহার করেছি তবে এটি সাধারণত http://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.errorbar.html চিহ্নিতকারীদের জন্য কাজ করে

fillstyleনিম্নলিখিত মানগুলি গ্রহণ করে: ['পূর্ণ' | 'বাম' | 'ডান' | 'নীচে' | 'শীর্ষ' | 'কেউ']

ব্যবহার করার সময় দু'টি গুরুত্বপূর্ণ বিষয় মনে রাখা উচিত fillstyle,

1) যদি এমএফসি কোনও ধরণের মান সেট করা থাকে তবে এটি অগ্রাধিকার নেবে, সুতরাং, আপনি যদি কোনওটি পূরণের জন্য স্টাইল সেট করেন না তবে এটি কার্যকর হবে না। সুতরাং ফিল স্টাইলের সাথে একত্রে এমএফসি ব্যবহার করা এড়িয়ে চলুন

2) আপনি চিহ্নিতকারী প্রান্তের প্রস্থ (ব্যবহার markeredgewidthবা mew) নিয়ন্ত্রণ করতে চাইতে পারেন কারণ যদি চিহ্নিতকারী তুলনামূলকভাবে ছোট হয় এবং প্রান্তের প্রস্থটি ঘন হয় তবে চিহ্নিতকারীরা তা না থাকলেও ভরাট দেখায়।

ত্রুটিবারগুলি ব্যবহার করে নীচে একটি উদাহরণ দেওয়া হল:

myplot.errorbar(x=myXval, y=myYval, yerr=myYerrVal, fmt='o', fillstyle='none', ecolor='blue',  mec='blue')

2

গ্যারি কেরের উদাহরণের ভিত্তিতে এবং এখানে প্রস্তাবিত হিসাবে কেউ নিম্নলিখিত কোডগুলি সহ নির্দিষ্ট মান সম্পর্কিত খালি চেনাশোনা তৈরি করতে পারে:

import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.markers import MarkerStyle

x = np.random.randn(60) 
y = np.random.randn(60)
z = np.random.randn(60)

g=plt.scatter(x, y, s=80, c=z)
g.set_facecolor('none')
plt.colorbar()
plt.show()

এটি মূলত একটি জটিল সংস্করণ স্বীকৃত উত্তর ...
এরিক হে লেবিগোট

আমার বক্তব্য থেকে এটা না। রঙ সহ স্ক্রেটার প্লট ব্যবহার করা কমান্ডের মধ্যে ফেসকালার = "কিছুই নয়" ব্যতীত নয়। তত্ক্ষেত্রে প্রদত্ত লিঙ্কে বর্ণিত বর্ণনামূলকভাবে পরবর্তী রঙের অপসারণের প্রয়োজন। রঙিন কোডিংয়ের সাথে স্ক্যাটার প্লটে ফেসকালার অপসারণ করতে দুর্ভাগ্যজনকভাবে এই জটিল সমাধানটি প্রয়োজন।
আরক

এই উত্তরের পন্থাটি যদি সত্যিই খালি চেনাশোনা ধারণ করে না এমন কোনও গ্রাফ আপডেট করতে চায় তবে এই জবাবটি কার্যকরভাবে কার্যকর। যাইহোক, এই চেনাশোনাগুলি সরাসরি তৈরি করার বিষয়ে প্রশ্ন , সুতরাং গ্রহণযোগ্য সমাধান হ'ল উপায়, কারণ এটি উত্তর হিসাবে একই রকম হয় তবে সরাসরি, কোনও প্রথম গ্রাফের বহিরাগত আপডেট ছাড়াই।
এরিক হে লেবিগোট

এই "জটিল সংস্করণ" আমার পক্ষে কাজ করেছিল যখন যুক্তিটি এম্বেড করে .scatter()না। প্রসঙ্গে, আমি একটি রঙিন্যাপ ( c=z, cmap='jet') ও প্রয়োগ করছিলাম ।
অ্যান্ড্রু রূপালী

1

সুতরাং আমি ধরে নিই যে আপনি কিছু পয়েন্ট হাইলাইট করতে চান যা একটি নির্দিষ্ট মানদণ্ডে খাপ খায়। খালি চেনাশোনা সহ হাইটলাইট পয়েন্টগুলির দ্বিতীয় স্কেটার প্লট করার জন্য আপনি প্রিলেডের আদেশটি ব্যবহার করতে পারেন এবং সমস্ত পয়েন্ট প্লট করার জন্য প্রথম কল করুন call নিশ্চিত হয়ে নিন যে বৃহত্তর খালি চেনাশোনাগুলিতে ছোট ছোট ভরাটগুলি বন্ধ করার জন্য এই পরামিতিগুলি যথেষ্ট পরিমাণে ছোট।

অন্য বিকল্পটি হল স্ক্রেটার ব্যবহার না করা এবং বৃত্ত / উপবৃত্ত কমান্ডটি ব্যবহার করে পৃথকভাবে প্যাচগুলি আঁকুন। এগুলি ম্যাটপ্ল্লোব.প্যাচগুলিতে রয়েছে, কীভাবে চেনাশোনাগুলি আয়তক্ষেত্রগুলি আঁকতে হয় সে সম্পর্কে কিছু নমুনা কোড এখানে রয়েছে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.