আমি কীভাবে ম্যাটপ্লটলিবকে দ্বিতীয় (নতুন) প্লট তৈরি করতে বলি, তারপরে পুরানোটির উপরে প্লট করব?


147

আমি ডেটা প্লট করতে চাই, তারপরে একটি নতুন চিত্র এবং প্লট ডেটা 2 তৈরি করতে চাই এবং অবশেষে মূল প্লট এবং প্লট ডেটা 3 এ ফিরে আসি, কিন্ডা:

import numpy as np
import matplotlib as plt

x = arange(5)
y = np.exp(5)
plt.figure()
plt.plot(x, y)

z = np.sin(x)
plt.figure()
plt.plot(x, z)

w = np.cos(x)
plt.figure("""first figure""") # Here's the part I need
plt.plot(x, w)

এফওয়াইআই আমি ম্যাটপ্ল্লোলিবকে কীভাবে বলতে পারি যে আমি একটি চক্রান্ত নিয়ে এসেছি? অনুরূপ কিছু করে, কিন্তু বেশ না! এটি আমাকে সেই মূল প্লটটিতে প্রবেশ করতে দেয় না।

উত্তর:


152

আপনি যদি নিজেকে নিয়মিত এ জাতীয় কাজগুলি করতে দেখেন তবে ম্যাটপ্ল্লোলিবের কাছে অবজেক্ট-ওরিয়েন্টেড ইন্টারফেসটি অনুসন্ধান করা উপযুক্ত। তোমার ক্ষেত্রে:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(5)
y = np.exp(x)
fig1, ax1 = plt.subplots()
ax1.plot(x, y)
ax1.set_title("Axis 1 title")
ax1.set_xlabel("X-label for axis 1")

z = np.sin(x)
fig2, (ax2, ax3) = plt.subplots(nrows=2, ncols=1) # two axes on figure
ax2.plot(x, z)
ax3.plot(x, -z)

w = np.cos(x)
ax1.plot(x, w) # can continue plotting on the first axis

এটি সামান্য আরও ভার্বোজ তবে এটি স্পষ্ট করে রাখা আরও স্পষ্ট এবং সহজ, বিশেষত একাধিক সাবপ্লট সহ প্রতিটি চিত্র রয়েছে।


2
আমি অবজেক্ট অরিয়েন্টেড পদ্ধতির পছন্দটি পছন্দ করি কারণ যখন আমি অনেক পরিসংখ্যান থাকার প্রত্যাশা করি তখন সংখ্যাগুলির চেয়ে নাম ব্যবহার করে তাদের ট্র্যাক রাখা আরও সহজ হবে। ধন্যবাদ!
পিটার ডি

1
তবে এই পদ্ধতির সাহায্যে কেউ কীভাবে লেবেল এবং অক্ষ সীমা পরিবর্তন করতে পারে। আমি যদি ax1.ylabelএটি ব্যবহার করি তা বলে যে এটি পাওয়া যায় না। একই সাথে fig1.ylabel...
জর্জ ডেটেরিস

3
@ জর্জিডাটারিস সিনট্যাক্সটি কিছুটা আলাদা। এটা ax1.set_xlabel("your x label"), ax1.set_ylabel("your y label")এবং ax1.set_title("your title")
সাইমনব

1
কেন আপনি 111 ব্যবহার করেছেন?
যশ সোধা

2
@ যশোসধা - এটি সাবপ্লটগুলির সংখ্যা (সারি, করল, সূচক) এর একটি ম্যাটলব-স্টাইলের স্পেসিফিকেশন। তবে এটি এখন ব্যবহার করা অনেক সহজ plt.subplots(nrows, ncols)। উদাহরণ আপডেট করেছেন।
সাইমনব

120

আপনি যখন কল করবেন তখন figureসহজভাবে প্লটটি নাম্বার করুন।

x = arange(5)
y = np.exp(5)
plt.figure(0)
plt.plot(x, y)

z = np.sin(x)
plt.figure(1)
plt.plot(x, z)

w = np.cos(x)
plt.figure(0) # Here's the part I need
plt.plot(x, w)

সম্পাদনা: দ্রষ্টব্য যে আপনি যে প্লটগুলি চান তা সংখ্যায়িত করতে পারেন (এখানে থেকে শুরু করে 0) তবে আপনি নতুন তৈরি করার সময় যদি কোনও সংখ্যার সাথে চিত্র সরবরাহ না করেন তবে স্বয়ংক্রিয় নম্বরটি শুরু হবে 1("মতলব স্টাইল" অনুসারে) ডক্সে)


3
এটি ম্যাটপ্ল্লোলিবের ইন্টারেক্টিভ মোডে কাজ করে বলে মনে হচ্ছে, যখন চিত্র () ... অ্যাড_সবপ্লট () পদ্ধতিটি করে না। ধন্যবাদ!
chbrown

@ শেবামা দয়া করে কোডটি না বুঝে তা পরিবর্তন করবেন না। এই উত্তরটি বিশেষত এমন একটি নম্বর পাস করার বিষয়ে ছিল figureযা আপনি সরিয়ে দিয়েছেন। আপনি যে অন্যান্য জিনিস পরিবর্তন করেছেন সেগুলি মূল পোস্ট থেকে অনুলিপি করা হয়েছিল এবং আমার উত্তরে ভুল ছিল না।
agf

@agf হাই, আমি মুছে 1ভিতরে plt.figure(1)কারণ আমি ভেবেছিলাম সংখ্যা স্বয়ং বৃদ্ধি এবং এর ফলে প্রয়োজনীয় ছিল না। দুঃখিত।
SebMa

18

তবে সংখ্যাটি শুরু হয় 1, তাই:

x = arange(5)
y = np.exp(5)
plt.figure(1)
plt.plot(x, y)

z = np.sin(x)
plt.figure(2)
plt.plot(x, z)

w = np.cos(x)
plt.figure(1) # Here's the part I need, but numbering starts at 1!
plt.plot(x, w)

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

(এখনও মন্তব্যের অধিকার নেই, নতুন উত্তরের জন্য দুঃখিত!)


10
0কাজ করে, স্বয়ংক্রিয় সংখ্যায়ন ঠিক 1তখনই শুরু হয় , যদি আপনি এটিকে কোনও সংখ্যা না দেন।
agf

0

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

def plotFigure(data_plot,file_name,order):
    fig = plt.figure(order, figsize=(9, 6))
    ax = fig.add_subplot(111)
    bp = ax.boxplot(data_plot)
    fig.savefig(file_name, bbox_inches='tight')
    plt.close()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.