为了账号安全,请及时绑定邮箱和手机立即绑定

如何平滑熊猫/matplotlib 线图?

如何平滑熊猫/matplotlib 线图?

慕标琳琳 2022-10-25 15:28:31
我在许多商店有以下 df,每周花费:             shop1    shop2    shop3    shop4    shop5    shop6    shop7  \date_week                                                                  2          4328.85  5058.17  3028.68  2513.28  4204.10  1898.26  2209.75   3          5472.00  5085.59  3874.51  1951.60  2984.71  1416.40  1199.42   4          4665.53  4264.05  2781.70  2958.25  4593.46  2365.88  2079.73   5          5769.36  3460.79  3072.47  1866.19  3803.12  2166.84  1716.71   6          6267.00  4033.58  4053.70  2215.04  3991.31  2382.02  1974.92   7          5436.83  4402.83  3225.98  1761.87  4202.22  2430.71  3091.33   8          4850.43  4900.68  3176.00  3280.95  3483.53  4115.09  2594.01   9          6782.88  3800.03  3865.65  2221.43  4116.28  2638.28  2321.55   10         6248.18  4096.60  5186.52  3224.96  3614.24  2541.00  2708.36   11         4505.18  2889.33  2937.74  2418.34  5565.57  1570.55  1371.54   12         3115.26  1216.82  1759.49  2559.81  1403.61  1550.77   478.34   13         4561.82   827.16  4661.51  3197.90  1515.63  1688.57   247.25                shop8    shop9  date_week                    2          3578.81  3134.39  3          4625.10  2676.20  4          3417.16  3870.00  5          3980.78  3439.60  6          3899.42  4192.41  7          4190.60  3989.00  8          4786.40  3484.51  9          6433.02  3474.66  10         4414.19  3809.20  11         3590.10  3414.50  12         4297.57  2094.00  13         3963.27   871.25  如果我将这些绘制成线图或“意大利面条图”,效果很好。目标是查看过去三个月内 9 家商店的每周销售额趋势。但看起来有点乱:newgraph.plot()我查看了类似的问题,例如这个使用的问题,df.interpolate()但看起来我需要首先在其中缺少值。这个答案似乎需要一个时间序列。有没有另一种方法来平滑线条?如果这些值不再完全准确并不重要,一些插值就可以了。我感兴趣的只是过去几周的趋势。我也尝试过logy=True让plot()线条平静一点的方法,但没有帮助。
查看完整描述

1 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

您可以通过绘制过去几周的回归线来显示趋势,可能与实际数据分开,因为该图已经如此拥挤。我会使用 seaborn,因为它具有方便的regplot()功能:


import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

sns.set()


df.plot(figsize=[12, 10], style='--')

plt.xlim(2, 18)


last4 = df[len(df)-4:]


plt.gca().set_prop_cycle(None)

for shop in df.columns:

    sns.regplot(last4.index + 4, shop, data=last4, ci=None, scatter=False)

plt.ylabel(None)

plt.xticks(list(df.index)+[14, 17], labels=list(df.index)+[10, 13]);

//img1.sycdn.imooc.com//635790500001baf207190575.jpg

查看完整回答
反对 回复 2022-10-25
  • 1 回答
  • 0 关注
  • 65 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信