পাইথন, ম্যাটপ্লটলিব, সাবপ্লট: অক্ষের পরিসরটি কীভাবে সেট করবেন?


266

আমি কীভাবে দ্বিতীয় সাবপ্লোটের y অক্ষের পরিসীমাটিকে উদাহরণস্বরূপ [0,1000] এ সেট করতে পারি? আমার ডেটা এর এফএফটি প্লট (একটি পাঠ্য ফাইলে একটি কলাম) এর ফলাফল (ইনফ।?) স্পাইকের ফলে যাতে প্রকৃত ডেটা দৃশ্যমান না হয়।

pylab.ylim([0,1000])

দুর্ভাগ্যক্রমে এর কোনও প্রভাব নেই। এটি পুরো লিপি:

# based on http://www.swharden.com/blog/2009-01-21-signal-filtering-with-python/
import numpy, scipy, pylab, random

xs = []
rawsignal = []
with open("test.dat", 'r') as f:
      for line in f:
            if line[0] != '#' and len(line) > 0:
                xs.append( int( line.split()[0] ) )
                rawsignal.append( int( line.split()[1] ) )

h, w = 3, 1
pylab.figure(figsize=(12,9))
pylab.subplots_adjust(hspace=.7)

pylab.subplot(h,w,1)
pylab.title("Signal")
pylab.plot(xs,rawsignal)

pylab.subplot(h,w,2)
pylab.title("FFT")
fft = scipy.fft(rawsignal)
#~ pylab.axis([None,None,0,1000])
pylab.ylim([0,1000])
pylab.plot(abs(fft))

pylab.savefig("SIG.png",dpi=200)
pylab.show()

অন্যান্য উন্নতিও প্রশংসা করা হয়!


উত্তর:


284

যেমনটি পাওয়া গেছে http://www.mofeel.net/582-comp-soft-sys-matlab/54166.aspx এ

 pylab.ylim([0,1000])

দ্রষ্টব্য: কমান্ডটি প্লটের পরে কার্যকর করতে হবে!


3
আমি যখনই এটি করি, এটি চিত্রগুলি উল্টোদিকে উল্টায়।
ely

1
যদি আমি হেক্সবিন দিয়ে এটি ব্যবহার করি, প্লটের পরে ইলিম ব্যবহার করে () উভয় প্লটে সাদা ব্যাকগ্রাউন্ড প্রকাশ করে
লিনাক্সয়েড

3
আপনি যদি প্লট ব্যবহার না করে তবে সেভফিগ ??
বেন

8
ফোন করুন plot(), তারপরে ylim()এবং তারপরে savefig()
Therealrootuser

112

অক্ষের জিনিসগুলি ব্যবহার করা এটির জন্য দুর্দান্ত উপায়। আপনি একাধিক চিত্র এবং উপ-প্লটের সাথে ইন্টারেক্ট করতে চাইলে এটি সহায়তা করে। অক্ষের অবজেক্টগুলিকে সরাসরি যুক্ত এবং পরিচালনা করতে:

import matplotlib.pyplot as plt
fig = plt.figure(figsize=(12,9))

signal_axes = fig.add_subplot(211)
signal_axes.plot(xs,rawsignal)

fft_axes = fig.add_subplot(212)
fft_axes.set_title("FFT")
fft_axes.set_autoscaley_on(False)
fft_axes.set_ylim([0,1000])
fft = scipy.fft(rawsignal)
fft_axes.plot(abs(fft))

plt.show()

2
রবের পরামর্শ অনুসারে, ম্যাটপ্লটলিবের ওও ইন্টারফেসকে রাষ্ট্র-ভিত্তিক পাইলব ইন্টারফেসের চেয়ে বেশি পছন্দ করা হয়। "যদিও অনেকগুলি উদাহরণ পাইব্ল ব্যবহার করে তবে এটি আর সুপারিশ করা হয় না। matplotlib.org/faq/…
বেনিট ব্রাউন

26

কখনও কখনও আপনি ডেটা প্লট করার আগে আপনি অক্ষ সীমাটি সেট করতে চান । সেক্ষেত্রে আপনি Axesবা AxesSubplotবস্তুর "অটোক্যাসিং" বৈশিষ্ট্যটি সেট করতে পারেন । সুদ কার্যাবলী হয় set_autoscale_on, set_autoscalex_onএবং set_autoscaley_on

আপনার ক্ষেত্রে, আপনি y অক্ষের সীমাটি হিমায়িত করতে চান, তবে এক্স অক্ষটি আপনার ডেটা সামঞ্জস্য করতে প্রসারিত করার অনুমতি দিন। অতএব, আপনি autoscaley_onসম্পত্তিটি পরিবর্তন করতে চান False। আপনার কোড থেকে এফএফটি সাবপ্লট স্নিপেটের একটি পরিবর্তিত সংস্করণ এখানে রয়েছে:

fft_axes = pylab.subplot(h,w,2)
pylab.title("FFT")
fft = scipy.fft(rawsignal)
pylab.ylim([0,1000])
fft_axes.set_autoscaley_on(False)
pylab.plot(abs(fft))

0

আপনি যদি সঠিক অক্ষটি চান তবে তা জানতে পারেন

pylab.ylim([0,1000])

পূর্বে উত্তর হিসাবে কাজ করে। তবে আপনি যদি আপনার সঠিক ডেটা ফিট করার জন্য আরও নমনীয় অক্ষটি চান তবে যেমনটি আমি এই প্রশ্নটি পেয়েছি, তখন অক্ষের সীমাটি আপনার ডেটাসেটের দৈর্ঘ্য হিসাবে সেট করুন। যদি আপনার ডেটাসেট fftপ্রশ্নের মতোই থাকে তবে আপনার প্লট কমান্ডের পরে এটি যুক্ত করুন:

length = (len(fft)) pylab.ylim([0,length])


0

আপনার যদি একাধিক সাবপ্লট থাকে, যেমন

fig, ax = plt.subplots(4, 2)

আপনি তাদের সবার জন্য একই y সীমা ব্যবহার করতে পারেন। এটি প্রথম চক্রান্ত থেকে y কুঠার সীমা পেয়েছে।

plt.setp(ax, ylim=ax[0,0].get_ylim())
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.