傻傻de

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、简介

以下引用自百度百科

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
  • 如果文中有错误的地方,希望大家指出,我会积极地学习改正。
  • 最后,感谢大家的阅读!

开心一点,人间不值得

posted on 2018-12-13 01:10  傻傻de  阅读(2888)  评论(0编辑  收藏  举报