J'essaie simplement de tracer une ligne en pointillé avec Seaborn. Ceci est le code que j'utilise et la sortie que je reçois
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
n = 11
x = np.linspace(0,2,n)
y = np.sin(2*np.pi*x)
sns.lineplot(x,y, linestyle='--')
plt.show()
Qu'est-ce que je fais mal? Merci
Il semble que l'argument linestyle=
ne fonctionne pas avec lineplot()
, et l'argument dashes=
est un peu plus compliqué qu'il n'y paraît.
Une façon (relativement) simple de procéder consiste à obtenir une liste des objets Line2D sur le tracé à l'aide de ax.lines
, puis à définir le style de trait manuellement:
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
n = 11
x = np.linspace(0,2,n)
y = np.sin(2*np.pi*x)
ax = sns.lineplot(x,y)
# Might need to loop through the list if there are multiple lines on the plot
ax.lines[0].set_linestyle("--")
plt.show()
Mettre à jour:
Il semble que l'argument dashes
s'applique uniquement lors du traçage de plusieurs lignes (généralement à l'aide d'un cadre de données pandas). Les tirets sont spécifiés comme dans matplotlib, un tuple de longueurs (segment, gap). Par conséquent, vous devez passer une liste de tuples.
n = 100
x = np.linspace(0,4,n)
y1 = np.sin(2*np.pi*x)
y2 = np.cos(2*np.pi*x)
df = pd.DataFrame(np.c_[y1, y2]) # modified @Elliots dataframe production
ax = sns.lineplot(data=df, dashes=[(2, 2), (2, 2)])
plt.show()
En fait, vous utilisez lineplot
dans le mauvais sens. Votre cas simplifié est plus approprié pour la fonction matplotlib
de plot
que pour tout ce qui vient de seaborn
. seaborn
est plus destiné à rendre les parcelles plus lisibles avec une intervention moins directe dans le script, et obtient généralement le plus de kilométrage pour traiter les pandas
dataframes
Par exemple
import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
n = 100
x = np.linspace(0,2,n)
y1 = np.sin(2*np.pi*x)
y2 = np.sin(4*np.pi*x)
y3 = np.sin(6*np.pi*x)
df = pd.DataFrame(np.c_[y1, y2, y3], index=x)
ax = sns.lineplot(data=df)
plt.show()
les rendements
Pour ce qui est de définir les styles comme vous le souhaitez pour les variables que vous essayez de montrer, je ne sais pas trop comment les gérer.