2. 图形对象(图形窗口)

语法:绘制两个窗口,一起显示。

# 手动构建 matplotlib 窗口
mp.figure(
    'sub-fig',			#窗口标题栏文本 
    facecolor=''		#图表背景色
)
mp.show()

mp.figure方法可以构建一个新窗口。plot方法将会针对刚构建的新窗口进行绘制。如果创建多个窗口,则需要多次调用figure方法即可。figure方法中的第一个参数(标题栏文本)相当于窗口的唯一标识符, 同一个标题的窗口只能创建一次。若使用figure方法构建了已存在标题的窗口的话,matplotlib将会把该窗口置为当前操作窗口,而后进行绘制。

设置当前窗口的参数

# 设置图表标题 显示在图表上方
mp.title(title, fontsize=12)
# 设置水平轴的文本
mp.xlabel(x_label_str, fontsize=12)
# 设置垂直轴的文本
mp.ylabel(y_label_str, fontsize=12)
# 设置图表网格线  linestyle设置网格线的样式
	#	-  or solid 粗线
	#   -- or dashed 虚线
	#   -. or dashdot 点虚线
	#   :  or dotted 点线
mp.grid(linestyle='')
# 设置紧凑布局,把图表相关参数都显示在窗口中
mp.tight_layout()

示例:绘制两个图像窗口

# 绘制两个图像窗口
import matplotlib.pyplot as mp

mp.figure("FigureA", facecolor="lightgray")
mp.grid(linestyle="-.")  # 设置网格线

mp.figure("FigureB", facecolor="gray")
mp.xlabel("Date", fontsize=14)
mp.ylabel("Price", fontsize=14)
mp.grid(linestyle="--")  # 设置网格线
mp.tight_layout()  # 设置紧凑布局

mp.show()

python matplotlib 多图加大标题 matplotlib 设置标题_数据分析

1)子图

矩阵式布局

绘制矩阵式子图布局相关API:

mp.figure('Subplot Layout', facecolor='lightgray')
# 拆分矩阵
    # rows:	行数
    # cols:	列数
    # num:	编号
mp.subplot(rows, cols, num)
    #	1 2 3
    #	4 5 6
    #	7 8 9 
mp.subplot(3, 3, 5)		#操作3*3的矩阵中编号为5的子图
mp.subplot(335)			#简写

案例:绘制9宫格矩阵式子图,每个子图中写一个数字。

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

for i in range(9):
    mp.subplot(3, 3, i+1)
    mp.text(
    	0.5, 0.5, i+1,
	ha='center',
	va='center',
	size=36,
	alpha=0.5,
	)
    mp.xticks([])
    mp.yticks([])

mp.tight_layout()
mp.show()

python matplotlib 多图加大标题 matplotlib 设置标题_API_02

网格式布局

网格式布局支持单元格的合并。

绘制网格式子图布局相关API:

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

mp.figure('Grid Layout', facecolor='lightgray')
# 调用GridSpec方法拆分网格式布局
# rows:	行数
# cols:	列数
# gs = mg.GridSpec(rows, cols)	拆分成3行3列
gs = mg.GridSpec(3, 3)
# 合并0行与0、1列为一个子图表
mp.subplot(gs[0, :2])
mp.text(0.5, 0.5, '1', ha='center', va='center', size=36)
mp.tight_layout()
mp.show()

python matplotlib 多图加大标题 matplotlib 设置标题_API_03

自由式布局

自由式布局相关API:

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

mp.figure('Flow Layout', facecolor='lightgray')
# 设置图标的位置,给出左下角点坐标与宽高即可
# left_bottom_x: 坐下角点x坐标
# left_bottom_x: 坐下角点y坐标
# width:		 宽度
# height:		 高度
# mp.axes([left_bottom_x, left_bottom_y, width, height])
mp.axes([0.3, 0.3, 0.6, 0.4])
mp.text(0.5, 0.5, '1', ha='center', va='center', size=36)
mp.show()

python matplotlib 多图加大标题 matplotlib 设置标题_坐标轴_04

2)刻度定位器

刻度定位器相关API:

# 获取当前坐标轴
ax = mp.gca()
# 设置水平坐标轴的主刻度(显示字的刻度)定位器
ax.xaxis.set_major_locator(mp.NullLocator())
# 设置水平坐标轴的次刻度(不显示字的刻度)定位器为多点定位器,间隔0.1
ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))

常用刻度器如下:

# 空定位器:不绘制刻度
mp.NullLocator()
# 最大值定位器:
# 最多绘制nbins+1个刻度
mp.MaxNLocator(nbins=3)
# 定点定位器:根据locs参数中的位置绘制刻度
mp.FixedLocator(locs=[0, 2.5, 5, 7.5, 10])
# 自动定位器:由系统自动选择刻度的绘制位置
mp.AutoLocator()
# 索引定位器:由offset确定起始刻度,由base确定相邻刻度的间隔
mp.IndexLocator(offset=0.5, base=1.5)
# 多点定位器:从0开始,按照参数指定的间隔(缺省1)绘制刻度
mp.MultipleLocator()
# 线性定位器:等分numticks-1份,绘制numticks个刻度
mp.LinearLocator(numticks=21)
# 对数定位器:以base为底,绘制刻度
mp.LogLocator(base=2)

案例:使用for循环测试刻度器样式:

import matplotlib.pyplot as mp
import numpy as np

locators = ['mp.NullLocator()', # 空刻度定位器,不绘制刻度
            'mp.MultipleLocator(1)', # 多点定位器:从0开始,按照参数指定的间隔(缺省1)绘制
            'mp.MaxNLocator(nbins=4)',# 最多绘制指定个数+1个主刻度
            'mp.AutoLocator()'] # 自动定位器:由系统自动选择刻度的绘制位置

for i, locator in enumerate(locators):
    mp.subplot(len(locators), 1, i + 1)     # 分割4行1列
    mp.xlim(0, 10)
    mp.ylim(-1, 1)
    mp.yticks([])
    # 获取当前坐标轴
    ax = mp.gca()
    # 隐藏除底轴以外的所有坐标轴
    ax.spines['left'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.spines['right'].set_color('none')
    # 将底坐标轴调整到子图中心位置
    ax.spines['bottom'].set_position(('data', 0))
    # 设置水平坐标轴的主刻度定位器
    ax.xaxis.set_major_locator(eval(locator))
    # 设置水平坐标轴的次刻度定位器为多点定位器,间隔0.1
    ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))
    mp.plot(np.arange(11), np.zeros(11), c='none')
    # 标记所用刻度定位器类名
    mp.text(5, 0.3, locator, ha='center', size=12)

mp.show()

python matplotlib 多图加大标题 matplotlib 设置标题_坐标轴_05

3)散点图

可以通过每个点的坐标、颜色、大小和形状表示不同的特征值。

绘制散点图的相关API:

mp.scatter(
    x, 				# x轴坐标数组
    y,				# y轴坐标数组
    marker='', 			# 点型
    s=10,			# 大小
    color='',			# 颜色
    edgecolor='', 		# 边缘颜色
    facecolor='',		# 填充色
    zorder=''			# 图层序号
)

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

n = 100
# 172:	期望值
# 10:	标准差
# n:	数字生成数量
x = np.random.normal(172, 20, n)
y = np.random.normal(60, 10, n)

案例:绘制平面散点图。

# 散点图示例
import matplotlib.pyplot as mp
import numpy as np

n = 40
# 期望值:期望值是该变量输出值的平均数
# 标准差:是反映一组数据离散程度最常用的一种量化形式,是表示精确度的重要指标
x = np.random.normal(172, 20 ,n ) # 期望值, 标准差, 生成数量
y = np.random.normal(60, 10, n) # 期望值, 标准差, 生成数量

x2 = np.random.normal(180, 20 ,n ) # 期望值, 标准差, 生成数量
y2 = np.random.normal(70, 10, n) # 期望值, 标准差, 生成数量

mp.figure("scatter", facecolor="lightgray")
mp.title("Scatter Demo")
mp.scatter(x, y, c="red", marker="D")
mp.scatter(x2, y2, c="blue", marker="v")

mp.xlim(100, 240)
mp.ylim(0, 100)
mp.show()

python matplotlib 多图加大标题 matplotlib 设置标题_数据分析_06

cmap颜色映射表参照附件:cmap颜色映射表(只是一部分)

python matplotlib 多图加大标题 matplotlib 设置标题_子图_07

 

4)填充

以某种颜色自动填充两条曲线的闭合区域。

mp.fill_between(
	x,		# x轴的水平坐标
    sin_x,		# 下边界曲线上点的垂直坐标
    cos_x,		# 上边界曲线上点的垂直坐标
    sin_x<cos_x, 	# 填充条件,为True时填充
    color='', 		# 填充颜色
    alpha=0.2		# 透明度
)

案例:绘制两条曲线: sin_x = sin(x) cos_x = cos(x / 2) / 2 [0-8π]

import matplotlib.pyplot as mp
import numpy as np

n = 1000
x = np.linspace(0, 8 * np.pi, n)  # 返回指定间隔上的等距数字

sin_y = np.sin(x)  # 计算sin函数值
cos_y = np.cos(x / 2) / 2  # 计算cos函数值

mp.figure('Fill', facecolor='lightgray')
mp.title('Fill', fontsize=20)
mp.xlabel('x', fontsize=14)  # x轴标签
mp.ylabel('y', fontsize=14)  # y轴
mp.tick_params(labelsize=10)  # 刻度
mp.grid(linestyle=':')

mp.plot(x, sin_y, c='dodgerblue', label=r'$y=sin(x)$')
mp.plot(x, cos_y, c='orangered', label=r'$y=\frac{1}{2}cos(\frac{x}{2})$')

# 填充cos_y < sin_y的部分
mp.fill_between(x, cos_y, sin_y, cos_y < sin_y, color='dodgerblue', alpha=0.5)
# 填充cos_y > sin_y的部分
mp.fill_between(x, cos_y, sin_y, cos_y > sin_y, color='orangered', alpha=0.5)

mp.legend()
mp.show()

python matplotlib 多图加大标题 matplotlib 设置标题_数据分析_08

5)条形图(柱状图)

绘制柱状图的相关API:

mp.figure('Bar', facecolor='lightgray')
mp.bar(
    x,			# 水平坐标数组
    y,			# 柱状图高度数组
    width,		# 柱子的宽度
    color='', 		# 填充颜色
    label='',		# 名字
    alpha=0.2		# 透明度
)

案例:先以柱状图绘制苹果12个月的销量,然后再绘制橘子的销量。

import matplotlib.pyplot as mp
import numpy as np

apples = np.array([30, 25, 22, 36, 21, 29, 20, 24, 33, 19, 27, 15])
oranges = np.array([24, 33, 19, 27, 35, 20, 15, 27, 20, 32, 20, 22])

mp.figure('Bar', facecolor='lightgray')
mp.title('Bar', fontsize=20)
mp.xlabel('Month', fontsize=14)
mp.ylabel('Price', fontsize=14)
mp.tick_params(labelsize=10)
mp.grid(axis='y', linestyle=':')
mp.ylim((0, 40))

x = np.arange(len(apples))  # 产生均匀数组,长度等同于apples

mp.bar(x - 0.2,     # 横轴数据
       apples,      # 纵轴数据
       0.4,         # 柱体宽度
       color='dodgerblue',
       label='Apple')
mp.bar(x + 0.2,     # 横轴数据
       oranges,     # 纵轴数据
       0.4,         # 柱体宽度
       color='orangered', label='Orange', alpha=0.75)

mp.xticks(x, ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'])

mp.legend()
mp.show()

python matplotlib 多图加大标题 matplotlib 设置标题_API_09

 

6)统计直方图

绘制直方图相关API:

mp.hist(
    x, 				# 值列表		
    bins, 			# 直方柱数量
    color, 			# 颜色
    edgecolor, 			# 边缘颜色
    normed=True, 		# 是否以密度方式显示
)

 案例:绘制统计直方图显示图片像素亮度分布:

"""
pip install scipy==1.2.1   #版本1.2.1有 sm.imread()方法
pip install opencv-python
"""
import numpy as np
import matplotlib.pyplot as mp
import scipy.misc as sm
import cv2 as cv

img = cv.imread('svd_lily.png', 0)
# img = sm.imread('../data/forest.jpg', True)

pixes = img.ravel()
mp.figure('Image Hist', facecolor='lightgray')
mp.title('Image Hist', fontsize=18)
mp.xticks(np.linspace(0, 255, 11))
mp.hist(x=pixes, bins=10, color='dodgerblue', range=(0, 255), edgecolor='white')
mp.show()

 

python matplotlib 多图加大标题 matplotlib 设置标题_坐标轴_10

 

7)饼图

绘制饼状图的基本API:

mp.pie(
    values, 		# 值列表		
    spaces, 		# 扇形之间的间距列表
    labels, 		# 标签列表
    colors, 		# 颜色列表
    '%d%%',		# 标签所占比例格式
    shadow=True, 	# 是否显示阴影
    startangle=90	# 逆时针绘制饼状图时的起始角度
    radius=1		# 半径
)

 

案例:绘制饼状图显示6门编程语言的流行程度:

import matplotlib.pyplot as mp
import numpy as np

mp.figure('pie', facecolor='lightgray')
mp.title('Pie', fontsize=20)
# 整理数据
values = [15, 13.3, 8.5, 7.3, 4.62, 51.28]
spaces = [0.05, 0.01, 0.01, 0.01, 0.01, 0.01]
labels = ['Java', 'C', 'Python', 'C++', 'VB', 'Other']
colors = ['dodgerblue', 'orangered', 'limegreen', 'violet', 'gold','blue']
# 等轴比例
mp.axis('equal')
mp.pie(
    values,         # 值列表
    spaces,         # 扇形之间的间距列表
    labels,         # 标签列表
    colors,         # 颜色列表
    '%d%%',         # 标签所占比例格式
    shadow=True,    # 是否显示阴影
    startangle=90,  # 逆时针绘制饼状图时的起始角度
    radius=1        # 半径
)
mp.legend()
mp.show()

 

python matplotlib 多图加大标题 matplotlib 设置标题_数据分析_11