一、简介

以下引用自百度百科

Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形 。

通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。

二、流程

1. 明确要研究的问题

2. 选择需要使用什么图形(折线图、直方图……)来呈现

3. 准备相应的数据

4. 绘制图形和完善美化图形

在某些情况下,个人认为还有最后一点,是从图中可以得出什么结论。

以下只是简单的示例,就没有一定按照上面的流程。

三、简单示例

1.折线图

1.1 什么是折线图

以下引用自百度百科

折线图是排列在工作表的列或行中的数据可以绘制到折线图中。折线图可以显示随时间(根据常用比例设置)而变化的连续数据,因此非常适用于显示在相等时间间隔下数据的趋势。

简单来说,折线图可以反映事物的变化情况。

1.2 准备数据

数据来自国家数据,选取了1978年至2017年的研究生招生数研究生毕业生数,下面只列举了部分数据。

2017年 2016年 2015年 2014年 2013年 ...
研究生招生数(万人) 80.6103 66.7064 64.5055 62.1323 61.1381 ...
研究生毕业生数(万人) 57.8045 56.3938 55.1522 53.5863 51.3626 ...
1.3 绘制完善图形

附上代码,看注释吧。

from matplotlib import pyplot as plt
from matplotlib import font_manager # matplotlib默认不支持中文字符,设置中文字体,参数的值为系统字体路径
my_font = font_manager.FontProperties(fname=r"C:\Windows\Fonts\simsun.ttc") # 需要绘制的数据
x = list(range(1978, 2018))
y_recruit = list(reversed(
[80.6103, 66.7064, 64.5055, 62.1323, 61.1381, 58.9673, 56.0168, 53.8177, 51.0953, 44.6422, 41.8612, 39.7925,
36.4831, 32.6286, 26.8925, 20.2611, 16.5197, 12.8484, 9.2225, 7.2508, 6.3749, 5.9398, 5.1053, 5.0864, 4.2145,
3.3439, 2.9679, 2.9649, 2.8569, 3.5645, 3.9017, 4.131, 4.6871, 2.3181, 1.5642, 1.108, 0.9363, 0.3616, 0.811,
1.0708]))
y_graduate = list(reversed(
[57.8045, 56.3938, 55.1522, 53.5863, 51.3626, 48.6455, 42.9994, 38.36, 37.1273, 34.4825, 31.1839, 25.5902, 18.9728,
15.0777, 11.1091, 8.0841, 6.7809, 5.8767, 5.467, 4.7077, 4.6539, 3.9652, 3.1877, 2.8047, 2.8214, 2.5692, 3.2537,
3.544, 3.7232, 4.0838, 2.7603, 1.695, 1.7004, 0.2756, 0.4497, 0.4058, 1.1669, 0.0476, 0.014, 0.0009])) # 设置图形大小,dpi
plt.figure(figsize=(10,6.18),dpi=100) # 绘制第一条折线
plt.plot(x,y_recruit,label="研究生招生数")
# 绘制第二条折线
plt.plot(x,y_graduate,
label="研究生毕业生数", # 图例显示内容
color="orange", # 线条颜色
linewidth=3, # 线宽
linestyle="--") # 线条样式 # 设置x轴刻度,rotation为旋转度数
plt.xticks(x[::2],rotation=45) # 设置图例,prop为设置字体,fontsize为设置字体大小
plt.legend(prop=my_font,fontsize=12) # 绘制网格,alpha为透明度
plt.grid(alpha=0.5) # 添加描述信息,fontproperties为设置字体,fontsize为设置字体大小
plt.xlabel("年份",fontproperties=my_font,fontsize=12)
plt.ylabel("人数(万人)",fontproperties=my_font,fontsize=12)
plt.title("1978年至2017年研究生招生数和研究生毕业生数情况",fontproperties=my_font,fontsize=18) # 显示图形
plt.show()
1.4 绘制图形结果

运行上述代码,结果如下。

2.条形图

2.1 什么是条形图

以下引用自百度百科

条形图(bar chart)是用宽度相同的条形的高度或长短来表示数据多少的图形。条形图可以横置或纵置,纵置时也称为柱形图(column chart)。此外,条形图有简单条形图、复式条形 图等形式。

简单来说,条形图可以直观地反映数据的大小。

2.2 准备数据

数据同样来自国家数据,选取了2009年、2010年和2011年各级各类学校数,具体数据如下。

2009 2010 2011
普通高等学校数(所) 2305 2358 2409
普通中学学校数(所) 70774 68881 67751
高中学校数(所) 14607 14058 13688
初中学校数(所) 56167 54823 54063
职业中学学校数(所) 5805 5273 4856
普通小学学校数(所) 280184 257410 241249
特殊教育学校学校数(所) 1672 1706 1767
学前教育学校数(所) 138209 150420 166750
2.3 绘制完善图形

代码如下:

x = ["普通高等学校数", "普通中学学校数","高中学校数",
"初中学校数","职业中学学校数","普通小学学校数",
"特殊教育学校数","学前教育学校数"]
y_09 = [2305,70774,14607,56167,5805,280184,1672,138209]
y_10 = [2358,68881,14058,54823,5273,257410,1706,150420]
y_11 = [2409,67751,13688,54063,4856,241249,1767,166750] plt.figure(figsize=(10,6.18),dpi=100)
bar_width = 0.25 x_09 = list(range(len(x)))
x_10 = list(i + bar_width for i in range(len(x)))
x_11 = list(i + bar_width * 2 for i in range(len(x))) plt.barh(x_09,y_09,height=bar_width,label="2009年")
plt.barh(x_10,y_10,height=bar_width,label="2010年")
plt.barh(x_11,y_11,height=bar_width,label="2011年") plt.legend(prop=my_font, fontsize=12)
plt.grid(alpha=0.5,linestyle="--")
plt.yticks(x_10,x,fontproperties=my_font)
plt.xlabel("数量(所)",fontproperties=my_font,fontsize=12)
plt.title("2009年、2010年及2011年各级各类学校数情况",fontproperties=my_font,fontsize=18) plt.show()
2.4 绘制图形结果

运行上述代码,结果如下。

3.直方图

3.1 什么是直方图

以下引用自百度百科

直方图(Histogram)又称质量分布图。是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况。

为了构建直方图,第一步是将值的范围分段,即将整个值的范围分成一系列间隔,然后计算每个间隔中有多少值。 这些值通常被指定为连续的,不重叠的变量间隔。 间隔必须相邻,并且通常是(但不是必须的)相等的大小。

3.2 准备数据

数据选用上一篇随笔:爬取豆瓣电影信息中爬取到的电影的时长。去除无效数据后,从下图可以看出总共有2247条数据,最大值为170,最小值为3。

3.3 绘制完善图形

代码如下:

plt.figure(figsize=(10,6.18),dpi=100)

plt.hist(df["running_time"],range(0,171,10),color="#009900")

plt.xticks(range(0,171,10))
plt.yticks(range(0,650,50)) plt.grid(alpha=0.5,linestyle="--") plt.xlabel("时长(分钟)",fontproperties=my_font,fontsize=12)
plt.ylabel("数量", fontproperties=my_font,fontsize=12)
plt.title("电影片长分布情况", fontproperties=my_font,fontsize=18) plt.show()
3.4 绘制图形结果

运行上述代码,结果如下。

四、结语

  • 本文简单举例介绍了matplotlib绘制折线图、条形图和直方图的方法,matplotlib很强大,可以绘制非常多的图形,可以参考https://matplotlib.org/gallery/index.html
  • 如果文中有错误的地方,希望大家指出,我会积极地学习改正。
  • 最后,感谢大家的阅读!

开心一点,人间不值得

matplotlib简单示例的更多相关文章

  1. matplotlib小示例

    matplotlib 画廊  http://matplotlib.org/gallery.html import numpy as np import matplotlib.pyplot as plt ...

  2. Linux下的C Socket编程 -- server端的简单示例

    Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...

  3. C# 构建XML(简单示例)

    C# 构建XML的简单示例: var pars = new Dictionary<string, string> { {"url","https://www. ...

  4. 根据juery CSS点击一个标签弹出一个遮罩层的简单示例

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  5. ACEXML解析XML文件——简单示例程序

    掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...

  6. demo工程的清单文件及activity中api代码简单示例

    第一步注册一个账户,并创建一个应用.获取app ID与 app Key. 第二步下载sdk 第三步新建工程,修改清单文件,导入相关的sdk文件及调用相应的api搞定. 3.1 修改清单文件,主要是加入 ...

  7. spring-servlet.xml简单示例

    spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 <!-- springMVC简单配置 --> <?xml versi ...

  8. SignalR 简单示例

    一.什么是 SignalR ASP.NET SignalR is a library for ASP.NET developers that simplifies the process of add ...

  9. Web API 简单示例

    一.RESTful和Web API Representational State Transfer (REST) is a software architecture style consisting ...

随机推荐

  1. C++:sprintf()的用法(转)

    转:http://blog.csdn.net/masikkk/article/details/5634886 更多:http://blog.csdn.net/zjuwispersure/article ...

  2. NCE2

    1.A private conversation Last week I went to the theatre. I had a very good seat. The play was very ...

  3. 【收集】Python 微优化

    1. 第二种方式可以节省寻找result的append属性的时间, 但会降低代码可读性和可维护性 # The way we're used to seeing it: result.append(&q ...

  4. PHP常用符号和函数

    (转)最近在写PHP程序的时候发现了一些特殊的PHP符号,例如连续小于符号,三个小于符号,eot,eod,echo示例,print示例等,突然间 发现用这么久的PHP了,竟然连PHP的基本符号都没有认 ...

  5. BZOJ2286:[SDOI2011]消耗战(树形DP,虚树)

    Description 在一场战争中,战场由n个岛屿和n-1个桥梁组成,保证每两个岛屿间有且仅有一条路径可达.现在,我军已经侦查到敌军的总部在编号为1的岛屿,而且他们已经没有足够多的能源维系战斗,我军 ...

  6. RANSAC与 最小二乘(LS, Least Squares)拟合直线的效果比较

    代码下载地址: 1.Matlab版本:http://pan.baidu.com/s/1eQIzj3c.进入目录后,请自行定位到该博客的源代码与数据的目录“

  7. 论文笔记 M. Saquib Sarfraz_Pose-Sensitive Embedding_re-ranking_2018_CVPR

    1. 摘要 作者使用一个pose-sensitive-embddding,把姿态的粗糙.精细信息结合在一起应用到模型中. 用一个新的re-ranking方法,不需要重新计算新的ranking列表,是一 ...

  8. python 内置常用函数

    import os def set(o): return set(o) # =={o} def reverseObject(it): it.reverse() return it def sortOb ...

  9. 谈谈我的js学习过程(一)

    1)我为什么要学习JavaScript? 在我立志说要当一名前端开发工程师之后,我做的第一件事情,就是上知乎.去搜"前端开发工程师"这几个字.然后就会发现很多答案中涉及到,一名前端 ...

  10. CentOS6中OpenMP的运行时间或运行性能分析

    OpenMp作为单机多核心共享内存并行编程的开发工具,具有编码简洁等,容易上手等特点. 关于OpenMP的入门,博主饮水思源(见参考资料)有了深入浅出,循序渐进的分析.做并行开发,做性能分析是永远逃避 ...