如何使用 seaborn 创建多线图?

新手上路,请多包涵

我正在尝试使用 Seaborn 使我的情节在视觉上比 matplotlib 更好。我有一个数据集,其中有一列“年”,我想在 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)

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

原文由 SSPdude 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 560
2 个回答

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 返回的默认列名称,可以根据您的喜好进行调整。)

原文由 dnswlt 发布,翻译遵循 CC BY-SA 4.0 许可协议

这个:

 sns.lineplot(data=data_preproc)

会做你想做的。

原文由 WolvhLorien 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题