কীভাবে ম্যাটপ্ল্লোব ব্যবহার করে একটি পৃষ্ঠায় একাধিক প্লট তৈরি করবেন?


92

আমার কাছে লিখিত কোড রয়েছে যা একবারে 16 টি চিত্র খোলে। বর্তমানে এগুলি সমস্ত পৃথক গ্রাফ হিসাবে খোলে। আমি তাদের সমস্ত একই পৃষ্ঠায় খুলতে চাই। একই গ্রাফ নয়। আমি একটি একক পৃষ্ঠা / উইন্ডোতে 16 পৃথক গ্রাফ চাই। এছাড়াও কিছু কারণে নাম্বিনগুলি এবং ডিফল্টরেলিমিটগুলির ফর্ম্যাটটি পূর্বের চিত্রটি রাখে না I আমার কি সাবপ্লট কমান্ডটি ব্যবহার করা দরকার? আমি বুঝতে পারি না কেন আমাকে করতে হবে তবে আমি কী করব তা অনুধাবন করতে পারছি না?

import csv
import scipy.stats
import numpy
import matplotlib.pyplot as plt

for i in range(16):
    plt.figure(i)
    filename= easygui.fileopenbox(msg='Pdf distance 90m contour', title='select file', filetypes=['*.csv'], default='X:\\herring_schools\\')
    alt_file=open(filename)    
    a=[]
    for row in csv.DictReader(alt_file):
        a.append(row['Dist_90m(nmi)'])
    y= numpy.array(a, float)    
    relpdf=scipy.stats.relfreq(y, numbins=7, defaultreallimits=(-10,60))
    bins = numpy.arange(-10,60,10)
    print numpy.sum(relpdf[0])
    print bins
    patches=plt.bar(bins,relpdf[0], width=10, facecolor='black')
    titlename= easygui.enterbox(msg='write graph title', title='', default='', strip=True, image=None, root=None)
    plt.title(titlename)
    plt.ylabel('Probability Density Function')
    plt.xlabel('Distance from 90m Contour Line(nm)')
    plt.ylim([0,1])

plt.show()

উত্তর:


17

আপনার মূল প্রশ্নের উত্তর দিতে, আপনি সাবপ্লট কমান্ডটি ব্যবহার করতে চান । আমি মনে করি পরিবর্তনের কাজ plt.figure(i)করা plt.subplot(4,4,i+1)উচিত।


202

লাস 3 রিজকের উত্তর , যা কোনওভাবে ওপি কর্তৃক গৃহীত উত্তর, এটি ভুল - কোডটি চলমান না, এটি বৈধ ম্যাটপ্ল্লোব সিনট্যাক্সও নয়; এই উত্তরটি কোনও চলমান কোড সরবরাহ করে না এবং কোনও তথ্য বা পরামর্শের অভাব নেই যে ওপিতে সমস্যা সমাধানের জন্য ওপি তাদের নিজস্ব কোড লেখার ক্ষেত্রে দরকারী বলে মনে করতে পারে।

এটি গৃহীত উত্তর এবং ইতিমধ্যে বেশ কয়েকটি আপ-ভোট পেয়েছে বলে মনে করা হচ্ছে, আমি মনে করি সামান্য ডিকনস্ট্রাকশন ঠিক আছে।

প্রথমত, সাবপ্লটকে কল করা আপনাকে একাধিক প্লট দেয় না ; সাবপ্লটকে একক প্লট তৈরি করার পাশাপাশি একাধিক প্লট তৈরি করতে বলা হয়। এছাড়াও, "plt.figure (i)" পরিবর্তন করা সঠিক নয়।

plt.figure () (যার মধ্যে plt বা PLT সাধারণত ম্যাটপ্ল্লোলিবের পাইপ্লট লাইব্রেরি আমদানি করা হয় এবং বৈশ্বিক চলক, প্লট বা কখনও কখনও পিএলটি হিসাবে পুনরায় প্রত্যাবর্তন করে:

from matplotlib import pyplot as PLT

fig = PLT.figure()

ঠিক উপরের লাইনটি একটি ম্যাটপ্ল্লোলিব চিত্র চিত্র তৈরি করে; এরপরে এই বস্তুর অ্যাড_সপ্লট পদ্ধতিটি প্রতিটি প্লট করা উইন্ডোর জন্য ডাকা হয় (অনানুষ্ঠানিকভাবে একটি একক সাবট্লট সমন্বিত একটি এক্স & ওয়াইস অক্ষের কথা ভাবেন)। আপনি যেমন তৈরি করেন (কেবলমাত্র এক বা এক পৃষ্ঠায় বেশ কয়েকটির জন্য), এমনটিই

fig.add_subplot(111)

এই বাক্য গঠন সমান

fig.add_subplot(1,1,1)

আপনার বোঝার জন্য একটি চয়ন করুন।

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

from matplotlib import pyplot as PLT

fig = PLT.figure()

ax1 = fig.add_subplot(211)
ax1.plot([(1, 2), (3, 4)], [(4, 3), (2, 3)])

ax2 = fig.add_subplot(212)
ax2.plot([(7, 2), (5, 3)], [(1, 6), (9, 5)])

PLT.show()

এই দুটি আর্গুমেন্টের প্রতিটি হ'ল পৃষ্ঠায় যথাযথভাবে প্লট উইন্ডো স্থাপন করার জন্য একটি সম্পূর্ণ স্পেসিফিকেশন।

211 (যা আবার 3-টিউপল আকারেও লেখা যেতে পারে কারণ) (2,1,1) অর্থ দুটি সারি এবংপ্লট উইন্ডোর একটি কলাম ; তৃতীয় অঙ্কটি অন্য সাবপ্ল্লট উইন্ডোগুলির সাথে সম্পর্কিত নির্দিষ্ট সাবপ্ল্লট উইন্ডোর ক্রম নির্দিষ্ট করে- এই ক্ষেত্রে, এটিই প্রথম প্লট (যা এটি সারি 1 এ রাখে) অতএব প্লট নম্বর 1, সারি 1 করল 1।

যুক্তিটি যুক্ত_সুবপ্লোটের দ্বিতীয় কলটিতে পৌঁছেছে , কেবল প্রথমের চেয়ে পিছনের অঙ্কের সাথে পৃথক হয়েছে (1 এর পরিবর্তে একটি 2, কারণ এই প্লটটি দ্বিতীয় প্লট (সারি 2, কর্নাল 1)।

আরও প্লটের একটি উদাহরণ: পরিবর্তে যদি আপনি কোনও পৃষ্ঠায় চারটি প্লট চেয়েছিলেন , 2x2 ম্যাট্রিক্স কনফিগারেশনে, আপনি এই চারটি আর্গুমেন্ট (221), (222), (223) পেরিয়ে চারবার add_subplot পদ্ধতি কল করবেন would 224), যথাক্রমে 10, 2, 8, এবং 4 টা বাজে এই পৃষ্ঠায় চারটি প্লট তৈরি করতে এবং এই ক্রমে।

লক্ষ্য করুন যে চারটি আর্গুমেন্টের প্রত্যেকটিতে দুটি লেডিং 2 এর রয়েছে - যা 2 x 2 কনফিগারেশনকে এনকোড করে, অর্থাৎ দুটি সারি এবং দুটি কলাম।

চারটি আর্গুমেন্টের প্রত্যেকটিতে তৃতীয় (ডান-সর্বাধিক) অঙ্কটি 2 x 2 ম্যাট্রিক্সে সেই নির্দিষ্ট প্লট উইন্ডোটির ক্রমকে এনকোড করে - অর্থাৎ সারি 1 কল 1 (1), সারি 1 কল 2 (2), সারি 2 কল 1 (3), সারি 2 কল 2 (4)।


4
add_subplot ছোট সংখ্যক সাবপ্লটগুলির জন্য একটি একক পূর্ণসংখ্যার আর্গুমেন্ট নিতে পারে, তবে একবার আপনার 9 টিরও বেশি সাবপ্লট দরকার হলে আপনাকে অন্যান্য উত্তরগুলির সংস্করণটি ব্যবহার করা উচিত যা 3 টি পৃথক পূর্ণসংখ্যার যুক্তি গ্রহণ করে।
ব্যবহারকারী 1244215

4
আমি কি এর fig.add_axes(rect)পরিবর্তে ব্যবহার করতে পারি add_subplot?
অ্যালকোট

16
PLT? এর আগে কখনও ব্যবহৃত হচ্ছে তা কখনই দেখেনি
দর্শনা চৌধুরী চৌধুরী 10

4
আপনার এখানে প্রথম অনুচ্ছেদটি স্পষ্টত অসত্য, কারণ আপনি চালিয়ে যাচাই করতে পারেন for i in range(16): plt.subplot(4, 4, i+1)এবং কোনও বাক্য গঠন ত্রুটি পর্যবেক্ষণ করতে পারেন । উত্তরটি গ্রহণ করা হয়েছে কারণ এটি সম্ভবত ওপি যা চেয়েছিল তা করেছিল।
chthonicdaemon

4
এটি একটি দুর্দান্ত সমাধান। তবে আমি যদি লুপটিতে একটি ভেরিয়েবল ব্যবহার করতে চাই তবে কীভাবে করব?
পেঙ্গজু ঝাও

83

যেহেতু এই প্রশ্নটি 4 বছর আগে নতুন জিনিস বাস্তবায়িত হয়েছে এবং তাদের মধ্যে একটি নতুন ফাংশন রয়েছে plt.subplotsযা খুব সুবিধাজনক :

fig, axes = plot.subplots(nrows=2, ncols=3, sharex=True, sharey=True)

অ্যাক্সেস সাবপ্লট অবজেক্টগুলির axesমধ্যে একটি যেখানে numpy.ndarrayকেবল অ্যারে সূচকগুলি ব্যবহার করে বিভিন্ন সাবপ্লটগুলিতে যাওয়া খুব সুবিধাজনক [i,j]


আমার কেবল ম্যাটপ্লটলিব এপিআই ব্যবহার করার প্রয়োজন (ডিসপ্লে উপলব্ধ না হওয়ার কারণে এবং অন্যান্য মজার জিনিসগুলির কারণে) এটি কি কাজ করে?
ইউডক্সোজ

4
@ ইউডোকোস হ্যাঁ, এটি হওয়া উচিত, একটি পৃষ্ঠায় একাধিক গ্রাফিক্স মুদ্রণের জন্য আপনি এই জাতীয় সাবপ্লটগুলি তৈরি করতে পারেন, উদাহরণস্বরূপ, কী করা হচ্ছে তা দেখানোর প্রয়োজন ছাড়াই
সৌলো জিপি কাস্ত্রো

12

এটিও কাজ করে:

for i in range(19):
    plt.subplot(5,4,i+1) 

এটি এক পৃষ্ঠায় 19 টি মোট গ্রাফ প্লট করে। ফর্ম্যাটটি 5 নিচে এবং 4 টি জুড়ে রয়েছে ..


4

@ ডগ এবং এফএস এর উত্তরগুলি খুব ভাল সমাধান। আমি পান্ডাস.ডাটাফ্রেমে পুনরাবৃত্তির সমাধানটি ভাগ করতে চাই।

import pandas as pd
df=pd.DataFrame([[1, 2], [3, 4], [4, 3], [2, 3]])
fig = plt.figure(figsize=(14,8))
for i in df.columns:
    ax=plt.subplot(2,1,i+1) 
    df[[i]].plot(ax=ax)
    print(i)
plt.show()

যদি আপনি ডেটা ফ্রেমের কলামগুলির নামকরণ করে থাকে তবে আপনাকে এমন কিছু ব্যবহার করতে হবেfor i,col in enumerate(df.columns):
ড্রেভিকো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.