web-dev-qa-db-fra.com

Log-log lmplot avec seaborn

La fonction lmplot de Seaborn peut-elle tracer une échelle log-log? Ceci est lmplot sur une échelle normale

import numpy as np
import pandas as pd
import seaborn as sns
x =  10**arange(1, 10)
y = 10** arange(1,10)*2
df1 = pd.DataFrame( data=y, index=x )
df2 = pd.DataFrame(data = {'x': x, 'y': y}) 
sns.lmplot('x', 'y', df2)

sns.lmplot('x', 'y', df2)

25
sjdh

Si vous voulez simplement tracer une régression simple, il sera plus facile d'utiliser seaborn.regplot. Cela semble fonctionner (même si je ne sais pas où va la petite grille de l'axe y)

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

x = 10 ** np.arange(1, 10)
y = x * 2
data = pd.DataFrame(data={'x': x, 'y': y})

f, ax = plt.subplots(figsize=(7, 7))
ax.set(xscale="log", yscale="log")
sns.regplot("x", "y", data, ax=ax, scatter_kws={"s": 100})

enter image description here

Si vous devez utiliser lmplot à d'autres fins, c'est ce qui vient à l'esprit, mais je ne suis pas sûr de ce qui se passe avec les graduations de l'axe x. Si quelqu'un a des idées et que c'est un bug chez seaborn, je suis heureux de le corriger:

grid = sns.lmplot('x', 'y', data, size=7, truncate=True, scatter_kws={"s": 100})
grid.set(xscale="log", yscale="log")

enter image description here

39
mwaskom

Appelez d'abord la fonction marine. Il retourne un objet FacetGrid qui a un attribut axes (un tableau numpy 2D de matplotlib Axes). Saisissez l'objet Axes et transmettez-le à l'appel à df1.plot.

import numpy as np
import pandas as pd
import seaborn as sns

x =  10**np.arange(1, 10)
y = 10**np.arange(1,10)*2
df1 = pd.DataFrame(data=y, index=x)
df2 = pd.DataFrame(data = {'x': x, 'y': y})

fgrid = sns.lmplot('x', 'y', df2)    
ax = fgrid.axes[0][0]
df1.plot(ax=ax)        

ax.set_xscale('log')
ax.set_yscale('log')
3
Paul H