[英]plot multiple lines in seaborn lineplot
我正在嘗試使用 seaborn 與以下數據 plot 線圖:
model K precision recall f1
modelX 5 0.70 0.36 0.48
modelX 10 0.62 0.62 0.62
modelX 20 0.39 0.77 0.51
ModelY 5 0.73 0.37 0.5
ModelY 10 0.64 0.64 0.64
ModelY 20 0.4 0.8 0.5
K
代表 x 軸, precision
、 recall
和f1
應該是 y 軸的值。 理想情況下,每個 model 的顏色不同,並且 y 值有不同的線 styles。
我怎么做?
IMO,在單個 plot 上有點亂,但這里是 go。 您可以使用默認類別顏色圖之一和字典為每個 model 獲取單一顏色。 您可以分別使用groupby
到 plot 每個 model 並且知道每個有 3 行我們可以計划循環線條樣式以實現每列的不同線條樣式。
默認圖例將是總垃圾,因此我們可以自己構建它以指示每種顏色代表什么 model 以及每次測量使用什么線型。
import matplotlib.pyplot as plt
from matplotlib.patches import Patch
from matplotlib.lines import Line2D
colors = dict(zip(df.model.unique(), plt.cm.tab10.colors))
linestyles = ["-", "--", "-."]
ycols = ['precision', 'recall', 'f1']
# Construct legend ourself
legend_elements = ([Patch(facecolor=color, label=model)
for model,color in colors.items()]
+ [Line2D((0,1),(0,0), color='black', linestyle=linestyle, label=col)
for linestyle,col in zip(linestyles, ycols)])
fix, ax = plt.subplots()
ax.set_prop_cycle(plt.cycler('linestyle', linestyles))
for model, gp in df.groupby('model'):
gp.plot(x='K', y=ycols,
ax=ax,
color=colors[model],
legend=False)
ax.legend(handles=legend_elements, bbox_to_anchor=(1,1))
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.