首页 > 其他 > 详细

使用matplotlib绘制折线图

时间:2020-06-16 16:52:37      阅读:128      评论:0      收藏:0      [点我收藏+]
 1 """
 2 绘制折线图:
 3 对2019年9月每日销售.xlsx绘制折线图
 4 timedelta:
 5 now = datetime.datetime.now() # 2020-06-16 15:16:37.490148
 6 print(now - datetime.timedelta(hours=3)) # 2020-06-16 12:16:37.490148
 7 print(now + datetime.timedelta(hours=-3)) # 2020-06-16 12:16:37.490148
 8 print(datetime.datetime(2018, 1, 20, 8, 14, 45, 545000)) # 2018-01-20 08:14:45.545000
 9 
10 """
11 
12 import pandas as pd
13 import matplotlib.pyplot as plt
14 import datetime
15 from datetime import timedelta
16 def plot_line():
17     #正常显示中文标签
18     plt.rcParams[font.sans-serif] = [SimHei]
19     #正常显示负号
20     plt.rcParams[axes.unicode_minus] = False
21 
22     # 读取每日销售数据:表结构,日期,实际销量
23     df = pd.read_excel(./data/2019年9月每日销售.xlsx) # 默认header=0
24 
25     #定义画图的数据
26     x = df.日期
27     y = df.实际销量
28 
29     # 定义颜色
30     color1 = #0085c3
31     color2 = #7ab800
32     color3 = #dc5034
33 
34     # 设置图像大小
35     plt.figure(figsize=(10,8))
36     plt.subplot(111) # 增加一个子图
37 
38     # 绘制折线图
39     plt.plot(x,y,marker = o,color=color1,label=实际销量)
40 
41     # 标注最大值:text(x,y,s...),向(x,y)位置添加s文本
42     plt.text(x[y.idxmax()]+timedelta(hours=-12),y.max()+1,y.max(),color = color1,fontsize=15)
43     print(y.idxmax()) # y 的最大位置的索引 29
44     print(x[y.idxmax()]) # 2019-09-30 00:00:00
45     print(x[y.idxmax()]+timedelta(hours=-12)) # 2019-09-29 12:00:00
46     # print(y.max()+1) # 将文本写在最大值的上面一格
47 
48     # 标注最小值
49     plt.text(x[y.idxmin()]+timedelta(hours=-9),y.min()-1,y.min(),color=color1,fontsize=15)
50 
51     # 7天移动平均
52     y2 = y.rolling(7).mean() # 从那一天算起,往后数7天
53     # print(y2)
54 
55     # 绘制趋势线
56     plt.plot(x, y2, ls=--, color=color2, label=7 天移动平均)
57 
58     #绘制平均值线
59     plt.hlines(y.mean(), x[0], x[-1:],linestyles=-., colors=color3)
60     # print(y.mean()) # 计算的是实际销量的平均值
61     # print(x[0]) # 2019-09-01 00:00:00
62     # print(x[-1:]) # 29   2019-09-30  29:行号,2019-09-30:日期
63 
64     # 标注平均值
65     plt.text(x[-1:]+timedelta(days=-7.5), y.mean()-2,平均值:  + str(round(y.mean(),1)),color=color3, fontsize=15)
66 
67     """
68     标注特殊事件:
69     annotate(s=‘str‘ ,xy=(x,y) ,xytext=(l1,l2) ,..)
70     s:注释文本内容,
71     xy:被注释的坐标点
72     xytext:注释文字的坐标位置 
73     """
74     plt.annotate(中秋节, xy=(x[y.idxmin()], y.min()), color=color1,
75      xytext=(x[y.idxmin()]+timedelta(days=1.5), y.min()-2),
76      arrowprops=dict(arrowstyle=->, color=color1), fontsize=15)
77     plt.annotate(打折促销, xy=(x[y.idxmax()], y.max()), color=color1,
78      xytext=(x[y.idxmax()]+timedelta(days=-5), y.max()+2),
79      arrowprops=dict(arrowstyle=->, color=color1), fontsize=15)
80 
81     # 设置?格线
82     plt.grid(ls=:, color=gray, alpha=0.6)
83 
84     # 设置图例的位置和??
85     plt.legend(loc=upper left, fontsize=12)
86 
87     # 设置坐标轴标签的?度和??
88     plt.xticks(rotation=90, fontsize=12) # x轴的标签,竖着显示
89     plt.yticks(fontsize=12)
90 
91     # 设置 y 轴的刻度范围
92     plt.ylim(0, y.max()+5)
93 
94     plt.title(2019年9月每日销售变化趋势, fontsize=25) # 添加标题
95     plt.show() # 将图显示出来
96 
97 
98 if __name__ == __main__:
99     plot_line()

结果:

技术分享图片

 

部分数据展示如下:

技术分享图片

 

 

 

使用matplotlib绘制折线图

原文:https://www.cnblogs.com/shuangcao/p/13141286.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!