আমি ম্যাটপ্ল্লোব-এ দু'জনের মধ্যে ভাগ করা একক রঙের বারের সাথে কীভাবে একই ওয়াই-অক্ষটি ভাগ করতে দুটি সাব-প্লট পেতে পারি তা নিয়ে পুরোপুরি দীর্ঘ সময় ব্যয় করেছি।
যা হচ্ছিল তা হ'ল আমি যখন colorbar()
ফাংশনটিকে উভয় দিকে ডেকেছিলাম subplot1
বা subplot2
প্লটটি অটোক্যাস করবে যে রঙবার প্লাস প্লটটি 'সাবপ্লট' বাউন্ডিং বাক্সের ভিতরে ফিট করবে, যার ফলে দুটি পাশের প্লট দুটি খুব আলাদা হবে মাপ।
এটি পেতে, আমি একটি তৃতীয় সাবপ্লট তৈরি করার চেষ্টা করেছি যা আমি কেবল একটি কালারবারের সাথে কোনও প্লট রেন্ডার করতে হ্যাক করেছি। একমাত্র সমস্যা হ'ল, এখন দুটি প্লটের উচ্চতা এবং প্রস্থগুলি অসম এবং এটি কীভাবে ঠিক করা যায় তা আমি বুঝতে পারি না।
আমার কোডটি এখানে:
from __future__ import division
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import patches
from matplotlib.ticker import NullFormatter
# SIS Functions
TE = 1 # Einstein radius
g1 = lambda x,y: (TE/2) * (y**2-x**2)/((x**2+y**2)**(3/2))
g2 = lambda x,y: -1*TE*x*y / ((x**2+y**2)**(3/2))
kappa = lambda x,y: TE / (2*np.sqrt(x**2+y**2))
coords = np.linspace(-2,2,400)
X,Y = np.meshgrid(coords,coords)
g1out = g1(X,Y)
g2out = g2(X,Y)
kappaout = kappa(X,Y)
for i in range(len(coords)):
for j in range(len(coords)):
if np.sqrt(coords[i]**2+coords[j]**2) <= TE:
g1out[i][j]=0
g2out[i][j]=0
fig = plt.figure()
fig.subplots_adjust(wspace=0,hspace=0)
# subplot number 1
ax1 = fig.add_subplot(1,2,1,aspect='equal',xlim=[-2,2],ylim=[-2,2])
plt.title(r"$\gamma_{1}$",fontsize="18")
plt.xlabel(r"x ($\theta_{E}$)",fontsize="15")
plt.ylabel(r"y ($\theta_{E}$)",rotation='horizontal',fontsize="15")
plt.xticks([-2.0,-1.5,-1.0,-0.5,0,0.5,1.0,1.5])
plt.xticks([-2.0,-1.5,-1.0,-0.5,0,0.5,1.0,1.5])
plt.imshow(g1out,extent=(-2,2,-2,2))
plt.axhline(y=0,linewidth=2,color='k',linestyle="--")
plt.axvline(x=0,linewidth=2,color='k',linestyle="--")
e1 = patches.Ellipse((0,0),2,2,color='white')
ax1.add_patch(e1)
# subplot number 2
ax2 = fig.add_subplot(1,2,2,sharey=ax1,xlim=[-2,2],ylim=[-2,2])
plt.title(r"$\gamma_{2}$",fontsize="18")
plt.xlabel(r"x ($\theta_{E}$)",fontsize="15")
ax2.yaxis.set_major_formatter( NullFormatter() )
plt.axhline(y=0,linewidth=2,color='k',linestyle="--")
plt.axvline(x=0,linewidth=2,color='k',linestyle="--")
plt.imshow(g2out,extent=(-2,2,-2,2))
e2 = patches.Ellipse((0,0),2,2,color='white')
ax2.add_patch(e2)
# subplot for colorbar
ax3 = fig.add_subplot(1,1,1)
ax3.axis('off')
cbar = plt.colorbar(ax=ax2)
plt.show()