ম্যাটপ্ল্লটিবের অনেক সাবপ্লট দিয়ে সাবপ্লট আকার / ব্যবধান উন্নত করুন


312

এই প্রশ্নের সাথে খুব অনুরূপ তবে এই পার্থক্যের সাথে আমার চিত্রটি যতটা বড় হওয়া দরকার।

আমাকে ম্যাটপ্ল্লোলিবে উল্লম্বভাবে স্ট্যাকযুক্ত প্লটগুলির পুরো গোছা তৈরি করতে হবে। ফলস্চেভ ব্যবহার করে একটি ওয়েবপৃষ্ঠায় সংরক্ষণ করা হবে এবং চূড়ান্ত চিত্রটি যতক্ষণ লম্বা হবে সাব-প্লটগুলি যতক্ষণ ফাঁকা থাকবে তাই সেগুলি ওভারল্যাপ না করে I

আমি চিত্রটি যত বড় হতে দেই না কেন, সাবপ্লটগুলি সর্বদা ওভারল্যাপ করে বলে মনে হচ্ছে।

আমার কোডটি বর্তমানে মনে হচ্ছে

import matplotlib.pyplot as plt
import my_other_module

titles, x_lists, y_lists = my_other_module.get_data()

fig = plt.figure(figsize=(10,60))
for i, y_list in enumerate(y_lists):
    plt.subplot(len(titles), 1, i)
    plt.xlabel("Some X label")
    plt.ylabel("Some Y label")
    plt.title(titles[i])
    plt.plot(x_lists[i],y_list)
fig.savefig('out.png', dpi=100)

উত্তর:


412

ব্যবহার করার চেষ্টা করুন plt.tight_layout

দ্রুত উদাহরণ হিসাবে:

import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=4, ncols=4)
fig.tight_layout() # Or equivalently,  "plt.tight_layout()"

plt.show()

টাইট লেআউট ছাড়া

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


টাইট লেআউট সহ এখানে চিত্র বর্ণনা লিখুন


21
আপনার প্লট কোডের পরে এটি কার্যকর করা উচিত দেখানো হলে এটি একটু পরিষ্কার হবে show তবে শোয়ের ঠিক আগে ()
পিইজে

5
tight_layout()আঘাত এবং মিস হয়। আমি বুঝতে চেষ্টা করেছিলাম কি আলাদা যখন এটির কোন প্রভাব নেই (বৃহত আন্ত-প্লট মার্জিন রয়ে গেছে) - যা প্রায়শই হয়
জাভাদবা

3
এটি suptitleআমার সাবপ্লট শিরোনামের সাথে আমার চিত্রের শিরোনাম ( ) উপেক্ষা ছাড়া এটি আমার পক্ষে বেশ ভাল কাজ করেছে । যদি কেউ একই ধরণের সমস্যার মুখোমুখি হয় তবে আমার কেস স্ট্যাকওভারফ্লো . com/ a/ 45161551/11740420 এ কী সহায়তা করেছে তা এখানে । যেমন, rectএর প্যারামিটারtight_layout()
Siyana পাভলোভার

283

আপনি plt.subplots_adjustসাবপ্লট (উত্স) এর মধ্যে ব্যবধান পরিবর্তন করতে ব্যবহার করতে পারেন

কল স্বাক্ষর:

subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)

প্যারামিটার অর্থ (এবং প্রস্তাবিত ডিফল্ট) হ'ল:

left  = 0.125  # the left side of the subplots of the figure
right = 0.9    # the right side of the subplots of the figure
bottom = 0.1   # the bottom of the subplots of the figure
top = 0.9      # the top of the subplots of the figure
wspace = 0.2   # the amount of width reserved for blank space between subplots
hspace = 0.2   # the amount of height reserved for white space between subplots

আসল ডিফল্টগুলি আরসি ফাইল দ্বারা নিয়ন্ত্রিত হয়


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

52
@ এমসিস্ট্রার আপনি যদি কোনও প্লট দেখানোর পরে 'অ্যাডজাস্টমেন্ট' বোতামটি ক্লিক করেন তবে আপনি সেগুলির পরামিতিগুলির সমস্ত 6 টি ইন্টারেক্টিভভাবে পরিবর্তন করতে পারেন, তবে আপনি কী কাজ করে তা খুঁজে পাওয়ার পরে সেগুলিকে কোডে কপি করুন।
নিক টি

1
আমি অ্যাডজাস্টমেন্ট বোতামটি দেখতে পাচ্ছি না। যদিও আমি একটি বৃহত্তর নোটবুকে আছি। আমি% matplotlib ইনলাইন এবং% matplotlib নোটবুক চেষ্টা করেছি।
ম্যাট ক্লিনস্মিথ

1
@ ম্যাটক্লেইনস্মিথ: অ্যাডজাস্টমেন্ট বোতামটিতে হোভার পাঠ্য রয়েছে "সাবপ্লটগুলি কনফিগার করুন" এবং ম্যাটপ্ল্লটিবের নিয়মিত নন-নোটবুক ব্যবহারে উপস্থিত হয়। এটি "ফ্লপি ডিস্ক" এর সংরক্ষণের বোতামের বামে এখানে রয়েছে: পাইথনস্পট-9329.kxcdn.com/wp-content/uploads/2016/07/… - নোট আপনি কী উইন্ডো সিস্টেমের উপর নির্ভর করে বোতামটি ভিন্ন দেখাচ্ছে ব্যবহার করে, তবে এটি সবসময় সেভ বোতামের বামদিকে থাকে।
জন জুইঙ্ক

@ জনজুইনক, আপনার মন্তব্যের লিঙ্কটি এখন মারা গেছে।
ব্যবহারকারী 4015990

56

আমি দেখতে পেলাম যে সাবপ্লটস_এডজাস্ট (hspace = 0.001) আমার জন্য কাজ করে up আমি যখন স্পেস = কোনটিই ব্যবহার করি না, প্রতিটি প্লটের মধ্যে এখনও সাদা জায়গা থাকে। এটিকে শূন্যের খুব কাছাকাছি কিছুতে সেট করা তাদের মনে হয় যে তারা সারি রেখেছে। আমি এখানে যা আপলোড করেছি তা কোডের সবচেয়ে মার্জিত অংশ নয়, তবে আপনি দেখতে পাচ্ছেন যে hspace কীভাবে কাজ করে।

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as tic

fig = plt.figure()

x = np.arange(100)
y = 3.*np.sin(x*2.*np.pi/100.)

for i in range(5):
    temp = 510 + i
    ax = plt.subplot(temp)
    plt.plot(x,y)
    plt.subplots_adjust(hspace = .001)
    temp = tic.MaxNLocator(3)
    ax.yaxis.set_major_locator(temp)
    ax.set_xticklabels(())
    ax.title.set_visible(False)

plt.show()

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


31
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(10,60))
plt.subplots_adjust( ... )

Plt.subplots_adjust পদ্ধতি:

def subplots_adjust(*args, **kwargs):
    """
    call signature::

      subplots_adjust(left=None, bottom=None, right=None, top=None,
                      wspace=None, hspace=None)

    Tune the subplot layout via the
    :class:`matplotlib.figure.SubplotParams` mechanism.  The parameter
    meanings (and suggested defaults) are::

      left  = 0.125  # the left side of the subplots of the figure
      right = 0.9    # the right side of the subplots of the figure
      bottom = 0.1   # the bottom of the subplots of the figure
      top = 0.9      # the top of the subplots of the figure
      wspace = 0.2   # the amount of width reserved for blank space between subplots
      hspace = 0.2   # the amount of height reserved for white space between subplots

    The actual defaults are controlled by the rc file
    """
    fig = gcf()
    fig.subplots_adjust(*args, **kwargs)
    draw_if_interactive()

অথবা

fig = plt.figure(figsize=(10,60))
fig.subplots_adjust( ... )

ছবির আকারটি গুরুত্বপূর্ণ।

"আমি এইচপিএসের সাথে জগাখিচুড়ি করার চেষ্টা করেছি, তবে এটিকে বাড়ানো কেবল ওভারল্যাপ সমস্যার সমাধান না করে সমস্ত গ্রাফকে আরও ছোট করে দেখায়" "

সুতরাং আরও সাদা স্থান তৈরি করতে এবং উপ-প্লটের আকার ধরে রাখতে মোট চিত্রটি আরও বড় হওয়া দরকার।


2
ছবির আকারের আকার, বড় আকারের আকার এই সমস্যার সমাধান করতে পারে! সেট plt.figure(figsize=(10, 7)), ছবি আকার হবে 2000 x 1400, pix
Belter

24

আপনি subplot_tool চেষ্টা করতে পারেন ()

plt.subplot_tool()

এটি আমার সূক্ষ্ম সুরের প্রচুর পরিমাণে সঞ্চয় করেছে, কখনই জানত না এটি ধন্যবাদ থেকে বেরিয়ে আসে!
হ্যাডি এলসাহার


20

tight_layoutএখন ম্যাটপ্ল্লোলিবের অনুরূপ (সংস্করণ ২.২ হিসাবে) সরবরাহ করে constrained_layout। এর বিপরীতে tight_layout, যা একক অনুকূল অনুকূল বিন্যাসের কোডে যে কোনও সময় বলা যেতে পারে, constrained_layoutএমন একটি সম্পত্তি, যা সক্রিয় হতে পারে এবং প্রতিটি অঙ্কনের পদক্ষেপের আগে লেআউটটিকে অনুকূল করতে পারে।

অত: পর এটা আগে বা যেমন উপকাহিনী সৃষ্টি, সময় সক্রিয় করা প্রয়োজন figure(constrained_layout=True)বা subplots(constrained_layout=True)

উদাহরণ:

import matplotlib.pyplot as plt

fig, axes = plt.subplots(4,4, constrained_layout=True)

plt.show()

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

বাঁধা_আউটআউট পাশাপাশি সেট করা যেতে পারে rcParams

plt.rcParams['figure.constrained_layout.use'] = True

দেখুন নতুন এন্ট্রি কি এবং সীমাবদ্ধ লেআউট গাইড


1
এই চেষ্টা করা যাচ্ছে: এই বিকল্প দেখেনি - এবং tight_layoutউপরে ভরসা করা যায়
javadba

বাহ, একমাত্র বিকল্প যা আসলে আমার পক্ষে কাজ করেছিল
সের্গেই

এটি আশাব্যঞ্জক মনে হলেও আমাকে যথেষ্ট স্পেসিং দেয়নি (অক্ষগুলির লেবেল এবং শিরোনাম এখনও উপচে পড়ে আছে) এবং রেন্ডারিংয়ে আরও বেশি সময় লেগেছে। tight_layout()আরও ভাল কাজ করেছে
ক্র্যাক

2
@ ক্রাক সঠিক, সাধারণভাবে contrained_layoutধীরে ধীরে, কারণ এই উত্তরে যেমনটি দেখা গেছে, এটি প্রতিটি অঙ্কনের পদক্ষেপের আগে লেআউটটিকে অনুকূলিত করে
ImportanceOfBeingErnest

আমার জন্য এটি সবচেয়ে দরকারী উত্তর ছিল - আমার জন্য টাইট_লআউট সর্বদা প্যানেল শিরোনামের জন্য জায়গা ছেড়ে দেওয়ার জন্য উল্লম্ব ব্যবধানকে উন্নত করে, তবে প্রতিবারের জন্য ওয়াই-অক্ষের লেবেলটি কেটে ফেলতে হবে। পরিবর্তে, এটি পুরোপুরি কাজ করে, ধন্যবাদ।
অ্যাড্রিয়ান টম্পকিন্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.