数据分析之Matplotlib模块学习笔记(二)


matplotlib图像窗口高级操作

知识点总结:

- 绘制子图

- 刻度定位器,刻度网格线

- 半对数坐标

- 散点图


1.绘制两个窗口

# title:窗口的标题
# figsize: 窗口的大小
# dpi:像素密度
# facecolor:图表的背景色
mp.figure('title', figsize=(4,3), dpi=120, facecolor='')
mp.show()

注意事项:mp.figure方法可以创建一个新的窗口,但是如果新窗口的title已经被创建过了,那么就把该title的旧窗口置为当前窗口,以后的绘图操作,都将针对当前窗口生效。

2.设置当前窗口的参数

mp.title('title',fontsize=16)   # 设置图表标题
mp.xlabel('x',fontsize=12)      # x的描述文本
mp.ylabel('y',fontsize=12)      # y的描述文本
mp.tick_params(labelsize=8)     # 设置刻度参数
mp.grid(linestyle=':')          # 绘制网格线(三种样式'--' '-' ':')
mp.tight_layout()               # 紧凑布局(显示效果更佳)

案例:(总和知识点1,2)

import matplotlib.pyplot as mp

mp.figure('Figure-1',facecolor='red',figsize=(8,6),dpi=120)
mp.title('Figure--1',fontsize=18)
mp.xlabel('x',fontsize=12)
mp.ylabel('y',fontsize=12)
mp.grid(linestyle=':')
mp.tight_layout()

# 创建第二个窗口
mp.figure('Figure--2',facecolor='lightgray')
mp.title('Figure--2',fontsize=18)
mp.xlabel('x',fontsize=12)
mp.ylabel('y',fontsize=12)



mp.show()

3.绘制窗口子图

3.1 矩阵式布局 – 绘制矩阵式布局子图的API

mp.figure('xx',...)
# rows:行数
# columns:列数
# num : 子图编号(阿拉伯数字选中子图)
mp.subplot(rows,columns,num)
mp.subplot(3,3,5) # 把3行3列的5号图设置为当前绘图区域
mp.subplot(3,3,1) # 把3行3列的1号图设置为当前绘图区域
mp.subplot(2,2,1) # 拆成2行2列就不成立
mp.show()

3.1案例: for循环绘制九宫格

import matplotlib.pyplot as mp

mp.figure('Subplot Layout',facecolor='lightgray')

for i in range(1,10):
    mp.subplot(3,3,i)
    # 在当前绘图区域写文本
    mp.text(0.5,0.5,i,size=36,alpha=0.8,ha='center',va='center')
    mp.xticks([])
    mp.yticks([])
mp.tight_layout()
mp.show()

九宫格效果图:
数据分析之Matplotlib模块学习笔记(二)_第1张图片

3.2 网格式布局(网格式布局支持单元格的合并)
  绘制网格式子图相关API
  引入切片操作

import matplotlib.gridspec as mg
mp.figure(..)
# 创建GridSpec对象,(3行3列)
gs = mg.GridSpec(3,3)
# 把GridSpec中第一行的前两列合并为一个子图
mp.subplot(gs[0,:2])
# 拿到5号子图
mp.subplot(gs[1,1])

mp.show()

案例:网格布局(自由合并单元格)

import matplotlib.pyplot as mp
import matplotlib.gridspec as mg

mp.figure('Grid',facecolor='lightgray')
# 创建一个3行3列的Grispec对象
gs = mg.GridSpec(3,3)

mp.subplot(gs[0,:2])
# 填充文本
mp.text(0.5,0.5,1,ha='center',va='center',size=36)
mp.xticks([])
mp.yticks([])


mp.subplot(gs[:2,2])
# 填充文本
mp.text(0.5,0.5,2,ha='center',va='center',size=36)
# 去掉x,y坐标轴信息
mp.xticks([])
mp.yticks([])

mp.subplot(gs[1,1])
# 填充文本
mp.text(0.5,0.5,3,ha='center',va='center',size=36)
# 去掉x,y坐标轴信息
mp.xticks([])
mp.yticks([])

mp.subplot(gs[1:,0])
# 填充文本
mp.text(0.5,0.5,4,ha='center',va='center',size=36)
# 去掉x,y坐标轴信息
mp.xticks([])
mp.yticks([])


mp.subplot(gs[2,1:])
# 填充文本
mp.text(0.5,0.5,5,ha='center',va='center',size=36)
# 去掉x,y坐标轴信息
mp.xticks([])
mp.yticks([])

# 紧凑布局
mp.tight_layout()

mp.show()

3.2 案例效果图
数据分析之Matplotlib模块学习笔记(二)_第2张图片

3.3 自由布局 – 自由布局相关API

mp.figure()
# 设置图表的位置,需要给出左下角点坐标与宽,高即可
# 0.03:左下角点的横坐标
# 0.04:左下角点的纵坐标
# 0.94:图表的(相对)宽度 
# 0.92:图表的(相对)高度

mp.axes([0.03,0.04,0.94,0.92])
mp.text(.....)
mp.show()

自由布局案例:

import matplotlib.pyplot as mp
mp.figure('FlowLayou',facecolor='lightgray')

mp.axes([0.1,0.2,0.8,0.3])
mp.text(0.5,0.5,1,ha='center',va='center',size=36)
mp.xticks([])
mp.yticks([])

mp.axes([0.2,0.6,0.5,0.3])
mp.text(0.5,0.5,2,ha='center',va='center',size=36)
mp.xticks([])
mp.yticks([])


mp.show()

自由布局效果图:
数据分析之Matplotlib模块学习笔记(二)_第3张图片
4.刻度定位器
设置坐标轴刻度定位器相关的API:

# 获取当前坐标轴
ax = mp.gca()

# 设置横轴的主刻度定位器为多点定位器,主刻度间隔为1
ax.xaxis.set_major_locator(mp.MultipleLocator(1))

# 把x轴按最大的约数分成n份
ax.xaxis.set_major_locator(mp.MaxNLocator(n))

# 设置横轴的次刻度定位器为MulLocator(0.1) 
ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))

# 设置横轴的次刻度定位器为NullLocator() (将不会显示此刻度)
ax.xaxis.set_minor_locator(mp.NullLocator())

案例: 刻度定位器

import numpy as np
import matplotlib.pyplot as mp

mp.figure('Locator',facecolor='lightgray')
ax = mp.gca()
ax.spines['left'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# x,y坐标值的取值范围
mp.xlim(0,10)
mp.ylim(-1,1)
mp.yticks([])
ax.spines['bottom'].set_position(('data',0))

# 设置x轴的主刻度定位器
ax.xaxis.set_major_locator(mp.MultipleLocator(1))

# 把x轴按最大的约数分成7份
# ax.xaxis.set_major_locator(mp.MaxNLocator(7))

# 设置x轴的次刻度定位器
# ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))
ax.xaxis.set_minor_locator(mp.NullLocator())

mp.tight_layout()
mp.show()

效果图如下:
数据分析之Matplotlib模块学习笔记(二)_第4张图片
5.刻度网格线

ax = mp.gca()
ax.grid(
    which='',           # 'major' 'minor' 绘制主刻度/次刻度网格线
    axis='',            # 'x'/'y'/'both' 绘制x轴/y轴的刻度网格线
    linewidth=1,
    linestyle='',
    color='',
    alpha=0.5
)

5.1案例: 绘制x坐标轴数组[1,10,100,1000,100,10,1]的图形

import numpy as np
import matplotlib.pyplot as mp

y = np.array([1,10,100,1000,100,10,1])
mp.figure('GridLine',facecolor='lightgray')
mp.title('GridLine',fontsize=16)
mp.xlabel('x',fontsize=12)
mp.ylabel('y',fontsize=12)
mp.tick_params(labelsize=10)

# 设置刻度定位器与刻度网格线
ax = mp.gca()
ax.xaxis.set_major_locator(mp.MultipleLocator(1))
ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))
ax.yaxis.set_major_locator(mp.MultipleLocator(250))
ax.yaxis.set_minor_locator(mp.MultipleLocator(50))

# 显示主刻度网格线
ax.grid(which='major',axis='both',
        linewidth=0.75,linestyle='-',
        color='orange')
# 显示次刻度网格线
ax.grid(which='minor',axis='both',
        linewidth=0.5,linestyle=':',
        color='orange')
# 设置提示标签
mp.plot(y,'o-',c='dodgerblue',label='plot')
mp.legend()
mp.show()

6.半对数坐标轴(更加清晰研究噪声的曲线趋势)
y轴将会以指数方式递增

mp.figure()
#mp.plot()改为mp.semilogy()方法绘制曲线即可
mp.semilogy(x,y,....)
mp.show()

# 综合代码示例demo8

刻度网格线效果图和半对数坐标轴 一起显示:
数据分析之Matplotlib模块学习笔记(二)_第5张图片
7.散点图

numpy.random模块提供了normal函数用于产生复合正态分布的随机数.

n = 100
# 产生n个符合正态分布规律的随机数
# 172:期望
# 20:标准差(标准差越小,越集中;标准差越大,越分散)
x = np.random.normal(172,20,n)
y = np.random.normal(65,10,n)

绘制散点图的相关API:

mp.scatter(
    x,y,
    marker='',
    s = 60,
    color='',
    edgecolor = '',
    facecolor = '',
    zorder=3
)

散点图案例:

import numpy as np
import matplotlib.pyplot as mp

n = 500
x = np.random.normal(172,20,n)
y = np.random.normal(65,10,n)
mp.figure('Student',facecolor='lightgray')
mp.title('Student List',fontsize=16)
mp.xlabel('Height',fontsize=14)
mp.ylabel('Weight',fontsize=14)
mp.tick_params(labelsize=12)
mp.grid(linestyle=':')
mp.scatter(x,y,marker='o',s=50,edgecolors='dodgerblue',alpha=0.5,zorder=3,label='Student')
mp.legend()
mp.show()

散点图效果图:
数据分析之Matplotlib模块学习笔记(二)_第6张图片

你可能感兴趣的:(学习笔记)