折线的介绍

折线作为数据可视化中不可或缺的基础视觉元素,一直受到我们的高度关注,折线图主要显示数据在一个连续的时间间隔或者时间跨度上的变化。

ab93c0fd2a22a7255753394b8990836d.png

而折线作为基本元素可以延伸出新的图表类型或者元素,比如我们可以将折线下方的空白进行填充,进而完成从线型到面积图的转变。

它的特点是反映事物随时间或有序类别而变化的趋势,由于它在显示趋势上具有独特优势,老海将折线称作图表可视化元素中中“贵族”,而“王者”是当然是条形或者柱形。

fb65db7e79dd26a178fad60a42c57e33.png

在折线图中,数据是递增还是递减、增减的速率、增减的规律(周期性、螺旋性等)、峰值等特征都可以清晰地反映出来。

所以折线图常用来分析数据随时间的变化趋势,也可用来分析多组数据随时间变化的相互作用和相互影响。

折线的应用场景

折线的应用广泛,一般主要会围绕着时间或者连续性的数据展开,从而形成连续的折线形态。

d5d89e12f4a9f40007bfdef65ffd68ef.png

例如:我们可用来分析某类商品或是某几类相关的商品随时间变化的销售情况,从而进一步预测未来的销售情况。在折线图中,一般水平轴(X 轴)用来表示时间的推移,并且间隔相同;而垂直轴(Y 轴)代表不同时刻的数据的大小。

折线的优化

准备工作

db1412dc66a5581ba8dc692691757c83.png
import pandas as pd import numpy as npimport matplotlibimport matplotlib.pyplot as pltimport seaborn as sns%matplotlib inline# 引入pandas、matplotlib、seaborn包import sys# 引入系统模块库import os# 引入文件/目录方法库print(sys.version)print('------------')print(pd.__version__)

设置图表样式

9fbc6df99ebc0f2e78f7288e367f2f70.png
## 初始字体设置,设置好可避免很多麻烦plt.rcParams['font.sans-serif']=['Source Han Sans CN']      # 显示中文不乱码,思源黑体 plt.rcParams['font.size'] = 22                              # 设置图表全局字体大小,后期某个元素的字体大小可以自行调整plt.rcParams['axes.unicode_minus'] = False                  # 显示负数不乱码## 初始化图表大小plt.rcParams['figure.figsize'] = (20.0, 8.0)                # 设置figure_size尺寸## 初始化图表分辨率质量plt.rcParams['savefig.dpi'] = 300                           # 设置图表保存时的像素分辨率plt.rcParams['figure.dpi'] = 300                            # 设置图表绘制时的像素分辨率## 图表的颜色自定义colors = ['#dc2624', '#2b4750', '#45a0a2', '#e87a59',         '#7dcaa9', '#649E7D', '#dc8018', '#C89F91',          '#6c6d6c', '#4f6268', '#c7cccf']plt.rcParams['axes.prop_cycle'] = plt.cycler( color=colors)

设置工作路径

2b3f353eae1f7c04eb10d064bf48b698.png
path = 'D:系列文章'# 自定义文件路径,可以自行设定os.chdir(path)# 设置为该路径为工作路径,一般存放数据源文件

读入数据

520c61aeb0896a20f8722021120d140a.png
Sales_data = pd.read_excel('虚拟演示案例数据.xlsx',                           sheet_name='销售数据表')Sales_data_sum = Sales_data.groupby(['订单日期'])['购买数量'].sum().reset_index()Sales_data_sum

画出折线图

669da45d16ee6baff4a22c677ca19fa6.png
plt.plot( '订单日期', '购买数量',          data=Sales_data_sum,         )sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()

折线的颜色

77a20621bcade254c3161d21f188bff8.png
plt.plot( '订单日期', '购买数量',          data=Sales_data_sum[:100],         color='#dc2624')sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()

折线的透明度

448a0f462f3af0f0f427649df6cd8415.png
plt.plot( '订单日期', '购买数量',          data=Sales_data_sum[:100], # 只画出前100行数据的图像         color='#dc2624',         alpha=0.5)sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()

折线的类型

08c67eff0782ee675fb9e6dbe28bde1a.png
# 列举所有的可用折线类型matplotlib.lines.lineStyles
a84d757aa0dcb0a1bcd3eebf06216271.png
plt.plot( [1,1.1,1,1.1,1], linestyle='-' , linewidth=4)plt.text(1.5, 1.3, "linestyle = '-' ", horizontalalignment='left', size='medium', color='C0', weight='semibold')plt.plot( [2,2.1,2,2.1,2], linestyle='--' , linewidth=4 )plt.text(1.5, 2.3, "linestyle = '--' ", horizontalalignment='left', size='medium', color='C1', weight='semibold')plt.plot( [3,3.1,3,3.1,3], linestyle='-.' , linewidth=4 )plt.text(1.5, 3.3, "linestyle = '-.' ", horizontalalignment='left', size='medium', color='C2', weight='semibold')plt.plot( [4,4.1,4,4.1,4], linestyle=':' , linewidth=4 )plt.text(1.5, 4.3, "linestyle = ':' ", horizontalalignment='left', size='medium', color='C3', weight='semibold')plt.axis('off')plt.show()
94d712277fbf698a85569ebf15a2a941.png
plt.plot( '订单日期', '购买数量',          data=Sales_data_sum[:100],         color='#dc2624',         alpha=0.5,         linestyle='dashed') # 设置线条的类型sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()

折线的宽度

becde79c4b746d7ee41980ad36f6cf84.png
plt.plot( '订单日期', '购买数量',          data=Sales_data_sum[:100],         color='#dc2624',         linewidth=10)sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()

最后给的建议

除了上面的优化方法下,老海最后总结4点折线经验:

  • 减少线条或充分利用颜色区分,不要出现“意大利面图”(过多的线条导致图表很乱可读性很差)
83d70e1522f7d181e8dd59a45c4aae3c.png
  • 优化图形长宽比 (aspect ratio):图形长度与宽度的比例。长宽比的调整对图表呈现的信息结果有很大的影响,一般建议符合黄金比例1:0.618 或者 2:1的比例。
3a572c836bf6d5627a132fc322c9e940.png
  • 不同于条形图,折线图为突出数值的波动变化,折线图的纵坐标轴可以不从0为起点开始。
5f0f112fa7d0e2e8410010194319e816.png
  • 若存在多个不同的度量指标,应避免使用双坐标轴或者都堆在一张图里,我们分成两个图显示或者多个小图标,这样做的效果更好。
d002da3a874b564bd1bc9c49e07a459f.png

OK,今天就到这里。感谢喜欢老海的分享,动动小手转发和关注吧!

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐