簡體   English   中英

plot seaborn 線圖中的多條線

[英]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 軸, precisionrecallf1應該是 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM