কিংবদন্তি স্থাপন করা ( bbox_to_anchor
)
একটি কিংবদন্তিটি loc
আর্গুমেন্টটি ব্যবহার করে অক্ষগুলির সীমানা বাক্সের ভিতরে অবস্থান করে plt.legend
।
উদাহরণস্বরূপ loc="upper right"
সীমানা বাক্সের উপরের ডানদিকে কোণে কিংবদন্তি স্থাপন করা হয়, যা ডিফল্টরূপে অক্ষের স্থানাঙ্কে (বা বাউন্ডিং বক্স নোটেশনে ) (0,0)
প্রসারিত (1,1)
হয় (x0,y0, width, height)=(0,0,1,1)
।
অক্ষ বাউন্ডিং বাক্সের বাইরে কিংবদন্তি স্থাপন করতে, কেউ (x0,y0)
কিংবদন্তির নীচের বাম কোণে অক্ষের স্থানাঙ্কের একটি দ্বৈত নির্দিষ্ট করতে পারে ।
plt.legend(loc=(1.04,0))
যাইহোক, আরও বহুমুখী পদ্ধতির bbox_to_anchor
যুক্তিটি ব্যবহার করে ম্যানুয়ালি বাউন্ডিং বক্সটি নির্দিষ্ট করা উচিত যার মধ্যে কিংবদন্তি স্থাপন করা উচিত । কেউ নিজেকে (x0,y0)
বাক্সের অংশ সরবরাহ করতে সীমাবদ্ধ করতে পারে । এটি একটি শূন্য স্প্যান বাক্স তৈরি করে, যার মধ্যে কিংবদন্তিটি loc
আর্গুমেন্টের দ্বারা প্রদত্ত দিকে প্রসারিত করবে । যেমন
plt.legnd (bbox_to_anchor = (1.04,1), লোক = "উপরের বাম")
কিংবদন্তিটি অক্ষের বাইরে রাখে, যেমন কিংবদন্তির উপরের বাম কোণটি (1.04,1)
অক্ষ স্থানাঙ্কে অবস্থিত।
আরও উদাহরণ নীচে দেওয়া হল, যেখানে অতিরিক্ত যুক্তিগুলির মত mode
এবং ncols
এর মধ্যে ইন্টারপ্লেও প্রদর্শিত হয়।
l1 = plt.legend(bbox_to_anchor=(1.04,1), borderaxespad=0)
l2 = plt.legend(bbox_to_anchor=(1.04,0), loc="lower left", borderaxespad=0)
l3 = plt.legend(bbox_to_anchor=(1.04,0.5), loc="center left", borderaxespad=0)
l4 = plt.legend(bbox_to_anchor=(0,1.02,1,0.2), loc="lower left",
mode="expand", borderaxespad=0, ncol=3)
l5 = plt.legend(bbox_to_anchor=(1,0), loc="lower right",
bbox_transform=fig.transFigure, ncol=3)
l6 = plt.legend(bbox_to_anchor=(0.4,0.8), loc="upper right")
কিভাবে 4-tuple যুক্তি ব্যাখ্যা করতে সম্পর্কিত বিশদ বিবরণ থেকে bbox_to_anchor
, হিসাবে l4
, খুঁজে পাওয়া যেতে পারে এই প্রশ্নের । mode="expand"
4-tuple কর্তৃক প্রদত্ত সীমান্ত বক্সের ভিতরে অনুভূমিকভাবে কিংবদন্তি বিস্তৃতি ঘটে। উল্লম্বভাবে প্রসারিত কিংবদন্তির জন্য, এই প্রশ্নটি দেখুন ।
কখনও কখনও এটি অক্ষ স্থানাঙ্কের পরিবর্তে চিত্রের স্থানাঙ্কে বাউন্ডিং বক্স নির্দিষ্ট করা কার্যকর হতে পারে। এটি l5
উপরের উদাহরণে দেখানো হয়েছে , যেখানে bbox_transform
আর্গুমেন্টটি চিত্রের নীচের বাম কোণে কিংবদন্তি স্থাপন করতে ব্যবহৃত হয়।
পোস্ট প্রসেসিং
কিংবদন্তিটি অক্ষের বাইরে রাখার ফলে প্রায়শই অনাকাঙ্ক্ষিত পরিস্থিতির দিকে পরিচালিত হয় যে এটি চিত্র বা ক্যানভাসের সম্পূর্ণ বা আংশিক।
এই সমস্যার সমাধানগুলি হ'ল:
সাবপ্লট প্যারামিটারগুলি
সামঞ্জস্য করুন কেউ সাবপ্লট প্যারামিটারগুলি এমনভাবে সামঞ্জস্য করতে পারে যে অক্ষগুলি ব্যবহার করে চিত্রের অভ্যন্তরে কম স্থান নেয় (এবং এর ফলে কিংবদন্তিতে আরও স্থান ছেড়ে যায়) plt.subplots_adjust
। যেমন
plt.subplots_adjust(right=0.7)
চিত্রের ডানদিকে 30% স্থান রেখে দেয়, যেখানে কেউ কিংবদন্তি রাখতে পারে।
আঁটসাঁট লেআউট
ব্যবহার plt.tight_layout
করে সাবপ্লট প্যারামিটারগুলি স্বয়ংক্রিয়ভাবে সামঞ্জস্য করতে মঞ্জুরি দেয় যাতে চিত্রের উপাদানগুলি চিত্রের কিনারাগুলির বিরুদ্ধে শক্ত হয়ে বসে থাকে। দুর্ভাগ্যক্রমে, এই অটোমেটিজমে কিংবদন্তিটি বিবেচনায় নেওয়া হয় নি, তবে আমরা একটি আয়তক্ষেত্র বাক্স সরবরাহ করতে পারি যা পুরো সাবপ্লট এলাকা (লেবেল সহ) এর মধ্যে খাপ খায়।
plt.tight_layout(rect=[0,0,0.75,1])
ফিগারটি সংরক্ষণ করেbbox_inches = "tight"
যুক্তিটি চিত্রটি সংরক্ষণ করতে ব্যবহার bbox_inches = "tight"
করা plt.savefig
যেতে পারে যাতে ক্যানভাসের সমস্ত শিল্পী (কিংবদন্তি সহ) সংরক্ষিত অঞ্চলে ফিট হয়ে যায়। প্রয়োজনে চিত্রের আকারটি স্বয়ংক্রিয়ভাবে সামঞ্জস্য হয়।
plt.savefig("output.png", bbox_inches="tight")
- সাবপ্লট প্যারামগুলি
স্বয়ংক্রিয়ভাবে সামঞ্জস্য করে সাবপ্লট অবস্থানটি স্বয়ংক্রিয়ভাবে সামঞ্জস্য করার একটি উপায় যা চিত্রের আকার পরিবর্তন না করে ক্যানভাসের মধ্যে কিংবদন্তি ফিট করে এই উত্তরটিতে পাওয়া যাবে: সঠিক আকার এবং কোনও প্যাডিং সহ চিত্র তৈরি করা (এবং অক্ষগুলির বাইরে কিংবদন্তি)
উপরে আলোচিত মামলার মধ্যে তুলনা:
বিকল্প
চিত্রের কিংবদন্তি
কোনও অক্ষের পরিবর্তে চিত্রটিতে কিংবদন্তি ব্যবহার করতে পারে matplotlib.figure.Figure.legend
। এটি ম্যাটপ্ল্লোলিব সংস্করণ> = 2.1 এর জন্য বিশেষত দরকারী হয়ে উঠেছে, যেখানে কোনও বিশেষ যুক্তির প্রয়োজন নেই
fig.legend(loc=7)
চিত্রটির বিভিন্ন অক্ষে সমস্ত শিল্পীদের জন্য কিংবদন্তি তৈরি করা। কিংবদন্তিটি loc
আর্গুমেন্ট ব্যবহার করে স্থাপন করা হয় , এটি কীভাবে একটি অক্ষের ভিতরে স্থাপন করা হয় তার অনুরূপ, তবে পুরো চিত্রের রেফারেন্সে - সুতরাং এটি কিছুটা স্বয়ংক্রিয়ভাবে অক্ষের বাইরে থাকবে outside যা অবশিষ্ট রয়েছে তা সাবপ্লটগুলি এমনভাবে সামঞ্জস্য করা যায় যে কিংবদন্তি এবং অক্ষগুলির মধ্যে কোনও ওভারল্যাপ থাকে না। এখানে উপরে থেকে "সাবপ্লট প্যারামিটারগুলি সামঞ্জস্য করুন" পয়েন্টটি সহায়ক হবে। একটি উদাহরণ:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,2*np.pi)
colors=["#7aa0c4","#ca82e1" ,"#8bcd50","#e18882"]
fig, axes = plt.subplots(ncols=2)
for i in range(4):
axes[i//2].plot(x,np.sin(x+i), color=colors[i],label="y=sin(x+{})".format(i))
fig.legend(loc=7)
fig.tight_layout()
fig.subplots_adjust(right=0.75)
plt.show()
ডেডিকেটেড সাবপ্লোট অক্ষের অভ্যন্তরে কিংবদন্তি
ব্যবহারের বিকল্প হ'লbbox_to_anchor
কিংবদন্তিটিকে তার উত্সর্গীকৃত সাবপ্ল্লট অক্ষগুলিতে স্থাপন করা হবে lax
। কিংবদন্তি সাবপ্লট প্লটটির চেয়ে ছোট হওয়া উচিত, তাই আমরা gridspec_kw={"width_ratios":[4,1]}
অক্ষ তৈরিতে ব্যবহার করতে পারি । আমরা অক্ষ লুকিয়ে রাখতে পারেন lax.axis("off")
কিন্তু এখনও একটি কিংবদন্তি করা। কিংবদন্তি পরিচালনা ও লেবেল মাধ্যমে বাস্তব চক্রান্ত থেকে প্রাপ্ত প্রয়োজন h,l = ax.get_legend_handles_labels()
, এবং তারপর মধ্যে কিংবদন্তি সরবরাহ করা যেতে পারে lax
, উপকাহিনী lax.legend(h,l)
। একটি সম্পূর্ণ উদাহরণ নীচে।
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = 6,2
fig, (ax,lax) = plt.subplots(ncols=2, gridspec_kw={"width_ratios":[4,1]})
ax.plot(x,y, label="y=sin(x)")
....
h,l = ax.get_legend_handles_labels()
lax.legend(h,l, borderaxespad=0)
lax.axis("off")
plt.tight_layout()
plt.show()
এটি এমন একটি প্লট তৈরি করে যা উপরের প্লটের সাথে দৃশ্যত বেশ অনুরূপ:
কিংবদন্তি স্থাপনের জন্য আমরা প্রথম অক্ষ ব্যবহার করতে পারি bbox_transform
, তবে কিংবদন্তি অক্ষগুলির ব্যবহার করতে পারি ,
ax.legend(bbox_to_anchor=(0,0,1,1), bbox_transform=lax.transAxes)
lax.axis("off")
এই পদ্ধতির ক্ষেত্রে, আমাদের বাহ্যিকভাবে কিংবদন্তি হ্যান্ডলগুলি প্রাপ্ত করার দরকার নেই, তবে আমাদের bbox_to_anchor
যুক্তি নির্দিষ্ট করতে হবে ।
আরও পড়া এবং নোট:
- কিংবদন্তিদের সাথে আপনি কী করতে চান এমন অন্যান্য জিনিসগুলির কয়েকটি উদাহরণ সহ ম্যাটপ্ল্লোব কিংবদন্তি গাইডটি বিবেচনা করুন ।
- পাই চার্টের জন্য কিংবদন্তি স্থাপনের কয়েকটি উদাহরণ কোড সরাসরি এই প্রশ্নের উত্তরে পাওয়া যেতে পারে: পাইথন - পাই চার্টের সাথে কিংবদন্তি ওভারল্যাপ হয়
loc
যুক্তি স্ট্রিং পরিবর্তে সংখ্যা, যা কল খাটো করতে নিতে পারে, যাইহোক, তারা খুব intuitively একে অপরের সাথে ম্যাপ করা হয় না। রেফারেন্সের জন্য ম্যাপিংটি এখানে: