Étant donné le bloc de données ci-dessous:
import pandas as pd
df = pd.DataFrame({
"n_index": list(range(5)) * 2,
"logic": [True] * 5 + [False] * 5,
"value": list(range(5)) + list(range(5, 10))
})
J'aimerais utiliser la couleur et uniquement la couleur pour distinguer logic
dans un tracé de ligne et marquer des points sur value
s. Plus précisément, c'est ma sortie souhaitée (tracée par R ggplot2 ):
ggplot(aes(x = n_index, y = value, color = logic), data = df) + geom_line() + geom_point()
J'ai essayé de faire la même chose avec seaborn.lineplot
, et j'ai spécifié markers=True
mais il n'y avait pas de marqueur:
import seaborn as sns
sns.set()
sns.lineplot(x="n_index", y="value", hue="logic", markers=True, data=df)
J'ai ensuite essayé d'ajouter style="logic"
dans le code, maintenant les marqueurs sont apparus:
sns.lineplot(x="n_index", y="value", hue="logic", style="logic", markers=True, data=df)
J'ai aussi essayé de forcer les marqueurs à être dans le même style:
sns.lineplot(x="n_index", y="value", hue="logic", style="logic", markers=["o", "o"], data=df)
Il semble que je dois spécifier style
avant de pouvoir avoir des marqueurs. Cependant, cela provoque une sortie de tracé indésirable car je ne veux pas utiliser deux dimensions esthétiques sur une dimension de données. Cela viole les principes de la cartographie esthétique.
Est-il possible que les lignes et les points soient tous dans le même style mais dans des couleurs différentes avec seaborn
ou Python? (seaborn
est préférable - Je n'aime pas la façon de boucler de matplotlib
.)
Vous pouvez directement utiliser pandas pour le traçage.
pandas via groupby
fig, ax = plt.subplots()
df.groupby("logic").plot(x="n_index", y="value", marker="o", ax=ax)
ax.legend(["False","True"])
L'inconvénient serait que la légende doit être créée manuellement.
pandas via pivot
df.pivot_table("value", "n_index", "logic").plot(marker="o")
tracé de ligne marin
Pour le tracé de ligne né en mer, il semble qu'un seul marqueur soit suffisant pour obtenir le résultat souhaité.
sns.lineplot(x="n_index", y="value", hue="logic", data=df, marker="o")
Vous devez définir le paramètre dashes
sur False
spécifier également le style de la grille sur "darkgrid"
:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.DataFrame({
"n_index": list(range(5)) * 2,
"logic": [True] * 5 + [False] * 5,
"value": list(range(5)) + list(range(5, 10))
})
sns.set_style("darkgrid")
sns.lineplot(x="n_index", dashes=False, y="value", hue="logic", style="logic", markers=["o", "o"], data=df)
plt.show()