আমার ম্যাটপ্ল্লিটিব প্লটে আমার এক্সলেবেল কেটে দেওয়া হয় কেন?


302

আমি matplotlibযেখানে একটি "লেবেল" বেশ "লম্বা" এটি ব্যবহার করে একটি ডেটাসেটের প্লট করছি (এটি টেক্সে রেন্ডার করা একটি সূত্র যা ভগ্নাংশ ধারণ করে এবং তাই এটি বেশ কয়েকটি পাঠ্য রেখার উচ্চতার সমতুল্য)।

যাই হোক না কেন, আমি অঙ্কগুলি আঁকলে সূত্রের নীচের অংশটি সর্বদা কেটে যায়। চিত্রের আকার পরিবর্তন করা এটিকে সাহায্য করবে বলে মনে হয় না এবং কীভাবে এক্সল অক্ষের স্থান পরিবর্তন করতে এক্স-অক্ষটি "উপরে" স্থানান্তরিত করতে হয় তা নির্ধারণ করতে পারিনি। এর মতো কিছু একটি যুক্তিসঙ্গত অস্থায়ী সমাধান হতে পারে তবে ম্যাটপ্ল্লিটিবকে স্বয়ংক্রিয়ভাবে স্বীকৃতি দেবে যে লেবেলটি কেটে ফেলা হয়েছে এবং সেই অনুযায়ী আকার পরিবর্তন করুন nice

আমি কী বোঝাতে চাইছি তার উদাহরণ এখানে:

import matplotlib.pyplot as plt

plt.figure()
plt.ylabel(r'$\ln\left(\frac{x_a-x_b}{x_a-x_c}\right)$')
plt.xlabel(r'$\ln\left(\frac{x_a-x_d}{x_a-x_e}\right)$')
plt.show()

আপনি যখন পুরো ইলাবেল দেখতে পাচ্ছেন, ততক্ষণে এক্সবেল কেটে গেছে।

ক্ষেত্রে এটি কোনও মেশিন-নির্দিষ্ট সমস্যা, আমি এটি ম্যাটপ্ল্লোলিব ১.০.০ সহ OSX 10.6.8 এ চালাচ্ছি


4
আপনি কোনও চিত্র হোস্টিং সাইটে পোস্ট করতে এবং এটি এখানে লিঙ্ক করতে পারে।
agf

1
আপনি যদি একটি সংখ্যার নমুনা কোড পোস্ট করতে পারেন যা এই সমস্যাটিকে ট্রিগার করে তবে এটি সহায়তা করে। এইভাবে, লোকেরা আপনার সমস্যাটি দ্রুত বুঝতে এবং পুনরুত্পাদন করতে পারে এবং তারা আপনাকে সহায়তা করার সম্ভাবনা বেশি।
ডেনিলসন সা মিয়া

আপনার কোডটি আমার মেশিনে ঠিক সূক্ষ্মভাবে কাজ করে (সূত্রটি সম্পূর্ণ দৃশ্যমানভাবে প্রদর্শন করুন) (উবুন্টু 11.04 64 বিট)। হতে পারে কোনও মেশিন-নির্দিষ্ট সমস্যা [ছবিতে ভুল মাত্রিক তথ্য সহ একটি ফন্টের মতো?]। আপনি সম্ভবত আপনার প্রশ্নে যে সিস্টেমটি ব্যবহার করছেন তা নির্দিষ্ট করে দিতে পারেন।
ম্যাক

9
আপনিও চেষ্টা করতে পারেন plt.savefig("test.png",bbox_inches='tight'): স্ট্যাকওভারফ্লো
২১২৮৮০62২/২

উত্তর:


473

ব্যবহার করুন:

import matplotlib.pyplot as plt

plt.gcf().subplots_adjust(bottom=0.15)

লেবেল জন্য জায়গা করতে।

সম্পাদনা:

যেহেতু আমি উত্তর দিয়েছি, ফাংশন matplotlibযুক্ত করেছে tight_layout()। সুতরাং আমি এটি ব্যবহার করার পরামর্শ দিচ্ছি:

plt.tight_layout()

xlabel জন্য জায়গা করা উচিত।


141
আমি এটি অত্যন্ত অদ্ভুত বলে মনে করি যে একটি প্লটের একটি প্রয়োজনীয় অংশের জন্য জায়গা করার জন্য একটি অতিরিক্ত কল করা দরকার। এর পিছনে যুক্তি কী?
একটি ভিন্ন বেন

3
শুধু কৌতুহলের বাইরে, কেন আপনি gcf().subplots_adjustচেয়ে না plt.subplots_adjust? পার্থক্য আছে কি?
জুনিপার-

49
কি gcfএবং gca? আপনি ব্যাখ্যা করতে অবহেলা!
কর্নেল আতঙ্ক

12
আমি একই সমস্যার মুখোমুখি হয়েছিলাম, এবং tight_layout()এক্সব্ল্যাবসগুলি কাটফফ ঠিক করার সময় , দুর্ভাগ্যক্রমে এটি আমার ইয়েলবেল কেটে যায় (যা আগে কাটা হয়নি)। তবে, প্রথম প্রতিকারটি ( subplots_adjust(bottom=0.25)) ভালভাবে কাজ করেছে। ধন্যবাদ।
স্কট এইচ

17
@ কলোনেলপ্যানিক gcf()এবং gca()যথাক্রমে "বর্তমান চিত্র পান" এবং "বর্তমান অক্ষগুলি পান" are
ডাঃমিশা

150

প্লটের আকারটি স্বয়ংক্রিয়ভাবে সামঞ্জস্য করার জন্য ম্যাটপ্লোটিলেব কনফিগার করা একটি সহজ বিকল্প। এটি আমার পক্ষে নিখুঁতভাবে কাজ করে এবং আমি নিশ্চিত নই কেন এটি ডিফল্টরূপে সক্রিয় হয়নি।

পদ্ধতি 1

আপনার matplotlibrc ফাইলে এটি সেট করুন

figure.autolayout : True

ম্যাটপ্লোটিলিবার্ক ফাইলটি অনুকূলিতকরণ সম্পর্কিত আরও তথ্যের জন্য এখানে দেখুন: http://matplotlib.org/users/customizing.html

পদ্ধতি 2

রানটাইমের সময় rcParams আপডেট করুন

from matplotlib import rcParams
rcParams.update({'figure.autolayout': True})

এই পদ্ধতির ব্যবহারের সুবিধা হ'ল আপনার কোডটি বিভিন্ন-কনফিগার করা মেশিনে একই গ্রাফ তৈরি করবে।


এই বিকল্পটি ব্যবহার করার সময় আমার খুব বড় রঙিন বারগুলির সাথে কিছু সমস্যা ছিল। একটি সম্ভাব্য সমাধান এখানে আলোচনা হয়: matplotlib.org/users/tight_layout_guide.html
PiQuer

2
যখন আমি কাস্টম (বড়!) ফন্টসাইজ সেট করি তখন টাইট_লেআউট জিনিসগুলিতে গোলমাল করে। এটি একটি আরও ভাল কাজ করে।
বেনবি

আর লিসেক্সের সাথে পিজিএফ ব্যাকএন্ড ব্যবহার করার সময় আরসিপ্যারামগুলি আপডেট করা সত্যিই আমার পক্ষে কাজ করেছিল। (যদিও এটি
প্লটটিকে

কেবল এটিই আমার পক্ষে কাজ করেছিল; টাইট_লআউট বা বক্স_ইঞ্চগুলির কোনওটিই কাজ
করেনি

106

আপনি যদি এটি কোনও ফাইলে সংরক্ষণ করতে চান তবে আপনি এটি bbox_inches="tight"যুক্তি ব্যবহার করে সমাধান করুন :

plt.savefig('myfile.png', bbox_inches = "tight")

5
কেবল এটিই আমার পক্ষে কাজ করেছিল, তা নয় plt.tight_layout()
ম্যাক্স ঘেনিস

2
@ গুয়েডো দিনটি বাঁচিয়েছিল
pcko1

7

ফেলে plot.tight_layout()গ্রাফে সকল পরিবর্তন করার পর ঠিক আগে show()বা savefig()সমস্যার সমাধান হবে।


1
এটি প্লটের নীচের অংশের জায়গা করে না, বরং এটি পুরো প্লটটিকে পুনর্বিবেচনা দেয়, যা কিছু ক্ষেত্রে (আমার হিসাবে) প্লটটিকে সত্যই অদ্ভুত দেখাবে।
89f3a1c


5

আপনি $HOME/.matplotlib/matplotlib_rcনিম্নলিখিত হিসাবে আপনার ডিফল্ট হিসাবে কাস্টম প্যাডিং সেট করতে পারেন । নীচের উদাহরণে আমি বাক্সের প্যাডিংয়ের নীচে এবং বাম উভয়ই সংশোধন করেছি:

# The figure subplot parameters.  All dimensions are a fraction of the
# figure width or height
figure.subplot.left  : 0.1 #left side of the subplots of the figure
#figure.subplot.right : 0.9 
figure.subplot.bottom : 0.15
...
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.