Matplotlib 2サブプロット、1カラーバー

| | |

私は、2つのサブプロットをMatplotlibの2つのサブプロット間で共有される単一のカラーバーで同じy軸を共有する方法を研究するのに非常に長い時間を費やしました。

何が起こったのかというと、 subplot1またはsubplot2のいずれかのcolorbar()関数は、カラーバーとプロットが「サブプロット」内に収まるようにプロットを自動スケーリングします。バウンディングボックスにより、2つの並んだプロットのサイズが大きく異なります。

これを回避するために、3番目のサブプロットを作成しようとしました。このサブプロットをハッキングして、カラーバーだけでプロットをレンダリングしませんでした。唯一の問題は、2つのプロットの高さと幅が不均一であり、見栄えを良くする方法がわからないことです。

コードは次のとおりです。

  from __future__ import Division import matplotlib.pyplot as plt import numpy as np from matplotlib import patch 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 =ラムダx、y:-1 * TE * x * y /((x ** 2 + y ** 2)**(3/2))カッパ=ラムダ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)#サブプロット番号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 = patchs.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 = patchs.Ellipse((0,0)、2,2、color = "white")ax2.add_patch(e2)#カラーバーのサブプロットax3 = fig.add_subplot(1,1,1 )ax3.axis( "off")cbar = plt.colorbar(ax = ax2)plt.show()