绘制折线图的几个小技巧

还没关注?

640?wx_fmt=png

快动动手指!

前言


折线图通常是用来表达某个数值指标的波动特征,表现的是一种时间维度下的变化。那么问题来了,读者在使用Python绘制时间维度的折线图时是否遇到过这样的问题:怎么让时间轴表现的不拥挤,又能够友好地呈现呢?就如下图的方式:

640?wx_fmt=png

本期我们就来聊聊Python中关于时间轴的几种处理办法,包括如何控制时间轴呈现的刻度个数、刻度间隔和刻度标签的旋转

语法介绍


在Python中绘制折线图,需要使用matplotlib模块中的plot函数实现,该函数的具体语法如下:

plt.plot(x, y, linestyle, linewidth, color, marker,
        markersize, markeredgecolor, markerfactcolor,
        markeredgewidth, label, alpha)
x:指定折线图的x轴数据;
y:指定折线图的y轴数据;
linestyle:指定折线的类型,可以是实线、虚线、点虚线、点点线等,默认文实线;
linewidth:指定折线的宽度
marker:可以为折线图添加点,该参数是设置点的形状;
markersize:设置点的大小;
markeredgecolor:设置点的边框色;
markerfactcolor:设置点的填充色;
markeredgewidth:设置点的边框宽度
label:为折线图添加标签,类似于图例的作用;

刻度个数的控制


本案例所使用的数据是2018年9月21日至2018年12月21日上海空气质量指数,数据来源于2345天气网。首先将该数据读入到Python环境中,并检查数据的数据类型,是否适合绘制折线图

# 导入第三方包import pandas as pd# 数据读取AQI = pd.read_excel(r'C:\Users\Administrator\Desktop\AQI.xlsx')# 查看变量的数据类型AQI.dtypes

640?wx_fmt=png

如上结果所示,日期变量Date为字符型,不能直接用来绘制图形,需要将其转换为日期型。

# 数据类型转换AQI.Date = pd.to_datetime(AQI.Date)

接下来基于类型转换后的数据,利用plot函数绘制一个不做任何修饰的折线图:

# 导入第三方模块import matplotlib.pyplot as plt# 解决中文乱码问题plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']# 绘制折线图plt.plot(AQI.Date, # x轴数据
         AQI.AQI, # y轴数据
         linestyle = '-', # 折线类型
         linewidth = 2, # 折线宽度
         color = 'steelblue', # 折线颜色
         marker = 'o', # 折线图中添加圆点
         markersize = 6, # 点的大小
         markeredgecolor='black', # 点的边框色
         markerfacecolor='brown') # 点的填充色# 添加y轴标签plt.ylabel('AQI')# 添加图形标题plt.title('近3个月的空气质量指数')# 显示图形plt.show()

640?wx_fmt=png

如上图所示,图形中的x轴是非常糟糕的重叠的几乎看不清。必须要对轴作处理,否则无法使用。利用Python对日期型的轴作处理同样非常简单,只需要添加几行关于轴设置的代码即可:

# 导入模块,用于日期刻度的修改import matplotlib as mpl

plt.plot(AQI.Date, AQI.AQI, linestyle = '-', 
         linewidth = 2, color = 'steelblue', 
         marker = 'o', markersize = 6, 
         markeredgecolor='black', 
         markerfacecolor='brown') 

plt.ylabel('AQI')
plt.title('近3个月的空气质量指数')# 获取图的坐标信息ax = plt.gca()# 设置日期的显示格式 (即“月-日”)date_format = mpl.dates.DateFormatter("%m-%d")  
ax.xaxis.set_major_formatter(date_format) 

# 控制x轴显示的日期个数(如10个)xlocator = mpl.ticker.LinearLocator(10)
ax.xaxis.set_major_locator(xlocator)
plt.show()

640?wx_fmt=png

如上图所示,我们在原有代码的基础上做了两方面的修改,一个是将日期呈现为“月-日”的格式,这样可以缩短刻度标签;另一个是我们控制了x轴刻度标签的个数(如图中呈现了10个刻度值)。

刻度间隔的控制


除了利用上面的方法控制刻度标签的个数,还可以设置刻度标签之间的固定间隔,如7天或两周等。具体代码如下:

plt.plot(AQI.Date, AQI.AQI, linestyle = '-', 
         linewidth = 2, color = 'steelblue', 
         marker = 'o', markersize = 6, 
         markeredgecolor='black', 
         markerfacecolor='brown') 

plt.ylabel('AQI')
plt.title('近3个月的空气质量指数')

ax = plt.gca()  
date_format = mpl.dates.DateFormatter("%m-%d")  
ax.xaxis.set_major_formatter(date_format) 

# 控制x轴显示日期的间隔天数(如一周7天)xlocator = mpl.ticker.MultipleLocator(7)
ax.xaxis.set_major_locator(xlocator)
plt.show()

640?wx_fmt=png

如上图所示,标签值之间形成了固定的间隔,即7天。但是还是存在重叠或拥挤问题,解决的办法有两种,一个是拉长间隔天数,另一个是将刻度标签旋转30度或45度

刻度标签的旋转


plt.plot(AQI.Date, AQI.AQI, linestyle = '-', 
         linewidth = 2, color = 'steelblue', 
         marker = 'o', markersize = 6, 
         markeredgecolor='black', 
         markerfacecolor='brown') 

plt.ylabel('AQI')
plt.title('近3个月的空气质量指数')

ax = plt.gca()  
date_format = mpl.dates.DateFormatter("%m-%d")  
ax.xaxis.set_major_formatter(date_format) 

# 控制x轴显示日期的间隔天数(如一周7天)xlocator = mpl.ticker.MultipleLocator(7)
ax.xaxis.set_major_locator(xlocator)# 为了避免x轴刻度标签的紧凑,将刻度标签旋转45度plt.xticks(rotation=45)
plt.show()

640?wx_fmt=png

如上图所示,问题得到了完美的解决。在不修改间隔天数的情况下,简单的旋转刻度标签的角度,就可以解决问题。

最后,读者也可以查看我的新书《从零开始学Python数据分析与挖掘》,书中有更多关于Python可视化的内容和技巧,欢迎读者的选购和提议。

数据源和代码的下载地址:

链接:https://pan.baidu.com/s/14Md9iswauN35rWuCd19ceg 

提取码:edq8 

结语


OK,关于折线图的绘制技巧就分享到这里,如果你有任何问题欢迎在公众号的留言区域表达你的疑问。同时,也欢迎各位朋友继续转发与分享文中的内容,让更多的人学习和进步。

每天进步一点点:数据分析1480

640?wx_fmt=png

长按扫码关注我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sim1480

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值