প্লট, অক্ষ বা ম্যাটপ্ল্লোলিবতে চিত্র ব্যবহার করে প্লট আঁকার মধ্যে পার্থক্য কী?


101

আমি ম্যাটপ্লটলিব, টিবিএইচ তে প্লট আঁকলে ব্যাকএন্ডে যা চলছে তা আমি একধরণের বিভ্রান্ত হয়ে পড়েছি, প্লট, অক্ষ এবং চিত্রের শ্রেণিবিন্যাসের সাথে আমি পরিষ্কার নই। আমি নথিটি পড়েছি এবং এটি সহায়ক ছিল তবে আমি এখনও বিভ্রান্ত ...

নীচের কোডটি একই প্লটটি তিনটি বিভিন্ন উপায়ে আঁকে -

#creating the arrays for testing
x = np.arange(1, 100)
y = np.sqrt(x)
#1st way
plt.plot(x, y)
#2nd way
ax = plt.subplot()
ax.plot(x, y)
#3rd way
figure = plt.figure()
new_plot = figure.add_subplot(111)
new_plot.plot(x, y)

এখন আমার প্রশ্ন হ'ল -

  1. তিনটির মধ্যে পার্থক্য কী, আমি বলতে চাইছি যখন 3 টি পদ্ধতির কোনওটি বলা হয় তখন হুডের নীচে কী চলছে?

  2. কোনটি কখন ব্যবহার করা উচিত এবং কখন সেগুলি ব্যবহার করার পক্ষে কী কী উপকারিতা এবং বিধিগুলি রয়েছে?


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

আপনি এই সঠিক ডকুমেন্টেশন matplotlib.org/users/artists.html উল্লেখ করেছেন কিনা তা নিশ্চিত নই । চিত্রটি এমনকি প্রকাশিত কেন এটি আপনার প্রশ্নের উত্তর দেয়। ব্যক্তিগতভাবে এটি ম্যাটপ্ল্লিটিবের সর্বাধিক ব্যাখ্যা আমি খুঁজে পেয়েছি। চিত্রের অবজেক্ট আপনাকে নিজের শিল্পীদের সরাসরি অক্ষ ছাড়াই যুক্ত করতে দেয় যদিও এটি খুব কমই ব্যবহৃত হয় যদি না আপনি চিত্রের "প্যাচ" টিচ করতে চান তবে ইত্যাদি। নোট করুন যে চিত্রটি মূল পাত্রে এবং অক্ষ এবং শিল্পীদের হোস্ট করে।
সন্দীপ

উত্তর:


55

পদ্ধতি 1

plt.plot(x, y)

এটি আপনাকে (x, y) স্থানাঙ্ক সহ মাত্র একটি চিত্র প্লট করতে দেয়। আপনি যদি কেবল একটি গ্রাফিক পেতে চান তবে আপনি এই উপায়টি ব্যবহার করতে পারেন।

পদ্ধতি 2

ax = plt.subplot()
ax.plot(x, y)

এটি আপনাকে একই উইন্ডোতে এক বা একাধিক চিত্র (গুলি) প্লট করতে দেয়। আপনি এটি লেখার সময়, আপনি কেবল একটি চিত্র তৈরি করবেন, তবে আপনি এটির মতো কিছু তৈরি করতে পারেন:

fig1, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2)

আপনি 4 টি চিত্রের প্লট করবেন যার নাম অক্ষ 1, ax2, ax3 এবং ax4 প্রতিটি কিন্তু একই উইন্ডোতে। এই উইন্ডোটি আমার উদাহরণ সহ 4 ভাগে বিভক্ত হবে।

পদ্ধতি 3

fig = plt.figure()
new_plot = fig.add_subplot(111)
new_plot.plot(x, y)

আমি এটি ব্যবহার করি নি, তবে আপনি নথিপত্র পেতে পারেন।

উদাহরণ:

import numpy as np
import matplotlib.pyplot as plt

# Method 1 #

x = np.random.rand(10)
y = np.random.rand(10)

figure1 = plt.plot(x,y)

# Method 2 #

x1 = np.random.rand(10)
x2 = np.random.rand(10)
x3 = np.random.rand(10)
x4 = np.random.rand(10)
y1 = np.random.rand(10)
y2 = np.random.rand(10)
y3 = np.random.rand(10)
y4 = np.random.rand(10)

figure2, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2)
ax1.plot(x1,y1)
ax2.plot(x2,y2)
ax3.plot(x3,y3)
ax4.plot(x4,y4)

plt.show()

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

অন্যান্য উদাহরণ:

এখানে চিত্র বর্ণনা লিখুন


@ হ্যাশকোড 555 প্রতিটি চিত্র স্বতন্ত্র। আমি আপনাকে একটি উদাহরণ দেখাব
এসেক্স

4
@ হ্যাশকোড ৫৫৫ আমি একটি উদাহরণ দিয়ে সম্পাদনা করব (অ্যাস্ট্রোফিজিক্সে আমার গবেষণাগুলির কেবল চিত্র, স্ক্রিপ্টটি অনেক দীর্ঘ (১৩০০ লাইন));) প্রতিটি চিত্র স্বতন্ত্র;)
এসেক্স

4
আমি জানি এটি নিটপিকি, তবে আমি এটি করছি কারণ matplotlibভাষা আমার কাছে বিভ্রান্তিকর ছিল, এবং "ম্যাটপ্ল্লোলিবের অক্ষগুলি বনাম চিত্র" অনুসন্ধান করার সময় এই প্রশ্নটি প্রকাশিত হয়। অন্যান্য নুবসের ক্ষেত্রে, এই প্রশ্নের উত্তরটি সাহায্য করেছিল। আমি মনে করি এখানে শব্দবন্ধটি আরও স্পষ্ট হতে পারে যা কোনও একককে বস্তুগুলি subplots()ফিরিয়ে দেবে । Axesfigure
হেন্ডি

34

বস্তুর নাম

ম্যাটপ্লটলিব দৃ strongly়ভাবে অবজেক্ট ওরিয়েন্টেড এবং এর প্রধান বিষয়গুলি হ'ল চিত্র এবং অক্ষগুলি (আমি নামটি axesকিছুটা বিভ্রান্তিকর মনে করি তবে সম্ভবত এটি কেবল আমার)।

আপনি চিত্রটিকে ক্যানভাস হিসাবে ভাবতে পারেন , যার মধ্যে আপনি সাধারণত মাত্রা এবং সম্ভবত উদাহরণস্বরূপ, পটভূমির রঙ ইত্যাদি উল্লেখ করেন You আপনি ক্যানভাস, চিত্রটি মূলত দুটি উপায়ে ব্যবহার করেন, এটিতে অন্যান্য জিনিস রেখে (বেশিরভাগ অক্ষ , তবে এছাড়াও পাঠ্য লেবেল ইত্যাদি) এবং এর সামগ্রীগুলি এতে সংরক্ষণ করে savefig

আপনি একটি মনে করতে পারেন অক্ষ সুইস আর্মি নাইফ কেমন, একটি সুবিধাজনক বস্তু অফার একটি টুল (যেমন হিসাবে .plot, .scatter, .histইত্যাদি) সব কিছুর জন্য, বেশিরভাগ। আপনি বিভিন্ন, বিভিন্ন পদ্ধতি ব্যবহার করে একটি চিত্রের ভিতরে একটি , দুটি, ... অনেকগুলি অক্ষ রাখতে পারেন

pltইন্টারফেস

PLT পদ্ধতিগত ইন্টারফেস মূলত অনুকরণমূলক ম্যাটল্যাব ™ ইন্টারফেসে উন্নত ছিল কিন্তু সত্যিই অবজেক্ট ওরিয়েন্টেড ইন্টারফেস থেকে ভিন্ন নয়, এমনকি আপনি যদি প্রধান বস্তু একটি সরাসরি রেফারেন্স না (অর্থাত, একটি চিত্রে এবং একটি অক্ষ ) এই বস্তু স্বয়ংক্রিয়ভাবে ইনস্ট্যান্ট হয় এবং প্রতিটি প্লট পদ্ধতি মূলত অন্তর্নিহিত মৌলিক অবজেক্টগুলির একটি পদ্ধতির কলটিতে অনুবাদ করা হয়: যেমন, plt.plot()a hidden_axes.plotএবং a plt.savefigহয় a hidden_figure.savefig

প্রতিটি মুহুর্তে আপনি এই লুকানো বস্তুগুলি ব্যবহার করে plt.gcfএবং একটি হ্যান্ডেল রাখতে পারেন plt.gcaএবং প্লট নেমস্পেসের কোনও অবজেক্টের কোনও পদ্ধতিতে কোনও পোর্ট করা না থাকলে এটি কখনও কখনও প্রয়োজনীয় হয় ।

আমি যুক্ত করতে চাই যে প্লট নেমস্পেসে বিভিন্ন উপায়ে, চিত্র এবং অক্ষগুলিতে ইনস্ট্যান্ট করার জন্য বেশ কয়েকটি সুবিধাজনক পদ্ধতি রয়েছে ।

আপনার উদাহরণ

1 ম উপায়

plt.plot(x, y)

এখানে আপনি কেবল প্লট ইন্টারফেস ব্যবহার করেন , আপনি প্রতিটি চিত্রের মধ্যে কেবল একটি অক্ষ ব্যবহার করতে পারেন , তবে আপনি যখন আপনার ডেটা অনুসন্ধান করতে যাচ্ছেন তখন এটি আপনি চান, একটি দ্রুত রেসিপি যা কাজটি সম্পন্ন করে ...

২ য় উপায়

ax = plt.subplot()
ax.plot(x, y)

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

3 য় উপায়

figure = plt.figure()
new_plot = figure.add_subplot(111)
new_plot.plot(x, y)

এখানে আপনি প্লট নেমস্পেসে সুবিধাবদ্ধ পদ্ধতি ব্যবহার করে কোনও চিত্র ফিরিয়ে আনতে শুরু করেন এবং পরে আপনি কেবল অবজেক্ট ওরিয়েন্টেড ইন্টারফেস ব্যবহার করেন।

প্লট সুবিধার পদ্ধতিটি ( matplotlib.figure.Figure) কে বাইপাস করা সম্ভব তবে আপনাকে আরও ভাল ইন্টারেক্টিভ অভিজ্ঞতার জন্য চিত্রটি টুইঙ্ক করতে হবে (সর্বোপরি, এটি একটি সুবিধার পদ্ধতি)।

ব্যক্তিগত সুপারিশ

আমি খালি সুপারিশ plt.plot, plt.scatterএকটি ইন্টারেক্টিভ অধিবেশন প্রেক্ষাপটে, সম্ভবত ব্যবহার IPython তার সঙ্গে %matplotlibজাদু কমান্ড, এবং এছাড়াও একটি অনুসন্ধানমূলক Jupyter নোটবুক প্রেক্ষাপটে।

অন্যদিকে অবজেক্ট ওরিয়েন্টেড অ্যাপ্রোচ, প্লাস কয়েকটি plt সুবিধামত পদ্ধতি, যাবার উপায়

  • আপনার যদি একবারে সবার জন্য একবারে সমাধান করার জন্য স্থায়ী সমস্যাটি তৈরি হয়ে থাকে যাতে সূক্ষ্ম সুরযুক্ত সাবপ্লটগুলির কাস্টমাইজড বিন্যাস হয়,
  • আপনি যদি লিখে থাকেন এমন কোনও প্রোগ্রামের UI- এ ম্যাটপ্লটলিব এম্বেড করতে চান।

এই চরমের মাঝে একটি বৃহত্তর ধূসর অঞ্চল রয়েছে এবং আপনি যদি আমাকে জিজ্ঞাসা করেন তবে আমি কেবল "এটি নির্ভর করে" বলব ...


4
"আমি নামের অক্ষটি কিছুটা বিভ্রান্তিকর দেখতে পেয়েছি তবে সম্ভবত এটি কেবল আমি" - না, এটি আমিও। যদিও পরিবর্তন করা যায় না।
ল্যারিক্স ডিসিডুয়া

4
আরেকটি জিনিস আমি কেবল বুঝতে পারি না যে লোকেরা fig, ax = plt.subplot()যখন সাবপ্লটগুলি চান না তখন কেন বুদ্ধিমান ব্যবহার করে । এই জাতীয় ক্ষেত্রে আমি "পদ্ধতিগত" স্টাইলটি আরও সহজ পেয়েছি। "তবে সম্ভবত এটি কেবল আমি ..." :-)
ল্যারিক্স ডেসিডুয়া

@ ল্যারিক্সডিসিদুয়া আমি তত্ক্ষণাত্ দুটি ভাল কারণ দেখতে পাচ্ছি - "স্পষ্ট বর্ণিতর চেয়ে সুস্পষ্ট" ② আপনি চিত্রের বা অক্ষগুলির পদ্ধতি ব্যবহার করতে চান যা পদ্ধতিগত
এপিআইতে

হ্যাঁ, আমি সম্পূর্ণ সাবস্ক্রাইব 1)। পুনরায় 2): বেশিরভাগ সময় প্রক্রিয়াগত এপিআই যথেষ্ট। দিনের শেষে আমি মনে করি এটি ব্যক্তিগত পছন্দগুলিতে
উত্সাহিত হয়
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.