如何平滑熊猫/matplotlib 线图?

我在许多商店有以下 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()

http://img4.mukewang.com/6357903b0001b78409910490.jpg

我查看了类似的问题,例如这个使用的问题,df.interpolate()但看起来我需要首先在其中缺少值。这个答案似乎需要一个时间序列。

有没有另一种方法来平滑线条?

如果这些值不再完全准确并不重要,一些插值就可以了。我感兴趣的只是过去几周的趋势。我也尝试过logy=Trueplot()线条平静一点的方法,但没有帮助。


慕标琳琳
浏览 66回答 1
1回答

阿晨1998

您可以通过绘制过去几周的回归线来显示趋势,可能与实际数据分开,因为该图已经如此拥挤。我会使用 seaborn,因为它具有方便的regplot()功能:import pandas as pdimport matplotlib.pyplot as pltimport seaborn as snssns.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]);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python