web-dev-qa-db-fra.com

Tracer une ligne horizontale sur plusieurs sous-parcelles en python en utilisant pyplot

Je trace trois sous-intrigues sur la même page. Je veux tracer une ligne horizontale à travers toutes les sous-parcelles. Voici mon code et le graphique résultant: (Vous pouvez remarquer que je peux obtenir la ligne horizontale sur l'un des tracés, mais pas tous)

gs1 = gridspec.GridSpec(8, 2)
gs1.update(left=0.12, right=.94, wspace=0.12)
ax1 = plt.subplot(gs1[0:2, :])
ax2 = plt.subplot(gs1[3:5, :], sharey=ax1)
ax3 = plt.subplot(gs1[6:8, :], sharey=ax1)

ax1.scatter(theta_cord, density, c = 'r', marker= '1')
ax2.scatter(phi_cord, density, c = 'r', marker= '1')
ax3.scatter(r_cord, density, c = 'r', marker= '1')
ax1.set_xlabel('Theta (radians)')
ax1.set_ylabel('Galaxy count')
ax2.set_xlabel('Phi (radians)')
ax2.set_ylabel('Galaxy count')
ax3.set_xlabel('Distance (Mpc)')
ax3.set_ylabel('Galaxy count')
plt.ylim((0,0.004))
loc = plticker.MultipleLocator(base=0.001)
ax1.yaxis.set_major_locator(loc)

plt.axhline(y=0.002, xmin=0, xmax=1, hold=None)

plt.show()

Cela génère les éléments suivants: enter image description here

Encore une fois, je veux que la ligne que j'ai tracée sur le dernier sous-tracé apparaisse également sur les deux premiers sous-intrigues. Comment je fais ça?

19
Abhinav Kumar

J'ai trouvé un moyen de le faire pour toute personne qui trébuche de toute façon.

Nous devons remplacer la ligne suivante du PO:

plt.axhline(y=0.002, xmin=0, xmax=1, hold=None)

Nous le remplaçons par:

ax1.axhline(y=0.002,xmin=0,xmax=3,c="blue",linewidth=0.5,zorder=0)
ax2.axhline(y=0.002,xmin=0,xmax=3,c="blue",linewidth=0.5,zorder=0)
ax3.axhline(y=0.002,xmin=0,xmax=3,c="blue",linewidth=0.5,zorder=0)

Cela produit:

enter image description here

33
Abhinav Kumar

Puisque vous avez défini ax1, ax2 et ax3, il est facile de tracer des lignes horizontales dessus. Vous devez le faire séparément pour eux. Mais votre code pourrait être simplifié:

for ax in [ax1, ax2, ax3]:
    ax.axhline(y=0.002, c="blue",linewidth=0.5,zorder=0)

Selon documentation axhline , xmin et xmax devraient être dans la plage (0,1). Il n'y a aucune chance que xmax=3.0. Étant donné que votre intention est de tracer une ligne horizontale sur les axes (qui est le comportement par défaut de la méthode axhline), vous pouvez simplement omettre les paramètres xmin et xmax.

3
jdhao