【问题标题】:Seaborn Lineplot incorrectly attempts sort my already sorted dataSeaborn Lineplot 错误地尝试对我已经排序的数据进行排序
【发布时间】:2020-03-11 23:26:22
【问题描述】:

每当我尝试对我的 DataFrame 进行线图绘制时,seaborn 默认决定它决定它没有排序,从左到右绘制我的数据而不是从开始到结束,它的索引方式,导致奇怪的 zig在其他平滑的数据中曲折。

这是我的DataFrame的截图

这是要绘制的代码:

plt.figure(figsize=(16,6))
sns.lineplot(x ='cluster' , y = 'count', data= tmp, sort = False)

这是结果图截图:

我的问题是如何避免这种情况并有一个从上到下的平滑图

【问题讨论】:

  • 你有什么问题?
  • @ImportanceOfBeingErnest 我刚刚编辑了这个问题!抱歉没有说清楚
  • 您在数据框中显示的几行似乎与绘制线的路径坐标准确对应。您希望图表看起来像什么?你试过绘制df[df.cluster.argsort()]吗?
  • 你的集群名称是整数,所以在绘图时是排序的。您可以将集群名称转换为字符串或针对索引进行绘图。但我不确定如何在 x 轴上命名 600 多个集群。
  • 我的 DataFrame 已经排序,这就是我设置 Sort = False 的原因,即使它设置为 True,它也会给出相同的结果。

标签: python pandas seaborn


【解决方案1】:

如果是整数,Seaborn 会自动在 X 轴上对值进行排序,因此解决方案是使用 X 轴中的索引并保持将排序标志设置为其默认值

plt.figure(figsize=(16,6))
sns.lineplot(x = tmp.index , y = 'cumsum', data= tmp) 

【讨论】:

  • 我认为这是一种误解。 Seaborn 不会对任何内容进行排序,除非通过 sort=True 要求这样做。
  • 我的意思是,如果您在 X 轴上绘制整数,它们将按排序显示,而不是在数据框中!
  • 哦,是的,因为默认情况下sort=True
  • 是的,没错!并且在使用索引时,如果您尝试绘制累积总和而不是计数,则可能会遇到问题。假设有三个计数相同的条目[7,8,9],并且在DataFrame中,它们在索引中没有排序,这将导致cumsum行异常!所以我建议在计算 cumsum 之前使用 sort_index(axis = 0) 按索引排序
猜你喜欢
  • 2020-08-22
  • 2020-10-04
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 2017-07-08
  • 1970-01-01
  • 2019-12-27
  • 2021-12-27
相关资源
最近更新 更多