文章目录

  • 1. 图形窗口方法与参数
  • 1.1 创建窗口
  • 1.2 设置窗口的常用方法
  • 1.3 更改当前绘制的窗口
  • 2. 子图布局(一个窗口显示多个图表)
  • 2.1 矩阵式布局
  • 2.2 网格式布局
  • 2.3 自由式布局
  • 3. 刻度定位器
  • 3.1 MultipleLocator()
  • 3.1 其他刻度定位器
  • 4. 区域填充
  • 5. 散点图
  • 5.1 散点图
  • 5.2 散点图 API
  • 内置颜色映射




1. 图形窗口方法与参数

1.1 创建窗口

# 创建 matplotlib 窗口
figure(
	'sub-fig',		# 窗口标题栏文本
	facecolor=''	# 图表背景颜色
)

注意:
窗口标题栏的文本设置相同,matplotlib 不会创建新的窗口。
窗口标题栏文本为窗口的唯一标识。

import matplotlib.pyplot as plt

plt.figure('Figure A', facecolor='gray')
plt.figure('Figure B', facecolor='lightgray')
plt.show()

绘制图形的代码写在创建窗口 A 之后,图形会绘制在窗口 A 中;绘制图形的代码写在创建窗口 B 之后,图形会绘制在窗口 B 中。

import matplotlib.pyplot as plt

plt.figure('Figure A', facecolor='gray')
plt.plot([0, 1], [0, 1])
plt.figure('Figure B', facecolor='lightgray')
plt.plot([0, 1, 0], [0, 1, 2])
plt.show()


1.2 设置窗口的常用方法

# 设置图表标题,显示在图表的上方
title(title, fontsize=12)

# 设置水平轴的文本
xlabel(x_label_str, fontsize=12)

# 设置垂直轴的文本
ylabel(y_label_str, fontsize=12)

# 设置图表网格线,linestyle 设置网格线的样式
# 样式字符串与设置图形线的样式的字符串一样
grid(linestyle='')

# 设置紧凑布局,把图表相关参数都显示在窗口中
# 紧凑布局,窗口的利用率更高
tight_layout()
import numpy as np
import matplotlib.pyplot as plt

plt.figure('Figure A', facecolor='gray')
plt.plot([0, 1], [0, 1])
# 设置 A 窗口
plt.title('Figure A', fontsize=16)
plt.xlabel('Figure A xlabel', fontsize=12)
plt.ylabel('Figure A ylabel', fontsize=12)
plt.grid(linestyle='-.')
plt.figure('Figure B', facecolor='lightgray')
plt.plot([0, 1, 0], [0, 1, 2])
# 设置 B 窗口
plt.title('Figure B', fontsize=16)
plt.xlabel('Figure B xlabel', fontsize=12)
plt.ylabel('Figure B ylabel', fontsize=12)
plt.grid(linestyle='--')
plt.tight_layout()

plt.show()


1.3 更改当前绘制的窗口

import numpy as np
import matplotlib.pyplot as plt

plt.figure('Figure A', facecolor='gray')
plt.plot([0, 1], [0, 1])
# 设置 A 窗口
plt.title('Figure A', fontsize=16)
plt.xlabel('Figure A xlabel', fontsize=12)
plt.ylabel('Figure A ylabel', fontsize=12)
plt.grid(linestyle='-.')
plt.figure('Figure B', facecolor='lightgray')
plt.plot([0, 1, 0], [0, 1, 2])
# 设置 B 窗口
plt.title('Figure B', fontsize=16)
plt.xlabel('Figure B xlabel', fontsize=12)
plt.ylabel('Figure B ylabel', fontsize=12)
plt.grid(linestyle='--')
plt.tight_layout()

# 接下来的图形绘制在 A 窗口中
# 由于 A 窗口已经创建过了,不会再创建一个,相当于调用 A 窗口
plt.figure('Figure A')
plt.plot([1, 2, 3], [2, 1, 3])

plt.show()


2. 子图布局(一个窗口显示多个图表)

2.1 矩阵式布局

subplot(rows, cols, num)
# 将一个窗口拆分成几行几列
# rows: 行
# cols: 列
# num: 编号(第几个子图) 编号从 1 开始
# 如:
subplot(3, 3, 5) # 一个窗口拆分成 3 行 3 列,绘制第 5 个子图
subplot(335) # 简写


import matplotlib.pyplot as plt

plt.figure('Figure A', facecolor='gray')

for i in range(1, 10):
    plt.subplot(3,3,i)
    # 在图表中 x=0.5,y=0.5 的位置书写文本 i
    # 水平和垂直都居中对齐
    plt.text(0.5,0.5,i,ha='center', va='center', size=36, alpha=0.6)
    # 取消 x y 轴的刻度
    plt.xticks([])
    plt.yticks([])
    plt.tight_layout()

plt.show()


2.2 网格式布局

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

# 创建窗口
mp.figure('GridSpec', facecolor='lightgray')
# 将窗口分割成 3 行 3 列
gs = mg.GridSpec(3, 3)
# 将第一行的第一个和第二个子图进行合并(采用切片的形式进行合并)
mp.subplot(gs[0, :2])
# 绘制图形
mp.text(0.5, 0.5, 1, ha='center', va='center', size=36, alpha=0.8)
mp.xticks([])
mp.yticks([])
mp.tight_layout()

mp.subplot(gs[:2, 2])
mp.text(0.5, 0.5, 2, ha='center', va='center', size=36, alpha=0.8)
mp.xticks([])
mp.yticks([])
mp.tight_layout()

mp.subplot(gs[1:, 0])
mp.text(0.5, 0.5, 3, ha='center', va='center', size=36, alpha=0.8)
mp.xticks([])
mp.yticks([])
mp.tight_layout()

mp.subplot(gs[2, 1:])
mp.text(0.5, 0.5, 4, ha='center', va='center', size=36, alpha=0.8)
mp.xticks([])
mp.yticks([])
mp.tight_layout()

# 显示窗口
mp.show()


2.3 自由式布局

mp.axes([left_bottom_x, left_bottom_y, width, height])
# left_bottom_x: 左下角 x 坐标
# left_bottom_y: 左下角 y 坐标
# width: 宽度
# height: 高度
import numpy as np
import matplotlib.pyplot as mp
import matplotlib.gridspec as mg

# 创建窗口
mp.figure('FreeLayout', facecolor='lightgray')
# 参数列表中的四个值表示:窗口宽或高的几倍
# 左下角坐标 x 的位置为 宽度的 0.1 倍
mp.axes([0.1, 0.1, 0.5, 0.5])

# 显示窗口
mp.show()


3. 刻度定位器

3.1 MultipleLocator()

# 获取当前坐标轴
ax = mp.gca()
# 设置水平坐标轴的主刻度(显示字的刻度)定位器,间隔 1
# ax.xaxis 获取 x 轴
# mp.MultipleLocator(刻度间隔) 刻度定位器 
ax.xaxis.set_major_locator( mp.MultipleLocator(1) )
# 设置水平坐标轴的次刻度(不显示字的刻度)定位器为多点定位器,间隔 0.1
ax.xaxis.set_minor_locator( mp.MultipleLocator(0.1) )
import numpy as np
import matplotlib.pyplot as mp
import matplotlib.gridspec as mg

# 获取坐标轴
ax = mp.gca()
# 取消左、上、右轴的显示
ax.spines['top'].set_color('none')
ax.spines['left'].set_color('none')
ax.spines['right'].set_color('none')
# 取消 y 刻度
mp.yticks([])
# x 轴居中
ax.spines['bottom'].set_position(('data', 0.5))

# 设置 x 轴的可视区域
mp.xlim(1, 10)

# 设置刻度定位器,每隔 1 一个主刻度,每隔 0.1 一个次刻度
# 主刻度
ax.xaxis.set_major_locator(mp.MultipleLocator(1))
# 次刻度
ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))

mp.show()


3.1 其他刻度定位器

python可视化图书采购组合图 python数据可视化课程设计_python

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

locators = [
    'mp.NullLocator()',
    'mp.MultipleLocator(1)',
    'mp.MaxNLocator(nbins=4)',
    'mp.FixedLocator(locs=[2,4,8,10])'
]

mp.figure('A', facecolor='lightgray')

for i, locator in enumerate(locators):
    mp.subplot(len(locators), 1, i+1)
    ax = mp.gca()
    ax.spines['top'].set_color('none')
    ax.spines['left'].set_color('none')
    ax.spines['right'].set_color('none')
    mp.yticks([])
    ax.spines['bottom'].set_position(('data', 0.5))

    # 设置 x 轴的可视区域
    mp.xlim(1, 10)

    # 设置刻度定位器,每隔 1 一个主刻度,每隔 0.1 一个次刻度
    # 主刻度
    ax.xaxis.set_major_locator(eval(locator))
    # 次刻度
    ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))

mp.show()


4. 区域填充

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


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

x = np.linspace(0, 8 * np.pi, 1000)
sin_x = np.sin(x)
cos_x = np.cos(x / 2) / 2

mp.figure('Fill', facecolor='gray')
mp.grid(linestyle=':')
mp.plot(x, sin_x, color='dodgerblue', label='y=sin(x)')
mp.plot(x, cos_x, color='orangered', label=r'$y=\frac{1}{2}cos(\frac{x}{2})$')
mp.fill_between(x, sin_x, cos_x, sin_x>cos_x, color='dodgerblue', alpha=0.3)
mp.fill_between(x, sin_x, cos_x, sin_x<cos_x, color='orangered', alpha=0.3)

mp.legend()
mp.show()


5. 散点图

5.1 散点图

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

5.2 散点图 API

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

生成一组正态分布的随机数:

n = 100
x = np.random.normal(期望值, 标准差, 数字生成数量)
y = np.random.normal(60, 10, n)
import numpy as np
import matplotlib.pyplot as mp
import matplotlib.gridspec as mg

n = 200
x = np.random.normal(175, 5, n)
y = np.random.normal(65, 10, n)

mp.figure('scatter', facecolor='gray')
mp.grid(linestyle=':')
mp.scatter(
    x, y,
    marker='o',
    alpha=0.7,
    color='dodgerblue',
    label='Samples',
    s = 80
)
mp.legend()
mp.show()


mp.scatter(
    x, y,
    marker='o',
    alpha=0.7,
    # color='dodgerblue',
    label='Samples',
    s = 80,
    c=x, # 每个样本的颜色值, 决定样本点颜色值
    cmap='jet' # 内置的颜色映射,数值越小越蓝,越大越红
)


内置颜色映射

python可视化图书采购组合图 python数据可视化课程设计_python可视化图书采购组合图_02