如何使用seaborn创建多线图?

SSP*_*ude 16 python plot dataframe python-3.x seaborn

我正在尝试Seaborn,以使我的绘图在视觉上比matplotlib更好。我有一个数据集,其中有一个“年份”列,我想在X轴上绘制,并在Y轴上使用不同的彩色线绘制4列,分别是A,B,C,D。我试图使用sns.lineplot方法执行此操作,但它只允许在X轴上使用一个变量,在Y轴上使用一个变量。我尝试这样做

sns.lineplot(data_preproc['Year'],data_preproc['A'], err_style=None)
sns.lineplot(data_preproc['Year'],data_preproc['B'], err_style=None)
sns.lineplot(data_preproc['Year'],data_preproc['C'], err_style=None)
sns.lineplot(data_preproc['Year'],data_preproc['D'], err_style=None)
Run Code Online (Sandbox Code Playgroud)

但是这样一来,我就无法在图例中得到图例来显示哪条彩色线对应于什么。我尝试检查文档,但找不到正确的方法来执行此操作。

dns*_*wlt 16

Seaborn支持“长格式”作为输入。将DataFrame从其“宽格式”(每种度量类型一列)转换为长格式(所有度量值一列,用于指示类型的一列)的关键要素pandas.melt。给定data_preproc像您一样的结构,并填充随机值:

num_rows = 20
years = list(range(1990, 1990 + num_rows))
data_preproc = pd.DataFrame({
    'Year': years, 
    'A': np.random.randn(num_rows).cumsum(),
    'B': np.random.randn(num_rows).cumsum(),
    'C': np.random.randn(num_rows).cumsum(),
    'D': np.random.randn(num_rows).cumsum()})
Run Code Online (Sandbox Code Playgroud)

获得一条包含四条线的单一图,每种测量类型一条,

sns.lineplot(x='Year', y='value', hue='variable', 
             data=pd.melt(data_preproc, ['Year']))
Run Code Online (Sandbox Code Playgroud)

(请注意,“值”和“变量”是所返回的默认列名melt,可以根据您的喜好进行调整。)


Ion*_*ons 13

请参阅文档

sns.lineplot(x="Year", y="signal", hue="label", data=data_preproc)
Run Code Online (Sandbox Code Playgroud)

您可能需要以适当的方式重新组织数据框,以使一列用于x数据,一列用于y数据,而另一列保存该数据点的标签。

您也可以使用matplotlib.pyplot。如果导入seaborn,许多改进的设计也将用于“常规” matplotlib图。Seaborn实际上是“只是”一组方法的集合,这些方法可以方便地将数据和绘图参数提供给matplotlib。


Wol*_*ien 9

这个:

sns.lineplot(data=data_preproc)
Run Code Online (Sandbox Code Playgroud)

会做你想做的。

  • 如果您解释了您提供的代码如何回答问题,这将是一个更好的答案。 (2认同)