繁体   English   中英

如何使用seaborn创建多线图?

[英]How do I create a multiline plot using seaborn?

我正在尝试Seaborn使我的情节在视觉上比matplotlib更好。 我有一个数据集,其中有一个'Year'列,我希望在X轴上绘制,4列在Y轴上使用不同颜色的线表示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)

但是这种方式我没有在情节中得到一个图例来显示哪条彩色线对应于什么。 我尝试检查文档但找不到合适的方法来执行此操作。

查看文档

sns.lineplot(x="Year", y="signal", hue="label", data=data_preproc)

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

您也可以使用matplotlib.pyplot 如果你导入seaborn ,大部分改进的设计也用于“常规”matplotlib图。 Seaborn真的是“只是”方法的集合,可以方便地将数据和绘图参数提供给matplotlib。

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()})

获得具有四条线的单个图,每个测量类型一条

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

(注意'value'和'variable'是由melt返回的默认列名,可以根据自己的喜好进行调整。)

这个:

sns.lineplot(data=data_preproc)

会做你想做的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM