最近pythonで結果のプロットにはseabornを使ってます。
手軽にきれいなグラフを書けて重宝するのですが、pandasと密結合なので、seaborn wayに従わないと割と簡単なことができなかったりします。
ということで、サクッと破線プロットするのができなかったのでメモ。
とりあえずこうすればいいというコード
seaborn.lineplot(
data=data, x="x", y="y",
style="label", # labelによってstyleを変えるよ、とする。これがないとdashesが効かない
hue="label", # labelによって色を変えるよ
dashes=[(2, 2)] * len(data["label"].value_counts()) # labelの種類数分だけ破線スタイル(2,2)を用意
)
[{x: 0, y:1, label: "cos"} ... {x: pi, y:-1, label: "cos"}]
みたいなデータを仮定してます。
実行コード全体はgistにうpしました
ポイント
hueとstyleは両方設定してもいい
ちなみにdashesを設定しないでhueとstyleに両方labelを設定すると
このように、色もスタイルも違う結果になります
dashesを機能させるためにはstyleを設定しなければいけない
"label毎にstyleを変えるが、そのstyleは両方一緒だよ"ってコードにしなきゃいけないってことですね。面倒。dashes=(2,2)とかしたらすべての線を破線にしてくれればいいのに。
参考URL
-
https://stackoverflow.com/questions/51963725/how-to-plot-a-dashed-line-on-seaborn-lineplot
- ラベルのついてない単なる二次元データのときの解決例はこの回答のとおりだったのですが、今回はラベル付きのDataFrameでやりたかったので苦労した