Skip to main content
 首页 » 编程设计

python之如何使用 seaborn 为每条线绘制带有特定颜色和线型的特定点上的点的线图

2025年05月04日17luoye11

我有以下数据框

import pandas as pd 
 
 
 
 data_tmp = pd.DataFrame({'x': [0,14,28,42,56, 0,14,28,42,56], 
                         'y': [0, 0.003, 0.006, 0.008, 0.001, 0*2, 0.003*2, 0.006*2, 0.008*2, 0.001*2], 
                         'cat': ['A','A','A','A','A','B','B','B','B','B'], 
                         'color': ['#B5D8F0','#B5D8F0','#B5D8F0','#B5D8F0','#B5D8F0','#247AB2','#247AB2','#247AB2','#247AB2','#247AB2'], 
                         'point': [14,14,14,14,14,28,28,28,28,28], 
                         'linestyles':['-','-','-','-','-','--','--','--','--','--']}) 

我想为每个 cat 生成一个具有不同 color 和 linestyles 的线图。但我想为每个 cat 提供特定的 color 和 linestyles,因为它们在 dataframe 中定义。最后,我想用相同的颜色标记每行上的 point。

我只试过:

sns.lineplot(x="x", y="y", hue="cat", data=data_tmp) 
sns.scatterplot(x="point",y="y",hue="cat", data=data_tmp[data_tmp.point==data_tmp.x]) 
plt.show() 

有什么想法吗?

请您参考如下方法:

也许你想直接使用matplotlib,比如

import pandas as pd 
import matplotlib.pyplot as plt 
 
 
df = pd.DataFrame({'x': [0,14,28,42,56, 0,14,28,42,56], 
                   'y': [0, 0.003, 0.006, 0.008, 0.001, 0*2, 0.003*2, 0.006*2, 0.008*2, 0.001*2], 
                   'cat': ['A','A','A','A','A','B','B','B','B','B'],}) 
 
 
d = {"A" : {"color": '#B5D8F0', "markersize":  5, "linestyle": "-"}, 
     "B" : {"color": '#247AB2', "markersize": 10, "linestyle": "--"}} 
 
for n, grp in df.groupby("cat"): 
    plt.plot(grp.x, grp.y, marker="o", label=n, **d[n]) 
 
plt.legend() 
plt.show()