一.Matplotlib概述

(一) Matplotlib概述

​ 在Python中数据可视化工具分为免费和收费两种,其中免费的应用性较好的数据可视化工具有Matplotlip、Seaborn、交互式的数据可视化工具Bokeh。其中,Matplotlip是用于创建出版质量图表的绘图工具库,Seaborn是在Matplotlib基础上进行了更高级的API封装,从而使得作图更加容易。

(二)Matplotlib简介

使用Matplotlib实现数据图形化的优势是:

p 使用起来极其简单。

p 以渐进、交互式方式实现数据可视化。

p 表达式和文本使用LaTeX排版。

p 对图像元素控制力更强。

p 可输出PNG、PDF、SVG和EPS等多种格式。

二.创建简单图形

(一)导入快速绘图的函数库

import matplotlib.pyplot as plt

(二) 创建绘图对象—figure对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import matplotlib.pyplot as plt
import numpy as np

#一天24小时
x = range(2,25,2)
y = [11,13,15,15,16,18,21,25,25,26,22,18]
z = range(2,25,2)
#创建绘图对象,设置图形大小
plt.figure(figsize=(20,8),dpi=80,facecolor='pink',edgecolor='#F00')

#绘制图表,label曲线名字在图例中显示, color曲线颜色, linewidth线条 粗细
plt.plot(x,y,label='逐小时温度',color='red',linewidth=3)


# plt.plot(x,z,'b--') #蓝色虚线

#设置各类图例和标签
plt.xlabel("hour")
plt.ylabel("temperature")
plt.title("hourly weather") #标题
plt.ylim(-10,20)#y轴范围
plt.show()

(三)创建子图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#子图
x = np.linspace(0,10,1000)
y = np.sin(x)
z = np.cos(x)
k = x
#第一子图
plt.subplot(221)#第一行左图
plt.plot(x,y,label="sin(x)",color="red",linewidth=2)
plt.subplot(222)#第一行右图
plt.plot(x,z,"b--",label="cos(x)",)
plt.subplot(212)#第二行
plt.plot(x,k,"g--",label="$line(x)$",)
plt.show()

print(matplotlib.get_configdir())
print(matplotlib.matplotlib_fname())
print(matplotlib.rc_params())

(四)matplotlibrc配置文件

在Matplotlib中可以使用多个“matplotlibrc”配置文件,它们的搜索顺序:

p 当前路径

p 用户配置路径

p 系统配置路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#设置动态rc参数
# matplotlib.rc_params()
# plt.rcParams["lines.marker"] = "o" #线上标记为圆圈
# plt.rcParams["lines.linewidth"] = 10 #线粗细
# plt.rcParams["lines.linestyle"] = "-." #线样式 -.点划线
# plt.plot([1,2,3]) #绘制斜线标记字符.
# plt.show()

#设置字符字体样式大小
matplotlib.rc("lines",marker="o",linewidth=3,linestyle='--')
#方式一:设置中文
# font = {'family': 'MicroSoft YaHei',
# 'weight': 'bold',
# 'size': '16'}
# matplotlib.rc('font', **font) # pass in the font dict as kwargs

#方式二: 当前字体
my_font= font_manager.FontProperties(fname="fangzheng.ttf",size=30)
plt.title("rc() 案例",fontproperties=my_font)

plt.plot([1,2,3])
plt.show()

(五)散点图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Emp_data = np.loadtxt('Employedpopulation.csv',delimiter=",",usecols=(1,2,3,4,5,6,7,8,9,10),dtype=int)

#设置正常显示中文和负号
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

#创建一个绘图对象,并设置宽高
plt.figure(figsize=(6,4))
#散点图,全部就业人员
plt.scatter(Emp_data[0],Emp_data[1],c='r',marker='o')
#散点图,城镇就业人员
plt.scatter(Emp_data[0],Emp_data[2],c='g',marker='x')
#散点图,乡村就业人员
plt.scatter(Emp_data[0],Emp_data[3],c='b',marker='v')

#设置轴和标题
plt.xlabel('年份')
plt.ylabel('人员(万人)')
plt.xlim(2007,2016)
plt.ylim(30000,80000)
plt.title('2007-16年城镇全部就业人员散点图')
#添加图例
plt.legend({'全部就业','城镇就业','乡村就业'})
plt.savefig('d:/test/emp1.png')
plt.show()

(六)折线图和柱状图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Emp_data = np.loadtxt('Employedpopulation.csv',delimiter=",",usecols=(1,2,3,4,5,6,7,8,9,10),dtype=int)

#设置正常显示中文和负号
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

#创建一个绘图对象,并设置宽高
plt.figure(figsize=(6,4))

# #折线,全部就业人员
# plt.plot(Emp_data[0],Emp_data[1],"r-")
# #折线,城镇就业人员
# plt.plot(Emp_data[0],Emp_data[2],"g--")
# #折线,乡村就业人员
# plt.plot(Emp_data[0],Emp_data[3],"b-.")
#
# #设置轴和标题
# plt.xlabel('年份')
# plt.ylabel('人员(万人)')
# plt.xlim(2007,2016)
# plt.ylim(30000,80000)
# plt.title('2007-16年城镇全部就业人员散点图')
# #添加图例
# plt.legend({'全部就业','城镇就业','乡村就业'})
# plt.savefig('d:/test/emp2.png')
# plt.show()

# #随机生成10000个满足正态分布的数据
# data = np.random.randn(10000)
# plt.hist(data,bins=40,color="red",edgecolor="black",rwidth=0.7,alpha=0.7)
# #横纵轴
# plt.xlabel("区间")
# plt.ylabel("频数/频率")
# plt.title("频数/频率分布直方图")
# plt.show()


# #柱状图,全部就业人员
# plt.bar(Emp_data[0],Emp_data[1],width=0.35,color='red',edgecolor='white')
# #折线,城镇就业人员
# plt.bar(Emp_data[0],Emp_data[2],width=0.35,color='green',edgecolor='white')
# #折线,乡村就业人员
# plt.bar(Emp_data[0],Emp_data[3],width=0.35,color='blue',edgecolor='white')
#设置轴和标题
# plt.xlabel('年份')
# plt.ylabel('人员(万人)')
# plt.xlim(2007,2016)
# plt.ylim(30000,80000)
# plt.title('2007-16年城镇全部就业人员柱状图')
# #添加图例
# plt.legend({'全部就业','城镇就业','乡村就业'})
# # plt.savefig('d:/test/emp2.png')
# plt.show()

(七)饼图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Emp_data = np.loadtxt('Employedpopulation.csv',delimiter=",",usecols=(1),dtype=int)

#设置正常显示中文和负号
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

#创建一个绘图对象,并设置宽高
plt.figure(figsize=(6,4))

#饼型图,全部就业人员
X = [Emp_data[2],Emp_data[3]] #将2016年就业数据赋值给X
label = ['城镇就业','乡村就业'] #饼图标签
explode = [0.01,0.01] #设定各项距离圆心的半径

plt.pie(X,explode=explode,labels=label,autopct='%1.2f%%')
#添加图例
plt.legend({'城镇就业','乡村就业'})
plt.show()

(八)箱图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Emp_data = np.loadtxt('Employedpopulation.csv',delimiter=",",usecols=(1,2,3,4,5,6,7,8,9,10),dtype=int)

#设置正常显示中文和负号
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

#创建一个绘图对象,并设置宽高
plt.figure(figsize=(6,4))

#箱图,全部就业人员
X = [Emp_data[1],Emp_data[2],Emp_data[3]] #将2007-2016年就业数据赋值给X
label = ['全国就业','城镇就业','乡村就业'] #饼图标签
explode = [0.01,0.01] #设定各项距离圆心的半径

plt.boxplot(X,notch=True,labels=label,meanline=True)
#添加图例
plt.legend({'全国就业','城镇就业','乡村就业'})
plt.show()