Matplotlib 2 Nebenplots, 1 Farbbalken

| | |

Ich habe viel zu lange damit verbracht, zu recherchieren, wie man zwei Subplots dazu bringt, dieselbe y-Achse mit einem einzigen Farbbalken zu teilen, der von den beiden in Matplotlib geteilt wird.

Was passierte, war das, als ich das anrief colorbar()-Funktion entweder in subplot1 oder subplot2, würde sie den Plot automatisch so skalieren, dass der Farbbalken plus der Plot in den "Subplot" passen würden. Begrenzungsrahmen, was dazu führte, dass die beiden nebeneinander liegenden Plots zwei sehr unterschiedliche Größen hatten.

Um dies zu umgehen, versuchte ich, einen dritten Subplot zu erstellen, den ich dann hackte, um keinen Plot mit nur einem Farbbalken zu rendern vorhanden. Das einzige Problem ist, dass die Höhen und Breiten der beiden Diagramme jetzt ungleich sind und ich nicht herausfinden kann, wie ich es in Ordnung aussehen lassen soll.

Hier ist mein Code:

from __future__ import division import matplotlib.pyplot as plt import numpy as np from matplotlib import patches from matplotlib.ticker import NullFormatter # SIS-Funktionen TE = 1 # Einstein-Radius g1 = Lambda x,y: (TE/2) * (j**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 Nummer 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 = patches.Ellipse((0,0),2,2,color="white") ax1.add_patch(e1) # Subplot Nummer 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 = patches.Ellipse((0,0),2,2,color="white") ax2.add_patch(e2) # Subplot für Farbbalken ax3 = fig.add_subplot(1,1,1 ) ax3.axis("off") cbar = plt.colorbar(ax=ax2) plt.show()