python可视化1——基于matplotlib库

下文主要内容来自课堂讲义,由本人整理。

1. 画图前准备

1.1 pip安装pandas、numpy、plt库;

1.2 中文显示问题:

win系统直接添加:

1
2
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

但是在MAC系统下中文字体显示问题报错:

Font family [‘sans-serif‘] not found.Falling back to DejaVu Sans.

解决方法:

  1. 在python下输入代码获取自己mac内字体存放路径:matplotlib.matplotlib_fname()

  2. 下载黑体字体后拷贝到第1步中找到到路径中存放字体文件夹

    大致路径如下

    /Users/********/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf

  3. 需要在Finder根目录下,按shift+command+. (.是英文句号),开启隐藏目录后删除下图中Fontlist文件。重启python即可。
    img

2. 引例——文件读取

数据,存为.csv文件:

1
2
3
4
5
6
,语文 ,数学 ,英语 ,计算机 ,物理 ,化学 ,体育 
宋丽英 ,86,64,85,88,90,55,98
王大伟 ,92,99,95,94,92,94,90
顾亦菲 ,91,87,99,95,95,92,85
鲁一平 ,78,99,75,81,83,88,92
潘晓雯 ,88,78,98,84,70,95,98

分析每门课的成绩,制作箱型图。

1
2
3
4
5
6
import matplotlib.pyplot as plt
import pandas as pd
scores=pd.read_csv("data1.csv",index_col=0)
plt.rcParams['font.sans-serif']=['SimHei']
scores.boxplot()
plt.show()

img

img

3. 【例1】 条形图的绘制步骤

第一步:导入必要的库

1
2
import matplotlib.pyplot as plt
import numpy as np

第二步:新建绘图区或子绘图区

1
2
3
plt.figure(figsize=(4,3),facecolor='b') 
或者:
fig,ax=plt.subplots(figsize=(4,3))

第三步:准备数据

1
2
kc=('语文', '数学', '英语') # 课程信息
cj= (70, 95, 80) # 成绩数据

第四步:设置图表属性

1
2
3
4
5
ax.set_xlabel('课程')  #设置X轴的标题 
ax.set_ylabel('成绩') #设置Y轴的标题
ax.set_title('成绩示例') #设置图表标题
ax.set_xticks(np.arange(3)) #设置分类轴的刻度[0,1,2]
ax.set_xticklabels(kc) #设置分类轴的显示标签

第五步:绘制图表

1
2
rt = plt.bar(np.arange(3) , cj , label='刘芸')
#参数1指定分类轴的刻度,参数2指定作图用的数据,参数3指定图例的标签文本

第六步:显示图例

1
ax.legend(bbox_to_anchor=(1,0.8)) #显示图例文字

第七步:显示图表

1
plt.show()

3.1 绘图区

Matplotlib的图表区主要包括绘图区、图像和辅助显示对象
1 绘图区:包含Canvas、Figure和Axes三个对象,既可以由系统自动创建,也可以根据需要调用Figure()函数创建;
2 图像:调用各个绘图函数绘制的柱状图、折线图、饼图和散点图等;
3 辅助显示对象:包括标题、坐标轴、坐标轴名称、坐标轴刻度、坐标轴刻度 标签、图表边框线、网格线、图例、前景色等内容;

  • ·创建绘图区

(1)自动创建绘图区:直接调用绘图函数,系统自动创建一个默认大小的绘图区

(2)手动创建绘图区:如下

1
2
3
import matplotlib.pyplot as plt
plt.figure(figsize=(6,4),dpi=72) #绘图区指定为6*4英寸,分辨率为72
plt.plot((3,6)) #绘制一条从顶点(0,3)到顶点(1,6)的直线
  • ·绘图区函数

(1)figure( )函数 用于生成一个全局绘图区

figure([num=None, figsize=None, dpi=None, facecolor=None……, **kwargs])

注意:当前绘图区上没有建立坐标轴,默认不显示该全局绘图区。
如:

plt.figure()

plt.figure(figsize=(6,6),facecolor=‘g’)

(2)axes( )函数 生成坐标系风格的绘图区并显示

plt.axes(arg=None, **kwargs)

plt.axes(rect, projection=None, polar=False, **kwargs)如:plt.axes((0.1,0.3,0.5,0.8),facecolor=’y’)

注意:参数1对应(left,bottom,width,height),坐标原点默认为左下角的(0,0)

  • ·创建子绘图区

(1)subplot( )函数 在全局绘图区创建子绘图区并显示
subplot(nrows, ncols, index, **kwargs)
注意:如果nrows、ncols和index都小于10缩写为一个整数
subplot(323)等价于subplot(3,2,3)
plt.subplot(1,1,1) #表示有1行1列,绘制在第1个子绘图区
plt.subplot(232) #有2行3列共6个子绘图区,只显示第2个

(2)add_subplot(nrows, ncols, index[, **kwargs])
用于给已有全局绘图区添加子绘图区

1
2
3
4
5
6
7
8
9
10
import matplotlib.pyplot as plt 
import numpy as np
fig1=plt.figure( )
fig1.add_subplot(222)
plt.plot((5,3,5),c='b',marker='D')
fig1.add_subplot(223)
x=np.random.randint(0,100,50)
y=np.random.normal(0,100,50)
plt.scatter(x,y,c='r')
plt.show()

img

(3)subplots(nrows, ncols, **fig_kw)函数
创建全局绘图区,然后添加多个子绘图区并显示所有子绘图区

1
2
3
4
5
6
7
import matplotlib.pyplot as plt 
import numpy as np
fig,ax = plt.subplots(nrows=2,ncols=3,figsize=(6,4),dpi=72)
plt.subplots_adjust(wspace=0.3,hspace=0.3) #调整子绘图区之间的间隔
ax[0][1].plot((5),'y^') #在第0行第1列的子绘图区绘制一个黄色三角标记
ax[1][2].plot((3,8),'g') #在第1行第2列的子绘图区绘制一条绿色线条
plt.show()

img

注意:
[1]当行数与列数值均大于1时,用ax[i][j]访问;
[2]当行数或列数只有一个值等于1时,用ax[i]访问;
[3]当行数与列数值均等于1时,用plt或ax访问;

3.2 常见图表函数

函数 描述
plt.plot(x,y,color,linewidth,linestyle,label) 根据x,y数组绘制直线或曲线
plt.boxplot(data,label) 绘制一个箱型图
plt.bar(x, height, width, bottom, *, align=’center’, **kwargs) 绘制一个条形图(即柱状图)
plt.barh(y, width, height, left, *, align=’center’, **kwargs) 绘制一个横向条形图
plt.polar(theta,r) 绘制极坐标图
plt.pie(data,explode) 绘制饼图
plt.scatter(x,y) 绘制散点图
plt.hist(x,bins,normed) 绘制直方图
plt.contour(X,Y,Z,N) 绘制等高线

3.3 坐标轴设置函数

函数 描述
plt.axis( ) 输出:(0.0, 1.0, 0.0, 1.0) 显示当前坐标轴刻度的取值范围
plt.axes( ) 输出:<matplotlib.axes._subplots.AxesSubplot at 0x22f751cb3c8> 显示子绘图区
plt.xlim(xmin=1,xmax=5) 设置X轴刻度取值范围为[1,5]
plt.ylim(ymin=3,ymax=6) 设置Y轴刻度取值范围为[3,6]
plt.xscale(scale ) scale : [‘linear’ | ‘log’ | ‘logit’ | ‘symlog’] 设置X轴缩放
plt.yscale(scale) 设置Y轴缩放
plt.autoscale( ) 自动缩放轴视图的数据
plt.text(x,y,s,fontdic,withdash) 如:plt.text(0.5,0.5,’Max’) 在指定位置添加注释文本 在两个坐标轴的中间位置输出“Max”
plt.grid(True/Flase) 是否显示绘图网格

3.4 标签设置函数

函数 描述
plt.title(“TITLE”,loc=’right’) 设置图表的标题loc:{‘center’,’left’,’right’}
plt.xlabel(“水平轴标题”) 设置X轴的标题
plt.ylabel(“垂直轴标题”) 设置Y轴的标题
plt.legend(loc=‘upper right’ )或直接指定相对位置:ax.legend(bbox_to_anchor=(1,0.8)) 在指定位置显示图例一般在绘图函数中用label参数指定图例的文本内容
plt.xticks( ) 如:plt.xticks(np.arange(3), (‘Tom’, ‘Dick’, ‘Harry’)) 设置X轴的刻度范围及显示标签
plt.yticks( ) 如:plt.yticks(np.arange(3), (‘1’,’2’,’3’)) 设置Y轴的刻度范围及显示标签

3.5 绘制线条

plot( ): 用于绘制线条和标记,不仅可以绘制折线图、曲线图,还可以制作 出类似散点图的效果。 plot函数的使用形式为:

plt.plot([x],y, [fmt],**kwargs)

(1)x和y通常是列表或元组等序列,x中存储所有顶点的x坐标序列,y中存储所有顶点的y坐标序列, 其中参数x可以缺省,缺省值为列表[0, 1, 2, …, n-1]。

(2)参数fmt是一个字符串变量,用于定义图表的基本属性,如颜色(color)、标记(marker)、 线型(linestyle)等。

如:plt.plot([2,3],[5,7], ‘bD:’, linewidth=5)

(3)kwargs是一个关键字参数,用于接收0个或多个由属性与属性值组成的键值对。若颜色属性赋值 为”green”、”black”等单词形式,则不能用fmt参数来组合赋值,必须对单个颜色属性赋值。

如:plt.plot([2,3],[5,7], color=’blue’, marker=’D’, linestyle =’:’,linewidth=5)

plt.plot((5),‘ro’) #在坐标(0,5)处绘制一个红色的圆点
plt.plot((5,10),‘g’) #从(0,5)到(1,10)绘制一条绿色的直线
plt.plot((5,10,3),‘B’) #从(0,5)到(1,10)再到(2,3)绘制一条蓝色的折线

注意:省略x坐标的话,x坐标默认为列表[0,1,2,…,N-1]

小栗子🌰:

1
2
3
4
5
import matplotlib.pyplot as plt 
plt.plot((1,3,5),(2,6,4),'y^')
plt.plot((3,6),(1,5), color='g', marker='D',linestyle=':',linewidth=2, markersize=12)
#plt.plot((3,6),(1,5), c='g', marker='D',ls=':',lw=2,ms=12)
plt.show()

img

1
2
3
4
import matplotlib.pyplot as plt 
plt.plot((2,1), (3,5), 'g^', (5,1), (6,8), 'r:')
#在坐标点(2,3)和(1,5)输出三角形标记 #从坐标点(5,6)到(1,8)绘制红色虚线
plt.show()

img

1
2
3
4
import matplotlib.pyplot as plt
plt.plot([5,2,1], [3,1,3], 'yD-', label='line 1', lw=4)
plt.legend(loc='center right')
plt.show()

img

线条的类型

linestyle (ls) 描述
‘-‘ 减号 画实线
‘:’ 冒号 画短虚线
‘None’ 不画线
‘–’ 2个减号 画长虚线
‘-. ‘ 减号加点 画点划线

线条的标记

marker 描述 marker 描述
‘o’ 圆圈 ‘.’
‘D’ 菱形 ‘s’ 正方形
‘h’ 六边形1 ‘*’ 星号
‘H’ 六边形2 ‘d’ 小菱形
‘_’ (下划线) 水平线 ‘v’ 下的角形
‘8’ 八边形 ‘<’ 左的角形
‘p’ 五边形 ‘>’ 右三角形
‘,’ 像素 ‘^’ 上三角形
‘+’ 加号 ‘|’ 竖线
‘None’ ‘x’ X

指定颜色控制

缩写 颜色
r’ red
‘g’ green
b’ blue
‘c’ cyan
‘m’ magenta
‘y’ yellow
‘w’ white
‘k’ black

4. 绘制常用激活函数的曲线图

分析:激活函数是一种非线性的数学变换,用于对上一层神经元的输出结果进行某种数学变换,将转换后的结果作为下一层神经元的输入,这样的非线性变换有助于实现神经网络模型的非线性分类。
常见的三种激活函数如下:
1 Sigmoid激活函数
2 tanh激活函数(双曲正切函数)
3 ReLU激活函数(Rectified Linear Unit, 线性整流函数)

img

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

fig,ax=plt.subplots(nrows=1,ncols=3,figsize=(12,4))
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
x=np.linspace(-10,10,100)

sigm=1/(1+np.exp(-x))
tanh = np.tanh(x)
relu= (np.abs(x) + x) / 2

ax[0].set_title("sigmoid激活函数")
ax[0].plot(x,sigm,color='r',lw=3, ls='-',label='sigmoid函数')
ax[0].legend(loc='upper left')
ax[1].set_title("tanh激活函数")
ax[1].plot(x,tanh,color='g',lw=3, ls='-',label='tanh函数')
ax[1].legend(loc='upper left')
ax[2].set_title("ReLu激活函数")
ax[2].plot(x,relu,color='b',lw=3, ls='-',label='ReLu函数')
ax[2].legend(loc='upper left')

plt.show( )

img

5. 绘制五角星并填充为红色

1 坐标原点o(0,0)为坐标原点
2 五角星的长轴为R = |oa|,长度已知
3 五角星的短轴为r = |oa1|
4 角度转化为弧度:rad = π/180 rad

目标效果图:
img

计算思路(似乎有点不大对,可能需要自己算):

img

计算方式和代码如下:

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
54
55
56
57
58
59
60
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams["font.sans-serif"] = ["SimHei"]
fig = plt.figure(figsize=(6, 6), dpi=72)
plt.rcParams["axes.unicode_minus"] = False

R = 10
r = R * np.sin(np.pi / 10) / np.cos(np.pi / 5)

# 画五角星
xa = []
ya = []
for k in range(0, 11, 1):
xx = ((1 + (-1) ** k) / 2 * R + (1 + (-1) ** (k + 1)) / 2 * r) * np.cos(
np.pi / 2
+ np.pi / 5
+ (k + 1) // 2 * np.pi * 2 / 5
+ np.pi / 5 * (1 + (-1) ** k) / 2
)
yy = ((1 + (-1) ** k) / 2 * R + (1 + (-1) ** (k + 1)) / 2 * r) * np.sin(
np.pi / 2
+ np.pi / 5
+ (k + 1) // 2 * np.pi * 2 / 5
+ np.pi / 5 * (1 + (-1) ** k) / 2
)
xa.append(xx)
ya.append(yy)
plt.fill(xa, ya, "r")

# 画小圆
theta = np.arange(0, 2 * np.pi, 0.01)
x = r * np.sin(theta)
y = r * np.cos(theta)
plt.plot(x, y, "g")

# 画小五边形
k = np.arange(0, 6, 1)
x = r * np.cos(np.pi / 2 + np.pi / 5 + k * np.pi * 2 / 5)
y = r * np.sin(np.pi / 2 + np.pi / 5 + k * np.pi * 2 / 5)
plt.scatter(x, y, color="b", s=100)
plt.plot(x, y, "w")

# 画大圆
theta = np.arange(0, 2 * np.pi, 0.01)
x = R * np.sin(theta)
y = R * np.cos(theta)
plt.plot(x, y, "b")

# 画大五边形
k = np.arange(0, 6, 1)
x = R * np.cos(np.pi / 2 + np.pi / 5 + k * np.pi * 2 / 5 + np.pi / 5)
y = R * np.sin(np.pi / 2 + np.pi / 5 + k * np.pi * 2 / 5 + np.pi / 5)
plt.plot(x, y, color="orange")
plt.scatter(x, y, color="r", s=90)

plt.xticks(np.linspace(-10, 10, 5))
plt.yticks(np.linspace(-10, 10, 5))
plt.title("红五角星")
plt.show()

6. 填充

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import matplotlib.pyplot as plt
import numpy as np
a=1
b=0.1 # b的值越大,线越直,值越小,弯曲的角度越大
dt=0 #dt控制彩条的初始位置,彩条的个数通过dt的变化来控制
theta=b*np.linspace(0,2*np.pi,10) #点越多,曲线越平滑
x1=a*np.cos(theta+dt)*np.exp(theta)
y1=a*np.sin(theta+dt)*np.exp(theta)
dt +=0.1 #dt控制彩条的宽度,值越小越窄
x2=a*np.cos(theta+dt)*np.exp(theta)
y2=a*np.sin(theta+dt)*np.exp(theta)
x3=np.concatenate((x1,x2[::-1]))
#将x1序列与x2的逆序坐标点顺序连接成一个新序列
y3=np.concatenate((y1,y2[::-1]))
# plt.scatter(x1,y1,color='m')
# plt.scatter(x2,y2,color="y")
plt.scatter(x3,y3,color="r")
plt.fill(x3,y3)
plt.show()

img

循环起来:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import matplotlib.pyplot as plt
import numpy as np
a=1
b=0.3 # b的值越大,线越直,值越小,弯曲的角度越大
# dt=0 #dt控制彩条的初始位置,彩条的个数通过dt的变化来控制
theta=b*np.arange(0,2*np.pi,0.5) #点越多,曲线越平滑
for dt in np.arange(0,2*np.pi,np.pi/8):
x1=a*np.cos(theta+dt)*np.exp(theta)
y1=a*np.sin(theta+dt)*np.exp(theta)
# dt +=0.1 #dt控制彩条的宽度,值越小越窄
dt=dt+np.pi/20
x2=a*np.cos(theta+dt)*np.exp(theta)
y2=a*np.sin(theta+dt)*np.exp(theta)
x3=np.concatenate((x1,x2[::-1]))
#将x1序列与x2的逆序坐标点顺序连接成一个新序列
y3=np.concatenate((y1,y2[::-1]))
# plt.scatter(x1,y1,color='m')
# plt.scatter(x2,y2,color="y")
# plt.scatter(x3,y3,color="r")
plt.fill(x3,y3)
plt.show()

img

7.绘制柱状图

plt.bar(x,height,width=0.8,bottom=None,……,**kwargs,)

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
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']
fig= plt.figure(figsize=(10,4))
seasons=['一季度', '二季度', '三季度','四季度'] #分类轴显示标签
saleA= [300,360,210,260]
saleB= [380,350, 400,290]
index=np.arange(4)
barW=0.3 #barW控制条形宽度

fig.add_subplot(121)
plt.bar(index,saleA,barW,color='m',label='产品A')
plt.bar(index+barW,saleB,barW,color='b',label='产品B')
plt.title("并列柱状图")
plt.ylabel("销售额(万元)",rotation=90)
plt.xticks(index,seasons)
plt.legend(loc='upper right')

fig.add_subplot(122)
plt.bar(index,saleA,barW,color='g',label='产品A')
plt.bar(index,saleB,barW,bottom=saleA,color='y',label ='产品B')
plt.title("堆叠柱状图")
plt.xlabel("时间",loc="right")
plt.xticks(index,seasons)
plt.legend(loc='upper right')
plt.show( )

img

8.绘制饼图

plt.pie(x,explode=None)

1
2
3
4
5
6
7
8
9
10
11
import matplotlib.pyplot as plt
score = [800,500,300,200,100] #各项消费数据
plt.rcParams['font.sans-serif']=['SimHei'] #设置中文字体
plt.title("消费分析") #图表标题
labels = ['伙食费', '生活用品', '学习用品', '娱乐','其他']#数据标记
explode = (0.1, 0, 0, 0, 0) #第1块分裂出来
plt.axis("equal")
plt.pie(score, explode=explode, autopct='%4.1f%%', labels=labels)
# autopct='%4.1f%%'控制数据标记的格式化显示,显示1位小数
plt.legend(bbox_to_anchor=(1, 1)) #显示图例
plt.show( )

img

9.绘制散点图

plt.scatter(x, y, s=None, c=None, marker=None, cmap=None,**kwargs)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from sklearn.datasets import load_iris 
import matplotlib.pyplot as plt
from matplotlib import cm
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
iris=load_iris()
dt=iris.data
tg=iris.target
plt.scatter(dt[:,0],dt[:,3],c=tg,marker="*",cmap='viridis')
#上一行代码可以改用下面的语句实现用不同标记分别绘制散点,并显示图例
#plt.scatter(dt[tg==0,0],dt[tg==0,3],c='r',marker="o",label="山鸢尾花")
#plt.scatter(dt[tg==1,0],dt[tg==1,3],c='g',marker="o",label="变色鸢尾花")
#plt.scatter(dt[tg==2,0],dt[tg==2,3],c='b',marker="^",label="维吉尼亚鸢尾花")
#plt.legend()
plt.show()

img

改用plot绘制标记

1
2
3
4
5
6
7
8
9
10
11
12
13
from sklearn.datasets import load_iris 
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
iris=load_iris()
dt=iris.data
tg=iris.target
#加载鸢尾花数据,字典类型 #获得数据集,150行,4列 #获得样本的分类信息
plt.plot(dt[tg==0,2],dt[tg==0,3],'b^',label='山鸢尾花')
plt.plot(dt[tg==1,2],dt[tg==1,3],'r*',label="变色鸢尾花")
plt.plot(dt[tg==2,2],dt[tg==2,3],'go',label="维吉尼亚鸢尾花")
plt.legend()
plt.show()

img

10.分别用plot 和scatter绘制图案

1
2
3
4
5
6
7
8
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure(figsize=(6,6))
a=np.arange(0,2*np.pi,0.02)
r=np.sin(4*a)
x,y=r*np.cos(a),r*np.sin(a)
plt.plot(x,y, "b",linewidth=4)
plt.show()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["SimHei"]
X=[];Y=[]
#注意:初始化不能写成:X=Y=[],会导致X,Y两个列表的元素一样,绘制的是一条直线
for a in np.arange(0,2*np.pi,0.02):
r=np.sin(4*a)
x=r*np.cos(a) #x,y只保存当前计算结果,不是列表
y=r*np.sin(a)
X.append(x)
Y.append(y)
plt.scatter(X,Y,s=5,c="g",marker=".") # 循环外面打点速度快很多
plt.title("散点绘制艺术图案")
plt.show()

img
img

11.用直方图分别显示泰坦尼克号上乘客的性别和年龄分布情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import matplotlib.pyplot as plt
import pandas as pd
dt=pd.read_csv("/Users/hahaguowang/Library/Mobile Documents/com~apple~CloudDocs/大四上/课程/数据科学/new_code/20211020/titanic.csv")
fig, ax = plt.subplots(nrows=1,ncols=2,figsize=(10,3))
plt.rcParams['font.sans-serif']=['SimHei'] #设置中文字体
xb=list(dt['Sex'])
x1=[0.25,0.75]; xbNum=[]
xbNum.append(xb.count("male"))
xbNum.append(xb.count("female"))
ax[0].hist(xb, bins=2, rwidth=0.5)
ax[0].set_title("泰坦尼克号上乘客的性别分布")
ax[0].set_xlabel('性别'); ax[0].set_ylabel('人数')
ax[0].set_xticks(x1); ax[0].set_xticklabels(['男性','女性'])
for a,b in zip(x1,xbNum): #在每个柱形的顶部标记出数据值
ax[0].text(a, b-50, '%.0f' % b, ha='center')
age=list(dt['Age'])
ax[1].hist(age, bins=15)
ax[1].set_title("泰坦尼克号上乘客的年龄分布")
ax[1].set_xlabel('年龄'); ax[1].set_ylabel('人数')
plt.show()

img

三维可视化

  • 首先调用figure()函数创建一个绘图区
  • 然后调用Axes3D()函数创建三维坐标系

或者通过gca( )函数获取当前坐标系,并通过参数projection=‘3d’指定 绘制的是三维图表 #GCA表示:Get Current Axes

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure() #创建全局绘图区

ax = Axes3D(fig) #创建三维坐标系 plt.show()

1
2
3
4
5
6
7
8
9
10
11
12
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #新建绘图区
ax=Axes3D(fig) #新建三维坐标
z=np.arange(-5*np.pi,5*np.pi,0.1)
x,y=np.sin(z),np.cos(z)
ax.set_xticks(np.linspace(-1,1,4))
ax.set_yticks(np.linspace(-1,1,3))
ax.set_zticks(np.linspace(-20,20,5))
plt.plot(x,y,z,c='r')
plt.show()

img

鸢尾花的分类(三维可视化)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from sklearn import datasets
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
iris=datasets.load_iris( ) # 从数据库获得数据
data=iris.data #获得自变量数据
target=iris.target # 获得样本的分类信息
fig = plt.figure( )
ax = fig.add_subplot(111,projection='3d')
ax.scatter(data[target==0,0],data[target==0,1],data[target==0,3],c='r',marker='o')
ax.scatter(data[target==1,0],data[target==1,1],data[target==1,3],c='g',marker='^')
ax.scatter(data[target==2,0],data[target==2,1],data[target==2,3],c='b',marker='*')
ax.set_xlim(min(data[:,0]), max(data[:,0])) #设置各个坐标轴值的显示范围
ax.set_ylim(min(data[:,1]), max(data[:,1]))
ax.set_zlim(min(data[:,3]), max(data[:,3]))
plt.show()

img