ম্যাটপ্ল্লোলিব / পাইপ্লট / পাইথনে বহু উদাহরণ কেন `ডুমুর, কুড়ালি = plt.subplots () use ব্যবহার করে?


265

আমি matplotlibউদাহরণগুলি অধ্যয়ন করে ব্যবহার করতে শিখছি , এবং অনেকগুলি উদাহরণে একক প্লট তৈরি করার আগে নিম্নলিখিতগুলির মতো একটি লাইন অন্তর্ভুক্ত বলে মনে হয় ...

fig, ax = plt.subplots()

এখানে কিছু উদাহরণঃ...

উদাহরণটি কেবল একটি একক চার্ট তৈরি করার চেষ্টা করা হচ্ছে, যদিও আমি এই ফাংশনটি অনেক বেশি ব্যবহার করেছি তা দেখতে পাচ্ছি। অন্য কিছু সুবিধা আছে? জন্য অফিসিয়াল ডেমো subplots()এছাড়াও ব্যবহার f, ax = subplotsযখন একটি একক চার্ট তৈরি করার সময়, এবং এটি শুধুমাত্র কি কখনো রেফারেন্স কুঠার যে পরে। এই কোডটি তারা ব্যবহার করে।

# Just a figure and one subplot
f, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Simple plot')

11
ভাল, এটি সংক্ষিপ্ত, সংক্ষিপ্ত এবং আপনি একটি পদক্ষেপে চিত্র এবং অক্ষ উভয়ই একটি রেফারেন্স পান get এটি অজগর, কারণ এটি সুন্দর :)
সেলে

উত্তর:


322

plt.subplots()একটি ফাংশন যা একটি চিত্র এবং অক্ষ বস্তু (গুলি) সমন্বিত একটি টুপল ফেরত দেয়। সুতরাং আপনি যখন fig, ax = plt.subplots()এই টিপলটি ভেরিয়েবলগুলিতে আনপ্যাক করেন তখন figএবং ax। রয়ে figযদি আপনি পরিবর্তন চিত্রে পর্যায়ের বৈশিষ্ট্যাবলী অথবা পরে (সঙ্গে যেমন একটি ইমেজ ফাইল হিসাবে চিত্র সংরক্ষণ চান দরকারী fig.savefig('yourfilename.png'))। আপনাকে অবশ্যই ফিরে আসা ফিগার অবজেক্টটি ব্যবহার করতে হবে না তবে অনেক লোক এটি পরে ব্যবহার করেন তাই এটি দেখতে সাধারণ। এছাড়াও, সমস্ত অক্ষের অবজেক্টস (যে বিষয়গুলিতে প্লট করার পদ্ধতি রয়েছে), কোনওভাবেই পিতামাতার ফিগার অবজেক্ট থাকে, এভাবে:

fig, ax = plt.subplots()

এর থেকে আরও সংক্ষিপ্ত:

fig = plt.figure()
ax = fig.add_subplot(111)

7
খুব ভাল ব্যাখ্যা। এখানে এটা উপর ডক হয় - matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.subplots
bretcj7

2
কেন আমরা সবসময় সাবপ্লোটে 111 পরামিতি হিসাবে ব্যবহার করি?
প্রিয়ানশ

@ প্রিয়াংশ, কারণ এটি মাতলাব সিনট্যাক্স থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয়েছে
pcko1

@ প্রিয়াংশ সর্বদা না। আপনি যদি 4 টি গ্রাফ চান তবে আপনার (বা 222, 223, 224 যথাক্রমে) ax11, ax12, ax21, ax22ব্যবহার করে থাকতে পারে fig.add_subplot(221)
গুইমোট

49

এখানে শুধু একটি পরিপূরক।

নিম্নলিখিত প্রশ্নটি হ'ল আমি যদি চিত্রটিতে আরও সাবপ্লট চাই?

ডকটিতে উল্লিখিত হিসাবে, আমরা fig = plt.subplots(nrows=2, ncols=2)একটি চিত্র বস্তুর গ্রিড (2,2) সহ সাবপ্লটগুলির একটি গ্রুপ সেট করতে ব্যবহার করতে পারি ।

তারপরে যেমন আমরা জানি, fig, ax = plt.subplots()রিটার্নগুলি একটি টিপল দেয়, fig, ax1, ax2, ax3, ax4 = plt.subplots(nrows=2, ncols=2)প্রথমে চেষ্টা করা যাক ।

ValueError: not enough values to unpack (expected 4, got 2)

এটি একটি ত্রুটি উত্থাপন করে, তবে কোনও উদ্বেগের কারণ নেই, কারণ আমরা এখন দেখতে পাচ্ছি যে plt.subplots()আসলে দুটি উপাদান দিয়ে একটি টিপল ফিরে আসে। 1 ম একটি অবশ্যই একটি চিত্র চিত্র হবে এবং অন্যটি সাবপ্লট অবজেক্টের একটি গ্রুপ হতে হবে।

সুতরাং আসুন এটি আবার চেষ্টা করুন:

fig, [[ax1, ax2], [ax3, ax4]] = plt.subplots(nrows=2, ncols=2)

এবং প্রকারটি পরীক্ষা করুন:

type(fig) #<class 'matplotlib.figure.Figure'>
type(ax1) #<class 'matplotlib.axes._subplots.AxesSubplot'>

অবশ্যই, আপনি যদি প্যারামিটারগুলি (nરો = 1, ncol = 4) হিসাবে ব্যবহার করেন তবে ফর্ম্যাটটি হওয়া উচিত:

fig, [ax1, ax2, ax3, ax4] = plt.subplots(nrows=1, ncols=4)

সুতরাং কেবল মনে রাখবেন যে তালিকাটি নির্মাণ করা সাব-প্লট গ্রিড হিসাবে আমরা চিত্রটিতে সেট করেছি।

আশা করি এটি আপনার পক্ষে সহায়ক হবে।


2
plt.tight_layout যোগ করতে ভুলবেন না () যদি আপনার subplots শিরোনাম
Göta

12
আপনার যদি প্রচুর সাবপ্লট থাকে? এটি এভাবে করা আরও সহজ: fig, axes = plt.subplots(nrows=10, ncols=3)এবং axes = axes.flatten()। এখন আপনি তার সূচক দ্বারা প্রতিটি উপকাহিনী পাঠাতে পারেন: axes[0], axes[1], ...
Guillaume,

আমি যদি এই সাব-প্লটগুলির মধ্যে একটির একাধিক কল বা সারি ছড়িয়ে দিতে চাই? সাবপ্লটস কমান্ড দিয়ে এটি কি করণীয়?
Göta

1
@ বালপয়েন্টপেন আমি নিশ্চিত নই যে কাজ করে যদি nrows=1তখন axesসমান দৈর্ঘ্য সমেত ফেরত দেওয়া হয়ncols
বেন

1
@ বালপয়েন্টপেন ঠিক বুঝতে পেরেছেন যে আপনি এটি করে এটি ঠিক করতে পারেন:fig, axes = plt.subplots(nrows=1, ncols=3, squeeze=False)
বেন

14

প্রশ্নের পরিপূরক এবং উপরের উত্তরগুলির মধ্যে plt.subplots()এবং এর মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য রয়েছে plt.subplot(), 's'শেষে অনুপস্থিতটি লক্ষ্য করুন ।

কেউ plt.subplots()একবারে তাদের সমস্ত সাবপ্লট তৈরি করতে ব্যবহার করতে পারে এবং এটি সাবপ্লটগুলির অঙ্ক এবং অক্ষ (অক্ষের বহুবচন) টিউপল হিসাবে ফিরিয়ে দেয়। কোনও চিত্র ক্যানভাস হিসাবে বোঝা যায় যেখানে আপনি আপনার স্কেচ আঁকেন।

# create a subplot with 2 rows and 1 columns
fig, ax = plt.subplots(2,1)

অন্যদিকে plt.subplot()সাব-প্লটগুলি আলাদাভাবে যুক্ত করতে চাইলে আপনি ব্যবহার করতে পারেন । এটি কেবলমাত্র একটি সাবপ্লট এর অক্ষকে ফিরিয়ে দেয়।

fig = plt.figure() # create the canvas for plotting
ax1 = plt.subplot(2,1,1) 
# (2,1,1) indicates total number of rows, columns, and figure number respectively
ax2 = plt.subplot(2,1,2)

তবে plt.subplots()এটি অগ্রাধিকারযুক্ত কারণ এটি আপনার পুরো চিত্রটি সরাসরি কাস্টমাইজ করার সহজ বিকল্প দেয়

# for example, sharing x-axis, y-axis for all subplots can be specified at once
fig, ax = plt.subplots(2,2, sharex=True, sharey=True)

ভাগ করা অক্ষ যদিও এর সাথে plt.subplot(), প্রতিটি অক্ষের জন্য পৃথকভাবে একটি নির্দিষ্ট করতে হবে যা জটিল হয়ে উঠতে পারে।


1
আপনার কোড লাইনটি ax3 = plt.subplot(2,1,3) কাজ করবে না কারণ এটি 2 বাই 1, যার মাত্র 2 টি গ্রাফ রয়েছে।
মেঘ চো

1
ধন্যবাদ, এটি স্থির করুন। সর্বশেষ কোড ব্লকে আরও একটি পরিবর্তন প্রয়োজন।
হালকা_বি

2

উপরের উত্তরগুলি ছাড়াও, আপনি যে ধরণের জিনিস ব্যবহার করে type(plt.subplots())একটি টিপল ফেরত ব্যবহার করেন সে ধরণের জিনিস পরীক্ষা করতে পারেন , যা আপনি আনপ্যাক করতে পারবেন না type(plt.subplot())returnsmatplotlib.axes._subplots.AxesSubplot


4
স্ট্যাক ওভারফ্লোতে স্বাগতম! এটি আসলে একটি মন্তব্য, উত্তর নয়। আরও কিছুটা প্রতিনিধির সাথে আপনি মন্তব্য পোস্ট করতে সক্ষম হবেন । ধন্যবাদ!
মিরোস্লাভ গ্ল্যামুজিনা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.