Matplotlib 2 서브플롯, 1 컬러바

| | |

나는 Matplotlib에서 두 서브플롯이 동일한 y축을 공유하도록 하는 방법을 연구하는 데 너무 오랜 시간을 보냈습니다.

무슨 일이 일어났는지 subplot1 또는 subplot2에서 colorbar() 함수를 사용하면 색상 막대와 플롯이 "서브플롯" 안에 맞도록 플롯을 자동 크기 조정합니다. 경계 상자로 인해 두 개의 나란히 있는 플롯이 두 개의 매우 다른 크기가 됩니다.

이 문제를 해결하기 위해 세 번째 하위 플롯을 만들려고 시도한 다음 해킹하여 컬러바로 플롯을 렌더링하지 않았습니다. 존재합니다. 유일한 문제는 이제 두 플롯의 높이와 너비가 고르지 않아 제대로 보이게 하는 방법을 알 수 없다는 것입니다.

제 코드는 다음과 같습니다.

from __future__ import division import matplotlib.pyplot as plt import numpy as np from matplotlib import 패치 from matplotlib.ticker import NullFormatter # SIS 함수 TE = 1 # 아인슈타인 반경 g1 = 람다 x,y: (TE/2) * (y**2 -x**2)/((x**2+y**2)**(3/2)) g2 = 람다 x,y: -1*TE*x*y / ((x**2+ y**2)**(3/2)) 카파 = 람다 x,y: TE / (2*np.sqrt(x**2+y**2)) 좌표 = 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 범위 내(len(coords)): 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) # 서브플롯 번호 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($ heta_{E}$)", fontsize ="15") plt.ylabel(r"y($ heta_{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 = patch.Ellipse((0,0),2,2,color="white") ax1.add_patch(e1) # 서브플롯 번호 2 a x2 = 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($ heta_{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 = patch.Ellipse((0,0),2,2,color="white") ax2.add_patch(e2) # 컬러바의 서브플롯 ax3 = fig.add_subplot(1,1,1 ) ax3.axis("오프") cbar = plt.colorbar(ax=ax2) plt.show()