社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

从零开始学Python-matplotlib系列(V):

EasyCharts • 7 年前 • 824 次点击  

前言


       我们接着上一期matplotlib绘图内容,讲解一下关于折线图的绘制,折线图一般是用来表示某个数值变量随着时间的推移而形成的趋势,这种图还是比较常见的,如经济走势图、销售波动图、PV监控图等。在Python的matplotlib模块中,我们可以调用plot函数就能实现折线图的绘制了,先来看看这个函数的一些参数含义。

plot函数的参数解读


       matplotlib模块中plot函数语法及参数含义:

plt.hist(x,y,linestyle,
        linewidth,color,marker,
        markersize,markeredgecolor,
        markerfactcolor,label,alpha)
  • x:指定折线图的x轴数据;

  • y:指定折线图的y轴数据;

  • linestyle:指定折线的类型,可以是实线、虚线、点虚线、点点线等,默认文实线;

  • linewidth:指定折线的宽度

  • marker:可以为折线图添加点,该参数是设置点的形状;

  • markersize:设置点的大小;

  • markeredgecolor:设置点的边框色;

  • markerfactcolor:设置点的填充色;

  • label:为折线图添加标签,类似于图例的作用;


一元折线图的绘制


案例:每天进步一点点2015公众号文章阅读人数

# 导入模块
import pandas as pd
import matplotlib.pyplot as plt

# 设置绘图风格
plt.style.use('ggplot')
# 设置中文编码和负号的正常显示
plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'
plt.rcParams['axes.unicode_minus'] = False

# 读取需要绘图的数据
article_reading = pd.read_excel('wechart.xlsx')
# 取出8月份至9月28日的数据
sub_data = article_reading.loc[article_reading.date >= '2017-08-01' ,:]

# 设置图框的大小
fig = plt.figure(figsize=(10,6))
# 绘图
plt.plot(sub_data.date, # x轴数据         sub_data.article_reading_cnts, # y轴数据         linestyle = '-', # 折线类型         linewidth = 2, # 折线宽度         color = 'steelblue', # 折线颜色         marker = 'o', # 点的形状         markersize = 6, # 点的大小         markeredgecolor='black', # 点的边框色         markerfacecolor='brown') # 点的填充色

# 添加标题和坐标轴标签
plt.title('公众号每天阅读人数趋势图') plt.xlabel('日期') plt.ylabel('人数')

# 剔除图框上边界和右边界的刻度
plt.tick_params(top = 'off', right = 'off')

# 为了避免x轴日期刻度标签的重叠,设置x轴刻度自动展现,并且45度倾斜
fig.autofmt_xdate(rotation = 45)

# 显示图形
plt.show()

       由于x轴是日期型数据,当数据量一多的时候,就会导致 刻度标签的重叠或拥挤,为了防止重叠的产生,我们需要让日期型的x轴刻度标签自动展现,从而避免重叠的现象。下面两幅图是对比自动刻度标签的前后变化:


       可能你并不满足这样的刻度标签展现形式,你想以个性化的展现方式,如“YYYY-MM-DD”的显示方式,同时又想以固定的几天作为间隔,这样的设置又该如何实现?其实非常的简单,只需要在上面代码的基础上添加几行代码就可以轻松搞定。

一元折线图的绘制—图形优化


# 导入模块
import matplotlib as mpl

# 设置图框的大小
fig = plt.figure(figsize=(10,6))
# 绘图
plt.plot(sub_data.date, # x轴数据         sub_data.article_reading_cnts, # y轴数据         linestyle = '-', # 折线类型         linewidth = 2, # 折线宽度         color = 'steelblue', # 折线颜色         marker = 'o', # 点的形状         markersize = 6, # 点的大小         markeredgecolor='black', # 点的边框色         markerfacecolor='steelblue') # 点的填充色

# 添加标题和坐标轴标签
plt.title('公众号每天阅读人数趋势图') plt.xlabel('日期') plt.ylabel('人数')

# 剔除图框上边界和右边界的刻度
plt.tick_params(top = 'off', right = 'off')

# 获取图的坐标信息
ax = plt.gca()
# 设置日期的显示格式  
date_format = mpl.dates.DateFormatter("%Y-%m-%d")   ax.xaxis.set_major_formatter(date_format) # 设置x轴显示多少个日期刻度
#xlocator = mpl.ticker.LinearLocator(10)
# 设置x轴每个刻度的间隔天数
xlocator = mpl.ticker.MultipleLocator(5) ax.xaxis.set_major_locator(xlocator)

# 为了避免x轴日期刻度标签的重叠,设置x轴刻度自动展现,并且45度倾斜
fig.autofmt_xdate(rotation = 45)

# 显示图形
plt.show()

多元折线图的绘制


       如果你需要在一张图形中画上两条折线图,也很简单,只需要在代码中写入两次plot函数即可,其他都不需要改动了。具体可以参考下面的代码逻辑:

# 设置图框的大小
fig = plt.figure(figsize=(10,6))

# 绘图--阅读人数趋势
plt.plot(sub_data.date, # x轴数据         sub_data.article_reading_cnts, # y轴数据         linestyle = '-', # 折线类型         linewidth = 2, # 折线宽度         color = 'steelblue', # 折线颜色         marker = 'o', # 点的形状         markersize = 6, # 点的大小         markeredgecolor='black', # 点的边框色         markerfacecolor='steelblue', # 点的填充色         label = '阅读人数') # 添加标签

# 绘图--阅读人次趋势
plt.plot(sub_data.date, # x轴数据         sub_data.article_reading_times, # y轴数据         linestyle = '-', # 折线类型         linewidth = 2, # 折线宽度         color = '#ff9999', # 折线颜色         marker = 'o', # 点的形状         markersize = 6, # 点的大小         markeredgecolor='black', # 点的边框色         markerfacecolor='#ff9999', # 点的填充色         label = '阅读人次') # 添加标签

# 添加标题和坐标轴标签
plt.title('公众号每天阅读人数和人次趋势图') plt.xlabel('日期') plt.ylabel('人数')

# 剔除图框上边界和右边界的刻度
plt.tick_params(top = 'off', right = 'off')

# 获取图的坐标信息
ax = plt.gca()
# 设置日期的显示格式  
date_format = mpl.dates.DateFormatter('%m-%d')   ax.xaxis.set_major_formatter(date_format) # 设置x轴显示多少个日期刻度
#xlocator = mpl.ticker.LinearLocator(10)
# 设置x轴每个刻度的间隔天数
xlocator = mpl.ticker.MultipleLocator(3) ax.xaxis.set_major_locator(xlocator)

# 为了避免x轴日期刻度标签的重叠,设置x轴刻度自动展现,并且45度倾斜
fig.autofmt_xdate(rotation = 45)

# 显示图例
plt.legend()
# 显示图形
plt.show()

两条折线图很完美的展现在一张图中,公众号的阅读人数与人次趋势完全一致,而且具有一定的周期性,即过几天就会有一个大幅上升的波动,这个主要是由于双休日的时候,时间比较空闲,就可以更新并推送文章了。

结语


       OK,今天关于Pyhton绘制折线图的讲解就到此结束,如果你感兴趣,不妨和我一起学习与交流,同时也欢迎各位朋友继续转发与分享,让系统的知识不断的扩散出去。下一期我们将推送散点图的绘制。文中相关的Python脚本和PDF版本已存放到百度云盘,可以通过下面的链接获取:

链接: https://pan.baidu.com/s/1geX2RiN 密码: wnr3

Python Seaborn (Ⅰ) 艺术化的图表控制

Python Seaborn (Ⅱ) 斑驳陆离的调色板

Python Seaborn (Ⅲ) 分布数据集的可视化

Python Seaborn (Ⅳ) 线性关系的可视化

Python Seaborn (Ⅴ) 分类数据的绘制

10分钟python seaborn绘图入门 (Ⅱ): barplot 与 countplot

10 分钟 python seaborn 绘图入门 (Ⅳ): 回归模型 lmplot

从零开始学Python-matplotlib系列(I):条形图

从零开始学Python-matplotlib系列(II):饼图

从零开始学Python-matplotlib系列(III):箱线图

从零开始学Python-matplotlib系列(IV):直方图


如需转载请联系EasyCharts团队!

微信后台回复“转载”即可!



【书籍推荐】《Excel 数据之美--科学图表与商业图表的绘制》

【手册获取】国内首款-数据可视化参考手册:专业绘图必备

【必备插件】  EasyCharts -- Excel图表插件

【网易云课堂】  Excel 商业图表修炼秘笈之基础篇



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/bBDrJ3tsGA
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/4050
 
824 次点击