鱼C论坛

 找回密码
 立即注册
查看: 914|回复: 4

[Python] 求助求助,已知三列数据怎么画出三维曲面图

[复制链接]
发表于 2024-4-28 23:01:28 | 显示全部楼层 |阅读模式
20鱼币
求助各位大佬,第一列数据为X值,第二列数据为Y值,第三列数据有点特殊,是好几个Z值,不知道该怎么把相应的 7e26d3f410462a6df0f2caf5dec08b3.jpg X值Y值和Z值对应上,类似于下面这个图

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-28 23:01:49 | 显示全部楼层
哦,你的问题是如何使用已知的三列数据来绘制三维曲面图,对吗?

首先,我们需要导入绘图库matplotlib和numpy。然后,我们可以使用matplotlib中的`plot_surface`函数来绘制三维曲面图。

以下是一个示例代码,帮助你实现你的目标:
import matplotlib.pyplot as plt
import numpy as np

# 假设已有的三列数据分别为 x, y 和 z
x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]
z = [[1, 2, 3, 4, 5],    # 第1个点的多个Z值
     [6, 7, 8, 9, 10],   # 第2个点的多个Z值
     [11, 12, 13, 14, 15],
     [16, 17, 18, 19, 20],
     [21, 22, 23, 24, 25]]


# 将列表转换为numpy数组
x = np.array(x)
y = np.array(y)
z = np.array(z)

# 创建一个3D图形对象
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 绘制三维曲面图
ax.plot_surface(x, y, z)

# 标题和轴标签
ax.set_title("3D Surface Plot")
ax.set_xlabel("X Label")
ax.set_ylabel("Y Label")
ax.set_zlabel("Z Label")

# 显示图形
plt.show()

在这个例子中,我们假设x、y和z分别是三列数据的变量。我们使用numpy库将它们转换为numpy数组,然后使用matplotlib库中的`plot_surface`函数绘制三维曲面图。

希望这可以帮助到你!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-29 05:35:05 | 显示全部楼层
是要这个效果不:

CBBqrPTTTb.png

源代码:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 数据准备
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z1 = np.sin(np.sqrt(x**2 + y**2))
z2 = np.cos(np.sqrt(x**2 + y**2))

# 绘制
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 绘制两个曲面
surf1 = ax.plot_surface(x, y, z1, cmap='viridis', alpha=0.5)
surf2 = ax.plot_surface(x, y, z2, cmap='plasma', alpha=0.5)

# 设置标签和标题
ax.set_xlabel('X Coordinates')
ax.set_ylabel('Y Coordinates')
ax.set_zlabel('Z Values')
ax.set_title('Multiple 3D Surface Plots')

# 显示图形
plt.show()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-29 10:53:07 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 4 天前 | 显示全部楼层
要根据你所描述的三列数据绘制三维曲面图,关键在于正确地将 X、Y 和 Z 值对应起来。假设第一列是 X 值,第二列是 Y 值,第三列是多个 Z 值,需要确保 X、Y 和 Z 数据的形状能够匹配,一般需要将其转换为二维数组形式
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 模拟数据
x = np.linspace(-5, 5, 10)
y = np.linspace(-5, 5, 10)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))

# 创建一个 3D 图形
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 绘制三维曲面图
surf = ax.plot_surface(X, Y, Z, cmap='viridis')

# 添加颜色条
fig.colorbar(surf, shrink=0.5, aspect=5)

# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

# 显示图形
plt.show()数据生成:使用 np.linspace 生成 X 和 Y 的值,然后使用 np.meshgrid 函数将 X 和 Y 转换为二维网格,最后根据 X 和 Y 计算 Z 值。
创建 3D 图形:使用 plt.figure() 创建一个图形对象,然后使用 fig.add_subplot(111, projection='3d') 创建一个 3D 坐标轴。
绘制三维曲面图:使用 ax.plot_surface(X, Y, Z, cmap='viridis') 绘制三维曲面图,其中 cmap 参数指定颜色映射。
添加颜色条:使用 fig.colorbar(surf, shrink=0.5, aspect=5) 添加颜色条。
设置坐标轴标签:使用 ax.set_xlabel、ax.set_ylabel 和 ax.set_zlabel 设置坐标轴标签。
显示图形:使用 plt.show() 显示图形
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-2 05:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表