2010-01-24 18 views
4

J'essaie de tracer certaines courbes avec matplotlib en utilisant le composant gui par défaut et j'ai du mal à sélectionner lequel des deux axes y que la fonctionnalité de survol doit sélectionner. Le cas par défaut semble être que ax2 est sélectionné mais je voudrais utiliser ax1 à la place. Est-ce possible de réparer d'une manière simple?Matplotlib avec souris à double échelle sur

C'est le code que j'utilise pour tracer mes courbes.

Meilleures salutations Anders Olme

delta=np.median(np.diff(measurementvalues.measvalues)) 
myscale=10 
myrange=(measurementvalues.lowerlimit - delta*myscale, measurementvalues.upperlimit + delta*myscale) 

figure = plt.figure() 
ax1 = figure.add_subplot(111) 
(n, bins, patches) = ax1.hist(measurementvalues.measvalues, 10, range=myrange, normed=0, facecolor='green', alpha=0.75) 

ax2 = ax1.twinx() 
mean = np.average(measurementvalues.measvalues) 
sigma = np.std(measurementvalues.measvalues) 
y = mlab.normpdf(bins, mean, sigma) 

ax2.plot(bins, y, 'r-', linewidth=1) 
ax1.set_xlabel('Measvlues') 
ax2.set_ylabel('Probability') 
ax1.set_title(r'$\mathrm{Histogram\ of\ measvalues:}\ \mu=$'+str(mean)+r'$,\ \sigma=$'+str(sigma)+r'$$') 
plt.grid(True) 

plt.show() 
+0

Pourriez-vous clarifier la question? Essayez-vous d'utiliser FigureCanvas.mpl_connect() pour interagir avec la figure? Le code affiché montre seulement comment la figure est générée; pouvez-vous poster le code qui décrit comment vous essayez d'interagir avec la figure? –

+0

Il parle des étiquettes de coordonnées dans le coin inférieur droit des graphiques interactifs. Aucun callback impliqué, juste l'intrigue par défaut. – matt

Répondre

2

Ajouter ce qui suit après avoir appelé Twinx

ax3 = ax1.figure.add_axes(ax1.get_position(True), sharex=ax1, sharey=ax1, 
     frameon=False) 
ax3.xaxis.set_visible(False) 
ax3.yaxis.set_visible(False) 

Vous devrez également changer plt.grid (Vrai) à ax1.grid (Vrai)

+0

cela devrait être accepté comme réponse, cela fonctionne. Pourquoi le besoin de changer de grille? – dashesy

+0

@dashesy Je recommande de passer de 'plt.grid' à' ax1.grid' afin de définir explicitement la grille pour 'ax1'. Peut-être que l'OP veut réellement la grille sur 'ax2', auquel cas il n'y a pas besoin de changer cela. – esmit

Questions connexes