দুটি সাব-প্লট তৈরি হওয়ার পরে কীভাবে এক্স অক্ষটি ভাগ করবেন?


97

আমি দুটি সাবপ্লট অক্ষকে ভাগ করে নেওয়ার চেষ্টা করছি তবে চিত্রটি তৈরি হওয়ার পরে আমার এক্স অক্ষটি ভাগ করে নেওয়া দরকার। সুতরাং, উদাহরণস্বরূপ, আমি এই চিত্রটি তৈরি করি:

import numpy as np
import matplotlib.pyplot as plt

t= np.arange(1000)/100.
x = np.sin(2*np.pi*10*t)
y = np.cos(2*np.pi*10*t)

fig=plt.figure()
ax1 = plt.subplot(211)
plt.plot(t,x)
ax2 = plt.subplot(212)
plt.plot(t,y)

# some code to share both x axis

plt.show()

মন্তব্যের পরিবর্তে আমি উভয় এক্স অক্ষটি ভাগ করে নেওয়ার জন্য কিছু কোড প্রবেশ করিয়ে দেব। আমি কীভাবে এটি করতে পারি তার কোনও সন্ধান পাইনি। কিছু বৈশিষ্ট্য রয়েছে _shared_x_axesএবং _shared_x_axesযখন আমি অক্ষটি পরীক্ষা করতে fig.get_axes()পারি ( ) তবে সেগুলি কীভাবে সংযুক্ত করতে হয় তা আমি জানি না।

উত্তর:


137

অক্ষগুলি ভাগ করার স্বাভাবিক উপায় হ'ল সৃষ্টিতে ভাগ করা বৈশিষ্ট্য তৈরি করা। হয়

fig=plt.figure()
ax1 = plt.subplot(211)
ax2 = plt.subplot(212, sharex = ax1)

বা

fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)

অক্ষ তৈরি হওয়ার পরে ভাগ করে নেওয়া তাই প্রয়োজনীয় হওয়া উচিত নয়।

তবে যদি কোনও কারণে, আপনার তৈরি হওয়ার পরে আপনার অক্ষগুলি ভাগ করে নেওয়া দরকার (আসলে, এখানে একটি আলাদা লাইব্রেরি ব্যবহার করা হয় যা কিছু সাবপ্লট তৈরি করে, যেমন এখানে বা ইনসেট অক্ষগুলি ভাগ করে নেওয়া কোনও কারণ হতে পারে), এরপরেও একটি সমাধান হতে পারে:

ব্যবহার

ax1.get_shared_x_axes().join(ax1, ax2)

দুটি অক্ষের মধ্যে একটি লিঙ্ক তৈরি করে ax1এবং ax2। সৃষ্টির সময়ে ভাগ করার বিপরীতে, আপনাকে কোনও একটি অক্ষের জন্য ম্যানুয়ালি xticklabels সেট করতে হবে (যদি এমনটি হয় তবে)।

একটি সম্পূর্ণ উদাহরণ:

import numpy as np
import matplotlib.pyplot as plt

t= np.arange(1000)/100.
x = np.sin(2*np.pi*10*t)
y = np.cos(2*np.pi*10*t)

fig=plt.figure()
ax1 = plt.subplot(211)
ax2 = plt.subplot(212)

ax1.plot(t,x)
ax2.plot(t,y)

ax1.get_shared_x_axes().join(ax1, ax2)
ax1.set_xticklabels([])
# ax2.autoscale() ## call autoscale if needed

plt.show()

আশ্চর্যের কারণ, যাইহোক, আমি আচার দিয়ে কিছু চিত্র সংরক্ষণ করেছি এবং আমি তাদের অন্য প্রোগ্রামের সাথে পুনরায় লোড করব যা শেয়ারেক্স সম্পত্তি হারাবে।
ymmx

4
এটি নির্বাচিত সাবপ্লটগুলি সংযুক্ত করতে দরকারী। উদাহরণস্বরূপ, ৪ টি সাবপ্লট যুক্ত একটি চিত্র: দুটি সময় সিরিজ এবং দুটি হিস্টোগ্রাম। এটি আপনাকে সময় ধারাবাহিকভাবে নির্বাচন করতে দেয়।
হামিদ

4
গ্রুপের অবজেক্টের জন্য এপিআই ডক্স: matplotlib.org/2.0.2/api/…
michaelosthege

4
ওহ, আমি শুধু মূর্ত আউট কিভাবে ভাগমুক্ত (যা একটি বৃহৎ গ্রিড উপযোগী হতে পারে) একটি অক্ষ - যে অক্ষের উপর, কি g = ax.get_shared_y_axes(); g.remove(a) for a in g.get_siblings(ax)]। শুরুর দিকের জন্য ধন্যবাদ!
nnot101

4
@ naught101 আপনি কেবল কল করতে পারেন ax2.autoscale()
ImportanceOfBeingEnnest
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.