Python学习笔记八之matplotlib绘制三维图

本文介绍了如何使用Python的matplotlib库绘制3D散点图,包括从CSV读取数据绘制石头点,并结合ROI数据添加立体框。首先,通过CSV文件加载石头点坐标,然后演示了如何添加边框以突出显示区域范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.绘制散点图(读取csv)

import csv  # 导入csv模块
import matplotlib.pyplot as plt

#绘制石头三位点
file1 = './file/stone_points.csv'
with open(file1) as f:
    reader = csv.reader(f)
    header_row = next(reader)  # 返回文件的下一行,在这便是首行,即文件头

    fig = plt.figure(1)
    #fig = plt.subplot(1, 2, 1)
    ax = fig.add_subplot(111, projection='3d')

    data1=[]
    for ret in reader:
        x=float(ret[0])
        y=float(ret[1])
        z=float(ret[2])
        data1.append([x,y,z])
        print(x," ",y," ",z)

        ax.scatter(x,y,z,('r', 'o', -50, -25))

    ax.set_xlabel('X Label')
    ax.set_ylabel('Y Label')
    ax.set_zlabel('Z Label')
    plt.title(file1)
    plt.show()

在这里插入图片描述
2.绘制散点图+立体框

import matplotlib.pyplot as plt

file1=".\\file\\stone_points.txt"
file2=".\\file\\rois.txt"

#绘制石头+立体框

#石头坐标
stone_p=open(file1,"r",encoding='utf-8').readlines()
print(stone_p)
x,y,z=[],[],[]
for str in stone_p:
    point=str.split("\t")
    #print(point)
    x.append(int(point[0]))
    y.append(int(point[1]))
    z.append(int(point[2]))

#读取立体框
bevel=open(file2,"r",encoding='utf-8').readline()
ret=bevel.split("\t")
x_min,y_min,z_min,l,w,h=int(ret[0]),int(ret[1]),int(ret[2]),int(ret[3]),int(ret[4]),int(ret[5])
p0=[x_min,y_min,z_min]
p1=[x_min+l,y_min,z_min]
p2=[x_min+l,y_min+w,z_min]
p3=[x_min,y_min+w,z_min]
p4=[x_min,y_min,z_min+h]
p5=[x_min+l,y_min,z_min+h]
p6=[x_min+l,y_min+w,z_min+h]
p7=[x_min,y_min+w,z_min+h]


#画图
ax1=plt.axes(projection="3d")
ax1.scatter(x,y,z,cmap="Blues")
ax1.scatter(x,y,z)
ax1.plot3D([p0[0],p1[0],p2[0],p3[0],p0[0]],[p0[1],p1[1],p2[1],p3[1],p0[1]],[p0[2],p1[2],p2[2],p3[2],p0[2]],color="green")
ax1.plot([p4[0],p5[0],p6[0],p7[0],p4[0]],[p4[1],p5[1],p6[1],p7[1],p0[1]],[p4[2],p5[2],p6[2],p7[2],p4[2]],color="green")
ax1.plot([p0[0],p4[0]],[p0[1],p4[1]],[p0[2],p4[2]],color="green")
ax1.plot([p1[0],p5[0]],[p1[1],p5[1]],[p1[2],p5[2]],color="green")
ax1.plot([p2[0],p6[0]],[p2[1],p6[1]],[p2[2],p6[2]],color="green")
ax1.plot([p3[0],p7[0]],[p3[1],p7[1]],[p3[2],p7[2]],color="green")

ax1.set_xlabel("X")
ax1.set_ylabel("Y")
ax1.set_zlabel("Z")
ax1.invert_yaxis()
plt.show()

在这里插入图片描述

根据提供的引用内容,可以使用Python根据CSV文件绘制三维图,其中Z轴可以表示时间。首先,需要导入所需的库,如csvmatplotlib.pyplot。然后,读取CSV文件提取所需的数据。接下来,使用matplotlib的3D绘图功能来创建一个三维图形空间。最后,使用scatter或bar3d函数绘制数据点或柱状图,其中Z轴可以表示时间。以下是一个示例代码: ```python import csv import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 读取CSV文件 file = './file/stone_points.csv' with open(file) as f: reader = csv.reader(f) header_row = next(reader) data = \[\] for row in reader: x = float(row\[0\]) y = float(row\[1\]) z = float(row\[2\]) data.append(\[x, y, z\]) # 创建三维图形空间 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 绘制散点图或柱状图 x = \[row\[0\] for row in data\] y = \[row\[1\] for row in data\] z = \[row\[2\] for row in data\] # 使用scatter函数绘制散点图 ax.scatter(x, y, z) # 使用bar3d函数绘制柱状图 # ax.bar3d(x, y, 0, 1, 1, z) # 设置坐标轴标签 ax.set_xlabel('X Label') ax.set_ylabel('Y Label') ax.set_zlabel('Z Label') # 显示图形 plt.show() ``` 请注意,根据具体需求,可以选择使用scatter函数绘制散点图或使用bar3d函数绘制柱状图。同时,可以根据需要对图形进行进一步的自定义和美化。 #### 引用[.reference_title] - *1* [Python学习笔记matplotlib绘制三维图](https://blog.youkuaiyun.com/yohnyang/article/details/126192613)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【Python绘制三维立体图](https://blog.youkuaiyun.com/qq_32532663/article/details/113945947)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

明月醉窗台

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

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

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

打赏作者

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

抵扣说明:

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

余额充值