Matplotlib基础(1)

Matplotlib基础

本内容主要记录了Matplotlib的基础用法,实现可视化的内容不多,想看Matplotlib可视化的可以翻翻我的其他文章哦~

# 先导入库,我的matplotlib版本为2.2.3
import matplotlib.pyplot as plt

1. Matplotlib图像的结构:

1.1 Matplotlib图像分为4层结构:

  1. canvas(画板):位于最底层,导入Matplotlib库时就自动存在
  2. figure(画布):建立在canvas上,这一层可设置参数,如画布大小figure(figsize=(n,m))
  3. axes(子图):将figure分成不同块,实现分面绘画
  4. 表图信息(构图元素):添加或修改axes上的图形信息,优化图表的显示效果

1.1.1 关于 axes() 的用法:

# plt.axes((left, bottom, width, height), facecolor='w')
# 前两个参数代表了子图的位置,后两个参数代表了子图的大小,facecolor为子图背景颜色
plt.axes((0, 0, 0.1, 0.1), facecolor='b')
plt.axes((0, 1, 0.1, 0.1), facecolor='w')
plt.axes((1, 0, 0.1, 0.1), facecolor='r')
plt.axes((1, 1, 0.1, 0.1), facecolor='g')
plt.show()

结果显示:
在这里插入图片描述

关于axes()子图大小调整的区别:

powershell
plt.axes((0, 0, 1, 1), facecolor='b')
plt.axes((0, 1, 1, 1), facecolor='w')
plt.axes((1, 0, 1, 1), facecolor='r')
plt.axes((1, 1, 1, 1), facecolor='g')
plt.show()

结果显示:
在这里插入图片描述

由于没有设定画布figure()的大小,因此画布的大小是随机的。
子图的大小 1 与 0.1 的区别在于:
1:表示为在子图中 绘图的长度占子图 总长度 的 100%
0.1:表示在子图中的 绘图的长度 占子图 总长度 的10%

下图为在设定画布大小后,子图绘图长度为 10.1 的对比图:
在这里插入图片描述
在这里插入图片描述

1.1.2 以axes()方式构建子图,如何添加或修改axes上的图形信息

直接添加 ⊙A⊙ !!!

  • 需要注意的是,是在构建该子图后一步进行图形添加,不然图形添加的位置就不一定是你想要的位置了
x = [1,2,3,4,5]
y = [1,2,3,4,5]

plt.axes((0, 0, 0.9, 0.9))
plt.title('one')
plt.bar(x,y)

plt.axes((0, 1, 0.9, 0.9))
plt.title('two')
plt.scatter(x,y)

plt.axes((1, 0, 0.9, 0.9))
plt.title('three')
plt.plot(x,y)

plt.axes((1, 1, 0.9, 0.9))
plt.title('four')
plt.pie(y,labels=x,autopct='%.2f %%')

plt.show()

结果显示:
在这里插入图片描述

其他构建子图的方法:

plt.subplot(2,1,1)# 将画布划分成两行一列,取第一个放第一个图表内容

2. 绘图流程

  1. 导入模块
  2. 创建画布与创建子图(如不需子图可不创建)
  3. 添加画布内容
  4. 图形保存于展示

2.1 添加画布内容

调用Matplotlib中的pyplot模块,可添加各类标签、图例等函数。

函数作用
title在当前图形中添加标题,可以指定标题名称、位置、颜色、字体大小等参数
xlabel在当前图形中添加 x 轴名称,可以指定位置、颜色、字体大小等参数
ylabel在当前图形中添加 y 轴名称,可以指定位置、颜色、字体大小等参数
xlim指定当前图形 x 轴的范围,只能确定一个数值区间,而无法使用字符串识别
ylim指定当前图形 y 轴的范围,只能确定一个数值区间,而无法使用字符串识别
xticks指定 x 轴刻度的数目与取值
yticks指定 y 轴刻度的数目与取值
legend指定当前图形的图例,可以指定图例大小、位置、标签

2.2 图形保存与展示

图形保存:
matplotlib.pyplot.savefig()函数可保存图片到指定路径

图形展示:
matplotlib.pyplot.show()函数可展示图形

绘制函数y=x^2与y=x图形:

# 导入模块
import matplotlib.pyplot as plt 
import numpy as np 
x = np.linspace(0, 1, 1000) # 数据

# 创建画布。大小为6×6,像素为 80 
fig = plt.figure(figsize = (6, 6), dpi = 80)  
# 创建子图
fig.add_subplot(2, 1, 1)  # 分为2×1图形阵,选择第1张图片绘图 
# 添加画布内容
plt.title('y=x^2 & y=x')  # 添加标题 
plt.xlabel('x')  # 添加x轴名称‘x’ 
plt.ylabel('y')  # 添加y轴名称‘y’ 
plt.xlim((0, 1))  # 指定x轴范围(0,1) 
plt.ylim((0, 1))  # 指定y轴范围(0,1) 
plt.xticks([0, 0.3, 0.6, 1])  # 设置x轴刻度 
plt.yticks([0, 0.5, 1])  # 设置y轴刻度
plt.plot(x, x ** 2) 
plt.plot(x, x) 
plt.legend(['y=x^2', 'y=x'])  # 添加图例 
# 保存图片
plt.savefig('./整体流程绘图.png') # 路径可自定义
# 展示图片
plt.show()

结果展示:
在这里插入图片描述

2.3 自编函数绘图

# 自编函数绘图,并添加文本示例
def my_plotter(ax, x, y, param_dict):
    '''    
    ax 接收绘图对象     
    x  接收array 表示横轴数据 无默认值   
    y  接收array 表示纵轴数据 无默认值    
    param_dict 接收dict 表示传入参数 无默认值    
    '''    
    out = ax.plot(x, y, **param_dict)    
    return out 
# 以如下方式使用函数 
x = [0, 1, 2, 3, 4, 5, 6, 7, 8] 
y1 = x 
y2 = np.sin(x) 
fig, (ax1, ax2)= plt.subplots(1, 2)
my_plotter(ax1, x, y1, {'marker': 'x'}) 
my_plotter(ax2, x, y2, {'marker': 'o'}) 
plt.show()

结果显示:
在这里插入图片描述

2.4 如何在图形中添加文本标注

pyplot模块中,使用**matplotlib.pyplot.text()**函数能够在任意位置添加文本,其使用基本语法如下

matplotlib.pyplot.text(x, y, s, fontdict=None, withdash=False, **kwargs)

# 导入模块
import matplotlib.pyplot as plt 
import numpy as np 
x = np.linspace(0, 1, 1000) # 数据  
# 创建子图
fig.add_subplot(2, 1, 1)  # 分为2×1图形阵,选择第1张图片绘图 
# 添加画布内容
plt.title('y=x^2 & y=x')  # 添加标题 
plt.xlabel('x')  # 添加x轴名称‘x’ 
plt.ylabel('y')  # 添加y轴名称‘y’ 
plt.xlim((0, 1))  # 指定x轴范围(0,1) 
plt.ylim((0, 1))  # 指定y轴范围(0,1) 
plt.xticks([0, 0.3, 0.6, 1])  # 设置x轴刻度 
plt.yticks([0, 0.5, 1])  # 设置y轴刻度
plt.plot(x, x ** 2) 
plt.plot(x, x) 
plt.legend(['y=x^2', 'y=x'])  # 添加图例 
plt.text(x[500], x[500]**2, 'y=x^2')  # 在子图1添加‘y=x^2’
plt.text(x[500], x[500], 'y=x')  # 在子图1添加‘y=x’
plt.show()

结果展示:
在这里插入图片描述

# 构建数据
x = np.arange(12)
np.random.seed(123)# 设置随机种子,即保证y1,y2为固定值
y1 = np.random.random(12)
y2 = np.random.random(12)

plt.xlabel('x')
plt.ylabel('y')
plt.bar(x, y1, color = 'g')
plt.bar(x, -y2, color = 'c')
# 对每条条形图添加数据标注
for i,j in zip(x, y1):
    plt.text(i, j+0.01, '%.2f'%j, ha = 'center', va = 'bottom')
    # ha :文本居中;va : 文本位于空白区域下方
for i,j in zip(x, y2):
    plt.text(i, -j-0.01, '%.2f'%j, ha = 'center', va = 'top')
    # ha :文本居中;va : 文本位于空白区域上方
plt.show()

结果展示:
在这里插入图片描述

3. 绘图风格

通过print(plt.style.available)命令可以查看所有预设风格的名称,使用use函数就可以直接设置预设风格。

# 查看所有预设风格名称
print(plt.style.available)

结果展示:
在这里插入图片描述

# 设置预设风格
x = np.random.normal(0,1,1000)  # 生成1000个标准正态分布的数seaborn-colorblind
plt.style.use('seaborn-poster')
plt.hist(x, 100)
plt.show()

结果展示:
在这里插入图片描述

4. 动态rc参数

pyplot模块使用rc配置文件可以自定义图形的各种默认属性。

通过修改rc参数可以修改 默认的属性,包括窗体大小、每英寸的点数、线条宽度、颜色、样式、坐标轴、坐标和网络属性、文本、字体等 。

可通过使用以下命令查看默认配置:

import matplotlib
print(matplotlib.rc_params())
print(matplotlib.rcParamsDefault)
print(matplotlib.rcParams)

4.1 线条常用的rc参数

rc参数名称取值
lines.linewidth(线条宽度)取值0~10,默认1.5
lines.linestyle (线条样式)" - ", " – ", " -. ", " : " ,默认 " - "
lines.marker (线条上点的形状)" o ", " D ", " h ", " . ", " , ", " S " 默认None
lines.markersize (点的大小)取值0~10,默认1

lines.linestyle参数4种取值意义如下:
在这里插入图片描述
lines.marker参数的20种取值及其意义如下:
在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl 
pic = plt.figure(dpi = 80, figsize = (6, 6)) 
x = np.linspace(0, 1, 1000) 
# 绘制第一张图(从左往右从上到下) 
pic.add_subplot(2, 2, 1)  # 绘制2×2图形阵中第1张图片 
plt.rcParams['lines.linestyle'] = '-.'  # 修改线条类型 
plt.rcParams['lines.linewidth'] = 3  # 修改线条宽度 
plt.plot(x, x ** 2) 
plt.title('y = x^2') 
# 绘制第二张图 
pic.add_subplot(2, 2, 2) 
mpl.rc('lines', linestyle = '--', linewidth = 10)  # 以matplotlib.rc()函数命令 方式修改rc参数
plt.plot(x, x ** 2) 
plt.title('y = x^2') 
#  绘制第三张图 
pic.add_subplot(2, 2, 3) 
plt.rcParams['lines.marker'] = None  # 修改线条上点的形状 
plt.rcParams['lines.linewidth'] = 3 
plt.plot(x, x ** 2) 
plt.title('y = x^2') 
# 绘制第四张图 
pic.add_subplot(2, 2, 4) 
plt.rcParams['lines.linestyle'] = ':' 
plt.rcParams['lines.linewidth'] = 6 
plt.plot(x, x ** 2) 
plt.title('y = x^2') 
plt.show()

结果显示:
在这里插入图片描述

4.2 坐标轴常用的rc参数

更多的坐标轴常用的rc参数名称、解释、取值如下表所示
在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 1000) 
plt.plot(x, np.sin(x))
plt.show()

结果展示:
在这里插入图片描述

# 坐标轴常用的rc参数
plt.rcParams['axes.edgecolor'] = 'g'  # 轴颜色设置为蓝色 
plt.rcParams['axes.grid'] = True  # 添加网格 
plt.rcParams['axes.spines.top'] = False  # 去除顶部轴 
plt.rcParams['axes.spines.right'] = False  # 去除右侧轴 
plt.rcParams['axes.xmargin'] = 0.1  # x轴余留为区间长度的0.1倍 
plt.plot(x, np.sin(x)) 
plt.show()

结果展示:
在这里插入图片描述

4.3 字体常用的rc参数

除了字体与符号编码参数外,更多的字体常用rc参数名称、接收、取值

在这里插入图片描述

x = [-1,-2,0,1,2]
y = [-12,-3,11,9,15]
plt.title('散点图示例2')  # 添加标题
plt.xlabel('数据') # 添加x轴标签
plt.ylabel('数值') # 添加y轴标签
plt.xlim(-3, 3) # 设置x轴刻度范围
plt.ylim(-15,15) # 设置y轴刻度范围
plt.bar(x, y) # 绘制散点图
plt.show()

结果展示:
在这里插入图片描述

# 字体常用的rc参数
plt.rcParams['font.sans-serif'] = 'SimHei'  # 正常显示中文
plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
x = [-1,-2,0,1,2]
y = [-12,-3,11,9,15]
plt.title('散点图示例2')  # 添加标题
plt.xlabel('数据') # 添加x轴标签
plt.ylabel('数值') # 添加y轴标签
plt.xlim(-3, 3) # 设置x轴刻度范围
plt.ylim(-15,15) # 设置y轴刻度范围
plt.bar(x, y) # 绘制散点图
plt.show()

结果展示:
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值