IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Matplotlib(含代码演示) -> 正文阅读

[游戏开发]Matplotlib(含代码演示)

参考说明:

1.matplotlib官方教程
2.AI算法工程师手册
3.dts手册

先体验一下简单的绘图:

# 导包
import matplotlib.pyplot as plt
import numpy as np

#法一:
fig, ax = plt.subplots()  # 创建一个包含一个axes的figure
ax.plot([1, 2, 3, 4], [1, 4, 2, 3])  # 绘制图像

#法二:
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
# matplotlib.pyplot方法能够直接在当前axes上绘制图像,
# 如果用户未指定axes,matplotlib会帮你自动创建一个。
# 所以上面的例子也可以简化为以下这一行代码。

Figure的组成:

Figure:顶层级,用来容纳所有绘图元素
Axes:matplotlib宇宙的核心,容纳了大量元素用来构造一幅幅子图,一个figure可以由一个或多个子图组成
Axis:axes的下属层级,用于处理所有和坐标轴,网格有关的元素
Tick:axis的下属层级,用来处理所有和刻度有关的元素

两种绘图接口:

显式创建figure和axes,在上面调用绘图方法,也被称为OO模式(object-oriented style)(比如法一)
依赖pyplot自动创建figure和axes,并绘图(比如法二)

matplotlib的三层api:

类比人的画图过程,matplotlib有三个层次的API:
matplotlib.backend_bases.FigureCanvas 代表了绘图区,所有的图像都是在绘图区完成的(准备一块画布或画纸)
matplotlib.backend_bases.Renderer 代表了渲染器,可以近似理解为画笔,控制如何在 FigureCanvas 上画图(准备好颜料、画笔等制图工具)
matplotlib.artist.Artist 代表了具体的图表组件,即调用了Renderer的接口在Canvas上作图。

Artist的类型:

primitive是基本要素,它包含一些我们要在绘图区作图用到的标准图形对象,如曲线Line2D,文字text,矩形Rectangle,图像image等。
container是容器,即用来装基本要素的地方,包括图形figure、坐标系Axes和坐标轴Axis。

primitives:

先区分一下primitives和container
primitives是基本要素,它包含一些我们要在绘图区作图用到的标准图形对象,如曲线Line2D,文本text,矩形Rectangle,图像image等。
container是容器,即用来装基本要素的地方,包括图形figure、坐标系Axes和坐标轴Axis。

2DLines:

曲线的绘制,主要是通过类 matplotlib.lines.Line2D 来完成的,它的基类: matplotlib.artist.Artist

其中常用的的参数有:

xdata:需要绘制的line中点的在x轴上的取值,若忽略,则默认为range(1,len(ydata)+1)
ydata:需要绘制的line中点的在y轴上的取值
linewidth:线条的宽度
linestyle:线型
color:线条的颜色
marker:点的标记,详细可参考markers API
markersize:标记的size

举个列子:

在这里插入图片描述

patches

matplotlib.patches.Patch类是二维图形类。它的基类是matplotlib.artist.Artist(这里只说常用的)

Rectangle-矩形

Rectangle矩形类在官网中的定义是: 通过锚点xy及其宽度和高度生成。 Rectangle本身的主要比较简单,即xy控制锚点,width和height分别控制宽和高。

1.hist-直方图(参数+代码)

参数:
x: 数据集,最终的直方图将对数据集进行统计
bins: 统计的区间分布
range: tuple, 显示的区间,range在没有给出bins时生效
density: bool,默认为false,显示的是频数统计结果,为True则显示频率统计结果,这里需要注意,频率统计结果=区间数目/(总数*区间宽度),和normed效果一致,官方推荐使用density
histtype: 可选{‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’}之一,默认为bar,推荐使用默认配置,step使用的是梯状,stepfilled则会对梯状内部进行填充,效果与bar类似
align: 可选{‘left’, ‘mid’, ‘right’}之一,默认为’mid’,控制柱状图的水平分布,left或者right,会有部分空白区域,推荐使用默认
log: bool,默认False,即y坐标轴是否选择指数刻度
stacked: bool,默认为False,是否为堆积状图
代码:

import matplotlib.pyplot as plt
import numpy as np
x=np.random.randint(0,100,100) #生成【0-100】之间的100个数据,即 数据集
bins=np.arange(0,101,10) #设置连续的边界值,即直方图的分布区间[0,10],[10,20]...
plt.hist(x,bins,color='fuchsia',alpha=0.5)#alpha设置透明度,0为完全透明
plt.xlabel('scores') 
plt.ylabel('count')
plt.xlim(0,100)#设置x轴分布范围 plt.show()
2.bar-柱状图

参数:
left:x轴的位置序列,一般采用range函数产生一个序列,但是有时候可以是字符串
height:y轴的数值序列,也就是柱形图的高度,一般就是我们需要展示的数据;
alpha:透明度,值越小越透明
width:为柱形图的宽度,一般这是为0.8即可;
color或facecolor:柱形图填充的颜色;
edgecolor:图形边缘颜色
label:解释每个图像代表的含义,这个参数是为legend()函数做铺垫的,表示该次bar的标签
代码:

import matplotlib as mpl
y = range(1,17)
plt.bar(np.arange(16), y, alpha=0.5, width=0.5, color='yellow', edgecolor='red', label='The First Bar', lw=3)

Wedge-契形

matplotlib.patches.Polygon类是多边形类。其基类是matplotlib.patches.Patch。一个Wedge-契形 是以坐标x,y为中心,半径为r,从θ1扫到θ2(单位是度)。
主要参数:
x:契型的形状,一维数组。
explode:如果不是等于None,则是一个len(x)数组,它指定用于偏移每个楔形块的半径的分数。
labels:用于指定每个契型块的标记,取值是列表或为None。
colors:饼图循环使用的颜色序列。如果取值为None,将使用当前活动循环中的颜色。
startangle:饼状图开始的绘制的角度。
饼状图代码:

import matplotlib.pyplot as plt
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10]
explode = (0, 0.8, 0, 0)
fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True, startangle=90)
ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.
plt.show()

errorbar绘制误差折线图:

pyplot里有个专门绘制误差线的功能,通过errorbar类实现,这个可以很好的和机器学习相结合

其中最主要的参数是前几个:

x:需要绘制的line中点的在x轴上的取值
y:需要绘制的line中点的在y轴上的取值
yerr:指定y轴水平的误差
xerr:指定x轴水平的误差
ecolor:指定error bar的颜色
elinewidth:指定error bar的线条宽度

比如sin函数每次误差加0.02
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
x = np.arange(0.0, 1.0, 0.01)
y = np.sin(2*np.pi*t)
yerr = np.arange(0.0, 2.0, 0.02)
plt.errorbar(x, y , yerr=yerr, label='both limits (default)')

matplotlib标准用法:

1.创建一个Figure实例
2.使用Figure实例创建一个或者多个Axes或Subplot实例
3.使用Axes实例的辅助方法来创建primitive或者container
以sin函数为例子:

import matplotlib.pyplot as plt
import numpy as np

# matplotlib.pyplot.figure()创建Figure实例
fig = plt.figure()

# 然后用Figure实例创建了一个两行一列(即可以有两个subplot)的绘图区,
# 并同时在第一个位置创建了一个subplot
ax = fig.add_subplot(2, 1, 1) # two rows, one column, first plot

# 然后用Axes实例的方法画了一条曲线
t = np.arange(0.0, 1.0, 0.01)
s = np.sin(2*np.pi*t)
line, = ax.plot(t, s, color='blue', lw=2)

子图

法一:plt.subplots (均匀)

简介:

plt.subplots 的返回元素分别是画布和子图构成的列表,figsize 参数可以指定整个画布的大小,sharex 和 sharey 分别表示是否共享横轴和纵轴刻度,tight_layout 函数可以调整子图的相对大小使字符不会重叠

简单实现:

fig, axs = plt.subplots(2, 5, figsize=(10, 4), sharex=True, sharey=True)
fig.suptitle('样例1', size=20)
for i in range(2):
    for j in range(5):
        axs[i][j].scatter(np.random.randn(10), np.random.randn(10))
        axs[i][j].set_title('第%d行,第%d列'%(i+1,j+1))
        axs[i][j].set_xlim(-5,5)
        axs[i][j].set_ylim(-5,5)
        if i==1: axs[i][j].set_xlabel('横坐标')
        if j==0: axs[i][j].set_ylabel('纵坐标')
fig.tight_layout()

法二:GridSpec(非均匀)

简介:

所谓非均匀包含两层含义,第一是指图的比例大小不同但没有跨行或跨列,第二是指图为跨列或跨行状态。利用 add_gridspec 可以指定相对宽度比例 width_ratios 和相对高度比例参数 height_ratios。

matplotlib的绘图样式(style)

内置风格:

查看方法:

print(plt.style.available)

比如我想使用内置的ggplot风格,代码如下:

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

plt.style.use('ggplot')
plt.plot([1,2,3,4],[2,3,4,5])

自定义风格:
在任意路径下创建一个后缀名为mplstyle的样式清单,编辑文件添加以下样式内容

axes.titlesize : XX
axes.labelsize : XX
lines.linewidth : XX
lines.markersize : XX
xtick.labelsize : XX
ytick.labelsize : XX

XX为我们要定义的数值
plt.style.use(‘l路径名’)即可调用

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 11:52:21  更:2022-05-05 11:52:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:33:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码