2、matplotlib中的 ax=fig.add_axes([0,0,1,1])详解


转载请附原文地址,谢谢。

从结果的角度考察ax=fig.add_axes([0,0,1,1])的作用

1、前言:(可跳过)

虽然使用matplotlib.pyplot模块可以很容易地快速生成图,但建议使用面向对象的方法,因为它可以为你的图提供更多的控制和定制。大部分的函数也可以在matplotlib.axes.Axes类中使用。使用更正式的面向对象方法背后的主要想法是创建图对象,然后只需调用该对象的方法或属性。这种方法有助于更好地处理画布上有多个图的情况。

但是在面向对象的界面中,Pyplot只用于创建图形等少数功能,用户明确地创建并跟踪图形和轴对象。在这个层面上,用户使用Pyplot创建数字,通过这些数字,可以创建一个或多个轴对象。这些坐标轴对象就可以用于大多数绘图操作。

2、步骤

首先,我们还是先创建一个图的实例,既提供一个空的画布:

fig = plt.figure()

然后为图形添加轴。add_axes()方法需要一个由4个元素组成的list对象,分别对应图形的左、底、宽、高。每个数字必须在0和1之间。

ax=fig.add_axes([0,0,1,1])

到这里,不明白fig.add_axes([0,0,1,1])是怎么回事也没关系,下面直接看实例,分别改变0,0,1,1的数值,看一下图像的变化:
下面是初始代码块

from matplotlib import pyplot as plt
import numpy as np
import math
x = np.arange(0, math.pi*2, 0.05)
y = np.sin(x)
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.plot(x,y)
plt.show()

初始显示结果如下:
在这里插入图片描述
改动为 ax= fig.add_axes([0.8,0,1,1]),由下图的显示结果可知,改变第一个参数为0.8,图像从左往右移动了80%,只能看到图片左边20%的部分。
在这里插入图片描述
改动为ax = fig.add_axes([0,0.8,1,1]),由下图的显示结果可知,改变第二个参数为0.8,图像从下往上移动了80%。
在这里插入图片描述
改动为ax = fig.add_axes([0,0,0.5,1]),由下图的显示结果可知,改变第三个参数为0.5,图像在宽度方向上压缩了一半,且位置靠在最左边。
在这里插入图片描述
改动为ax = fig.add_axes([0,0,1,0.5]),由下图的显示结果可知,改变第四个参数为0.5,图像在高度方向上压缩了一半,且位置靠在最下边。
在这里插入图片描述
这有什么用呢,下面我们同时改变这四个参数,看一下效果:
此时ax = fig.add_axes([0.5,0.5,0.3,0…3]),由下图可以看出,利用这四个参数,我们可以在原来设定的画板上的任意位置进行贴图。
在这里插入图片描述

附:以上结果仅仅是在pycharm进行的,如果你是在jupyter notebook中进行的,也是一样的道理,如下截图所示:
在这里插入图片描述

<think>嗯,用户想了解matplotlib中的ax.plot_surface的用法和含义。首先,我需要回忆一下这个函数的基本作用。plot_surface主要用于绘制三维曲面图,对吧?它需要X、Y、Z三个二维数组来定义曲面的点。参数方面,用户可能关心的是rstride和cstride,这两个参数控制行和列的步长,影响曲面的网格密度。还有cmap参数,用来设置颜色映射,可能和颜色渐变有关。另外,edgecolor可以调整网格线的颜色,或者设为'none'去掉边线。接下来,我需要确认用户可能的背景。他们可能已经有一些Matplotlib的基础,但需要更深入地了解三维绘图部分。用户提供的引用中提到了曲面图的示例代码,比如使用plot_surface和plot_trisurf,所以可能需要对比这两个函数的区别。比如,plot_surface适用于规则网格数据,而plot_trisurf适合非结构化的数据。用户的需求是知道用法和示例,所以回答应该包括函数的基本语法、参数解释以及一个简单的示例。可能还需要提到如何生成X、Y网格数据,比如使用numpy的meshgrid函数。此外,用户可能想知道常见问题,比如为什么需要二维数组,或者如何处理数据格式的问题。还要注意引用中的内容,比如引用4提到了plot_trisurf的使用,可能需要说明plot_surface与之的不同。同时,用户可能遇到错误,比如数据维度不匹配,这时候需要强调X、Y、Z必须是二维的。另外,示例代码部分需要确保正确性,比如导入Axes3D,设置投影为3d,以及正确生成数据。可能还需要解释每个步骤的作用,比如创建画布、添加子图等。最后,生成的相关问题要围绕用户可能进一步探索的方向,比如调整曲面颜色、处理不规则数据、常见错误解决等。这些问题应该帮助用户深入理解plot_surface的应用场景和技巧。</think>### `ax.plot_surface` 用法与含义详解 `ax.plot_surface` 是 Matplotlib 中绘制三维曲面的核心函数,通过定义 $X$、$Y$、$Z$ 坐标生成连续曲面。以下是详细解析: --- #### 一、**函数语法与参数** ```python ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=None, edgecolor='k', alpha=1.0) ``` - **`X, Y, Z`**: 二维数组,表示三维坐标点。需通过 `np.meshgrid` 生成规则网格数据[^4]。 - **`rstride`/`cstride`**: 行/列方向采样步长,值越大网格越稀疏。例如 `rstride=5` 表示每隔5行取一个数据点[^3]。 - **`cmap`**: 颜色映射,如 `'viridis'`、`'jet'`,用于根据 $Z$ 值着色曲面[^2]。 - **`edgecolor`**: 曲面网格线颜色,设为 `'none'` 可隐藏边线[^3]。 --- #### 二、**基础示例** ```python import matplotlib.pyplot as plt import numpy as np # 生成数据 x = np.linspace(-5, 5, 100) y = np.linspace(-5, 5, 100) X, Y = np.meshgrid(x, y) Z = np.sin(np.sqrt(X**2 + Y**2)) # 定义曲面高度 # 绘图 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.plot_surface(X, Y, Z, rstride=2, cstride=2, cmap='viridis', edgecolor='none') ax.set_title('3D Surface Plot') plt.show() ``` ![示例图](https://via.placeholder.com/400x300/EEE/000?text=3D+Surface+Plot) *此代码生成一个正弦波纹曲面,使用 `viridis` 颜色映射并隐藏网格线*[^3][^4]。 --- #### 三、**核心注意事项** 1. **数据格式要求** - $X$、$Y$、$Z$ 必须是二维数组,且维度一致(如 $100 \times 100$)。 - 若数据非网格化,需使用 `np.meshgrid` 或 `ax.plot_trisurf`(适用于非结构化数据)[^4]。 2. **性能优化** - 减少网格密度(增大 `rstride`/`cstride`)可提升渲染速度。 - 对大数据集可采样后绘图。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

steelDK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值