ম্যাটপ্লটলিব - বিশ্বব্যাপী কিংবদন্তি এবং শিরোনাম সাবপ্লটগুলি বাদ দিয়ে


125

আমি ম্যাটপ্ল্লট দিয়ে শুরু করেছি এবং কিছু বেসিক প্লট পরিচালনা করেছি, তবে এখন আমার প্রয়োজনীয় কিছু জিনিস কীভাবে করা যায় তা আবিষ্কার করা আমার পক্ষে কঠিন :(

আমার আসল প্রশ্নটি কীভাবে সাবপ্লটস সহ কোনও চিত্রের উপর একটি বিশ্বব্যাপী শিরোনাম এবং গ্লোবাল কিংবদন্তি স্থাপন করবেন।

আমি 2x3 সাব-প্লট করছি যেখানে আমার বিভিন্ন বর্ণের (প্রায় 200) বিভিন্ন গ্রাফ রয়েছে। তাদের মধ্যে পার্থক্য করার জন্য (বেশিরভাগ) আমি এমন কিছু লিখেছিলাম

def style(i, total):
    return dict(color=jet(i/total),
                linestyle=["-", "--", "-.", ":"][i%4],
                marker=["+", "*", "1", "2", "3", "4", "s"][i%7])

fig=plt.figure()
p0=fig.add_subplot(321)
for i, y in enumerate(data):
    p0.plot(x, trans0(y), "-", label=i, **style(i, total))
# and more subplots with other transN functions

(এ সম্পর্কে কোনও ধারণা? :)) প্রতিটি সাবপ্লট একই স্টাইলের ফাংশন রয়েছে।

এখন আমি সমস্ত সাবপ্লটগুলির জন্য একটি গ্লোবাল খেতাব পাওয়ার চেষ্টা করছি এবং এমন একটি বৈশ্বিক কিংবদন্তি যা সমস্ত শৈলীর ব্যাখ্যা দেয়। এছাড়াও সেখানে সমস্ত 200 শৈলীতে ফিট করার জন্য আমার ফন্টটি ছোট করা দরকার (আমার সম্পূর্ণ অনন্য শৈলীর প্রয়োজন নেই, তবে কমপক্ষে কিছু চেষ্টা করুন)

কেউ আমাকে এই কাজটি সমাধান করতে সহায়তা করতে পারে?


1
গ্লোবাল শিরোনাম: matplotlib.sourceforge.net/example/pylab_example/…
ev-br

উত্তর:


192

গ্লোবাল শিরোনাম : ম্যাটপ্ল্লোলিবের নতুন রিলিজগুলিতে একজন চিত্রের সাফল্য () পদ্ধতি ব্যবহার করতে পারেন Figure:

import matplotlib.pyplot as plt
fig = plt.gcf()
fig.suptitle("Title centered above all subplots", fontsize=14)

বিকল্পভাবে ( @ স্টিভেন সিহওলের নীচে দেওয়া মন্তব্যের ভিত্তিতে (ধন্যবাদ!)), ম্যাটপ্লটলিব.পায়প্লট.সপটিটিল () ফাংশনটি ব্যবহার করুন :

 import matplotlib.pyplot as plt
 # plot stuff
 # ...
 plt.suptitle("Title centered above all subplots", fontsize=14)

64
এই জাতীয় আমদানিকারীদের জন্য: import matplotlib.pyplot as pltকমান্ডটি সহজভাবে plt.figure(); plt.suptitle('Title centered above all subplots'); plt.subplot(231); plt.plot(data[:,0], data[:,1]);ইত্যাদি হিসাবে প্রবেশ করা যেতে পারে ...
স্টিভেন সি। হাওল

1
ধন্যবাদ। এটি আসল নির্বাচিত উত্তর হওয়া উচিত।
গুস্তাফব্রস্টম

62

ছাড়াও orbeckst উত্তর এক এছাড়াও subplots নিচে নামান করতে চাইতে পারেন। এখানে ওওপি শৈলীতে একটি মেগাওয়াট রয়েছে:

import matplotlib.pyplot as plt

fig = plt.figure()
st = fig.suptitle("suptitle", fontsize="x-large")

ax1 = fig.add_subplot(311)
ax1.plot([1,2,3])
ax1.set_title("ax1")

ax2 = fig.add_subplot(312)
ax2.plot([1,2,3])
ax2.set_title("ax2")

ax3 = fig.add_subplot(313)
ax3.plot([1,2,3])
ax3.set_title("ax3")

fig.tight_layout()

# shift subplots down:
st.set_y(0.95)
fig.subplots_adjust(top=0.85)

fig.savefig("test.png")

দেয়:

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


2
এটি সেরা উত্তর হওয়া উচিত
স্ট্যাথাম

রাজি! গৃহীত উত্তরটি অন্য একটি নির্ভরশীলতার পরিচয় দেয়, সুতরাং ওপি প্রশ্নের সঠিক উত্তর দেয় না।
যোহান ওবাদিয়া

7

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

legendLabels = []
for i in range(modSize):
    legendLabels.append(ax.plot(x,hstack((array([0]),actSum[j,semi,i,semi])), color=plotColor[i%8], dashes=dashes[i%4])[0]) #linestyle=dashs[i%4]       
legArgs = dict(title='AM Templates (Hz)',bbox_to_anchor=[.4,1.05],borderpad=0.1,labelspacing=0,handlelength=1.8,handletextpad=0.05,frameon=False,ncol=4, columnspacing=0.02) #ncol,numpoints,columnspacing,title,bbox_transform,prop
leg = ax.legend(tuple(legendLabels),tuple(modFreq),'upper center',**legArgs)
leg.get_title().set_fontsize(tick_size)

আপনি লেগটি ফন্টসাইজ বা কিংবদন্তির প্রায় কোনও প্যারামিটার পরিবর্তন করতেও ব্যবহার করতে পারেন।

উপরের মন্তব্যে উল্লিখিত গ্লোবাল শিরোনাম প্রদত্ত লিঙ্কটিতে পাঠ্য যুক্ত করে সম্পন্ন করা যেতে পারে: http://matplotlib.sourceforge.net/example/pylab_exferences/newscalarformatter_demo.html

f.text(0.5,0.975,'The new formatter, default settings',horizontalalignment='center',
       verticalalignment='top')

4

suptitleযাওয়ার উপায়টি মনে হচ্ছে তবে এটির মূল্য কী, এর জন্য figureএকটি transFigureসম্পত্তি রয়েছে যা আপনি ব্যবহার করতে পারেন:

fig=figure(1)
text(0.5, 0.95, 'test', transform=fig.transFigure, horizontalalignment='center')
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.