web-dev-qa-db-fra.com

Seaborn: Je veux juste une échelle logarithmique

J'utilise seaborn pour tracer des données de biologie.

Je veux juste une distribution d'un gène contre un autre (expression chez environ 300 patients), et tout cela a bien fonctionné avec graph = sns.jointplot(x='Gene1',y='Gene2',data=data,kind='reg')

J'aime que le graphique me donne un ajustement linéaire agréable et un PearsonR et une valeur P.

One of my graphs.

Tout ce que je veux, c'est tracer mes données sur une échelle logarithmique, qui est la manière dont ces données génétiques sont généralement représentées.

J'ai regardé quelques solutions en ligne, mais elles se débarrassent toutes de ma valeur PearsonR ou de mon ajustement linéaire ou elles n'ont tout simplement pas l'air aussi bien. Je suis nouveau dans ce domaine, mais il semble que la représentation graphique sur une échelle logarithmique ne devrait pas poser trop de problèmes.

Des commentaires ou des solutions?

Merci!

Edit: En réponse aux commentaires, je me suis rapproché de ma réponse. J'ai maintenant un graphique (illustré ci-dessous), mais j'ai besoin d'une ligne d'ajustement et de faire quelques statistiques. J'y travaille maintenant, mais toutes les réponses/suggestions en attendant sont plus que bienvenues.

Progress

12
julianstanley
mybins=np.logspace(0, np.log(100), 100)

g = sns.JointGrid(data1, data2, data, xlim=[.5, 1000000],
                  ylim=[.1, 10000000])
g.plot_marginals(sns.distplot, color='blue', bins=mybins)
g = g.plot(sns.regplot, sns.distplot)
g = g.annotate(stats.pearsonr)

ax = g.ax_joint
ax.set_xscale('log')
ax.set_yscale('log')

g.ax_marg_x.set_xscale('log')
g.ax_marg_y.set_yscale('log')

Cela a très bien fonctionné. En fin de compte, j'ai décidé de simplement convertir mes valeurs de table en log(x), car cela a rendu le graphique plus facile à mettre à l'échelle et à visualiser à court terme.

7
CalendarJ