首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >画了1000次折线图后,我总结出一个套路……

画了1000次折线图后,我总结出一个套路……

作者头像
朱小五
发布于 2020-03-17 10:20:55
发布于 2020-03-17 10:20:55
2.6K00
代码可运行
举报
文章被收录于专栏:凹凸玩数据凹凸玩数据
运行总次数:0
代码可运行

每晚九点,我们准时相约

大家好,我是朱小五

在我们从事数据分析工作中,折线图是最常用的图形之一。

一位资深的数据分析师,画折线图的次数应该有超过 1000 次了。

说起折线图,很多人都觉得非常简单,不就是一些点连成的线吗?用 Excel 几秒钟就能画出一张折线图。

真的就这么简单吗?

想一想:在普通的折线图中,如何自动地添加一条代表平均值的横线?如何添加一条带箭头的趋势线?如何快速地标注最大值和最小值?如何标注特殊事件?如何对折线图进行数据分析?

下面我们用一个具体的案例,演示折线图的分析过程和画图的方法。

1. 一个案例

根据某公司 2019 年 9 月份每天的销量数据,画出如下一张折线图:

通过观察可以看到,销量每隔几天就有一个波谷,对照日历,发现一个规律:这些销量比较低的日期,都是周末或节假日。

如果理解了业务的周期性,那么在分析数据时,就能排除一些干扰,更快地找到对业务真正有价值的信息。

排除周期性的因素之后,我们观察折线图中的最大值和最小值,看看它们是否在正常范围以内,如果不是的话,那么要分析背后的原因。

比如说,9 月 30 日的销量最高,明显高于平时的正常水平,经过与业务沟通和分析发现,是因为这一天做了打折促销的运营活动。

在折线图中,有一条代表平均值的横线,以及一条带箭头的趋势线,它们有助于对数据整体趋势的把握

从上面的图中可以看出,中秋节放假之后,销量有所上升,结合广告费的投入数据进行分析,计算它们相关系数,发现销量与广告费之间具有比较强的正相关性,也就是说,中秋节之后,销量上升的主要原因,是公司加大了广告费的投入。

通过上面的分析解读,我们知道,折线图能直观地反映出数据随着时间变化的趋势,让数据更容易进行对比,发现数据背后规律性的知识,从而帮助管理者更好地做出决策。

画图不是为了炫技,而是为了提高信息传递的效率。你不妨反思一下自己画过的图,是不是提高了信息传递的效率呢?

2. 画图方法

能画折线图的软件工具有很多,本文采用的是 Python 中的 matplotlib 库。

在 Jupyter Lab 中运行以下 Python 代码,就可以画出上面那张折线图。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from datetime import timedelta

# 正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']

# 正常显示负号
plt.rcParams['axes.unicode_minus'] = False  

# 读取每日销售数据
df = pd.read_excel('./data/2019年9月每日销售.xlsx')

# 定义画图的数据
x = df.日期
y = df.实际销量

# 定义颜色
color1 = '#0085c3'
color2 = '#7ab800'
color3 = '#dc5034'

# 设置图像大小
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111)

# 绘制折线图
ax.plot(x, y, marker='o', color=color1)

# 标注最大值
ax.text(x[y.idxmax()]+timedelta(hours=-12),
        y.max()+1, y.max(),
        color=color1, fontsize=15)

# 标注最小值
ax.text(x[y.idxmin()]+timedelta(hours=-9),
        y.min()-2, y.min(),
        color=color1, fontsize=15)

# 计算 7 天移动平均
y2 = y.rolling(7).mean()

# 绘制趋势线
ax.plot(x, y2, ls='--', color=color2, label='7 天移动平均')

# 绘制箭头
plt.annotate('', xy=(x[-1:], y2[-1:]),
             xytext=(x[-2:-1], y2[-2:-1]),
             arrowprops=dict(arrowstyle='->',
                             color=color2,
                             shrinkB=0))

# 绘制平均值线
ax.hlines(y.mean(), x[0], x[-1:],
          linestyles='-.', colors=color3)

# 标注平均值
ax.text(x[-1:]+timedelta(days=-7.5), y.mean()-2,
        '平均值: ' + str(round(y.mean(),1)),
        color=color3, fontsize=15)

# 标注特殊事件
ax.annotate('中秋节', xy=(x[y.idxmin()], y.min()), color=color1,
             xytext=(x[y.idxmin()]+timedelta(days=1.5), y.min()-2),
             arrowprops=dict(arrowstyle='->', color=color1), fontsize=15)

ax.annotate('打折促销', xy=(x[y.idxmax()], y.max()), color=color1,
             xytext=(x[y.idxmax()]+timedelta(days=-5), y.max()+2),
             arrowprops=dict(arrowstyle='->', color=color1), fontsize=15)

# 设置网格线
ax.grid(ls=':', color='gray', alpha=0.6)

# 设置图例的位置和大小
ax.legend(loc='upper left', fontsize=12)

# 设置坐标轴标签的角度和大小
plt.xticks(rotation=90, fontsize=12)
plt.yticks(fontsize=12)

# 设置 y 轴的刻度范围
ax.set_ylim(0, y.max()+5)

# 设置图表标题
_ = ax.set_title('2019年9月每日销量变化趋势', fontsize=25)

3. 小结

本文用一个案例,演示了折线图的数据分析过程以及画图的方法,并给出了完整的 Python 代码,其中详细注释了代码的主要功能。

你可以把上面的分析思路和方法当成一个套路,并根据实际的分析需求,适当修改 Python 代码中的数据源、颜色、文字等,估计能让你比 90% 的人更懂折线图。

以上,希望对你有所帮助,最好是能够自己动手实践,这就好比要学会游泳,必须得亲自下水。

近期文章,点击图片即可查看

后台回复关键词「进群」,即刻加入读者交流群~

大家还对什么图形感兴趣呢?

朱小五

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 凹凸数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python数据分析--折线图
最近阅读学习了林骥老师的《数据化分析 Python 实战》,书中讲好的技能应该刻意的练习,而不是简单的重复。
MiaoGIS
2022/04/21
1.4K0
Python数据分析--折线图
Matplotlib 绘2D图
Matplotlib 是一个非常简单而又完善的开源绘图库。那么它到底有多简单呢? 基本知识 首先官方文档奉上 下面,我们通过 3 行代码绘制一张简单的折线图。 from matplotlib imp
听城
2018/04/27
2.6K0
Matplotlib 绘2D图
Figure解析
“PDFMV框架是问题-数据-特征-模型-价值五个英文字母的首字母组合而成,它是以问题为导向,数据为驱动,利用特征和模型从数据中学习到知识,以创造价值的系统化过程。”
陆勤_数据人网
2020/04/07
9630
Figure解析
Python进阶之Matplotlib入门(五)
Matplotlib是Python的画图领域使用最广泛的绘图库,它能让使用者很轻松地将数据图形化以及利用它可以画出许多高质量的图像,是用Python画图的必备技能。对于这个教程,大家最好亲自码一遍代码,这样可以更有收获。
HuangWeiAI
2019/11/07
7450
Python进阶之Matplotlib入门(五)
数据可视化 | 手撕 Matplotlib 绘图原理(二)
关于箭头和注释风格的更多介绍与示例,可以在 Matplotlib 的画廊gallery[1]中看到,尤其推荐
数据STUDIO
2021/06/24
1.6K1
使用matplotlib绘制折线图,柱状图,柱线混合图「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/138667.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/02
4.4K0
使用matplotlib绘制折线图,柱状图,柱线混合图「建议收藏」
数据可视化之matplotlib绘制正余弦曲线图
在python里面,数据可视化是python的一个亮点。在python里面,数据可视可以达到什么样的效果,这当然与我们使用的库有关。python常常需要导入库,并不断调用方法,就很像一条流数据可视化的库,有很多,很多都可以后续开发,然后我们调用。了解过pyecharts美观的可视化界面 ,将pyecharts和matplotlib相对比一下。
兰舟千帆
2022/07/16
1.9K0
数据可视化之matplotlib绘制正余弦曲线图
数据可视化:用散点图进行数据分析
导读:散点图的用途有很多,我认为它的核心价值,在于应用相关思维,发现变量之间的关系。
IT阅读排行榜
2020/06/29
1.4K0
数据可视化:用散点图进行数据分析
气象绘图——折线图
本节提要:不满意最开始那一版的折线图教程,所以进行了这一强化版的撰写。主要针对matplotlib中的折线图,对关键字指令升级梳理,希望能帮助新入门的小伙伴。
自学气象人
2023/06/21
6310
气象绘图——折线图
绘图与可视化(1)
提供信息的可视化是数据分析的重要任务之一,从本章开始会比较详细介绍绘图与可视化有关知识,主要用到的库有matplotlib、numpy、pandas和seaborn。
python数据可视化之路
2023/02/23
7270
绘图与可视化(1)
趋势(一)利用python绘制折线图
折线图用于在连续间隔或时间跨度上显示定量数值,最常用来显示趋势和关系(与其他折线组合起来)。折线图既能直观地显示数量随时间的变化趋势,也能展示两个变量的关系。
HsuHeinrich
2024/11/23
4700
趋势(一)利用python绘制折线图
Matplotlib入门
标题中的英文首字母大写比较规范,但在python实际使用中均为小写。 2018年7月30日笔记 作者的集成开发环境是jupyter,Python版本为3.6 建议阅读本文的读者安装anaconda3,里面包含了jupyter、python3.6和matplotlib库 下载链接: https://pan.baidu.com/s/1kKCvpXAlTdRri4lSP6gykA 密码: pygy
潇洒坤
2018/09/10
2.3K0
Matplotlib入门
python数据分析之Matplotlib学习笔记
说到绘图,那必须要有一个画板。Figure作为一个“老画板”,在matlab中经常能看到它的出没,在python中,它的具体语法是什么呢?让我们来看一下。
远方的星
2021/07/31
9380
python数据分析之Matplotlib学习笔记
【Python篇】matplotlib超详细教程-由入门到精通(上篇)
matplotlib 是 Python 中最常用的绘图库之一。它提供了类似于 Matlab 的 API,方便用户创建各种类型的图表。我们主要使用其中的 pyplot 模块,它是绘制图表的核心工具。
半截诗
2024/10/09
3.2K0
【Python篇】matplotlib超详细教程-由入门到精通(上篇)
python 用matplotlib画一个折线图
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
多凡
2019/11/01
1.3K0
Python数据分析--柱状图
最近阅读学习了林骥老师的《数据化分析 Python 实战》,书中讲好的技能应该刻意的练习,而不是简单的重复。
MiaoGIS
2022/04/22
8990
Python数据分析--柱状图
数据可视化详解+代码演练
作者 | Walker 编辑 | 磐石 出品 | 磐创AI技术团队 【磐创AI导读】:本文详细介绍了两个数据可视化工具库并附python演练。欢迎大家点击上方蓝字关注我们的公众号:磐创AI。 我们本篇文章讲的数据可视化是面向开发人员的,是利用python中一些可视化库如:matplotlib或是seaborn通过对数据可视化,来分析数据表格中各维度间的关系或是数据分布的特性,从而有助于我们更好的理解数据,帮助我们进行下一步数据分析或是为数据建模提供方向。本篇文章的方法并非是面向用户做数据展示或面向企业做数据
磐创AI
2018/07/03
1.3K0
显示组成一个图的多个元素的名称的分布。
import numpy as np import matplotlib.pyplot as plt from matplotlib.ticker import AutoMinorLocator, MultipleLocator, FuncFormatter np.random.seed(19680801) X = np.linspace(0.5, 3.5, 100) Y1 = 3+np.cos(X) Y2 = 1+np.cos(1+X/0.75)/2 Y3 = np.random.uniform(Y
裴来凡
2022/05/28
9640
显示组成一个图的多个元素的名称的分布。
超全!40000字 Matplotlib 实战
Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。
公众号机器学习与AI生成创作
2020/09/22
8.3K0
超全!40000字 Matplotlib 实战
Matplotlib 可视化之箭头与标注的高级应用
时间线是按时间顺序显示的事件列表。它通常是一个图形设计,显示一个长条,标有与之平行的日期,通常是同时期的事件。
数据STUDIO
2022/04/11
2K0
Matplotlib 可视化之箭头与标注的高级应用
相关推荐
Python数据分析--折线图
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档