matplotlib 多个x,y,z值-有没有办法把它们写得很短?

3okqufwl  于 2023-05-01  发布在  其他
关注(0)|答案(2)|浏览(124)

!!〉〉我是一个完全的新手,我在3个小时前打开了matplotlib,并在这里自学。如果你引入任何新的命令/行,请让我知道他们叫什么,这样我就可以查找教程,谢谢!
试图:绘制轨迹/线的3D图
问题:我有一个。csv文件,包含29组x y z数据点,49行(时间点)。也就是说,我在49个时间点上跟踪3D空间中的29个粒子。列标题ATM是“x1,y1,z1,x2,y2,z2”。3D部分不是问题,但我对写出70多行同样的东西不感兴趣。
我宁愿不写:

x = points['x'].values
x2 = points['x2'].values
x3 = points['x3'].values
...
x29 = points['x29'].values

等等
有没有一种方法可以说“从x1,y1,z1到x29,y29,z29。csv”代替?

from mpl_toolkits.mplot3d import Axes3D
import sys
import matplotlib.pyplot as plt
import pandas
import numpy as np

points = pandas.read_csv('D:Documents\PYTHON_FILES/test3d.csv')

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

x = points['x'].values
y = points['y'].values
z = points['z'].values

x2 = points['x2'].values
y2 = points['y2'].values
z2 = points['z2'].values

ax.plot(x, y, z, c='red', marker='o', linewidth=1.0, markersize=2)
ax.plot(x2, y2, z2, c='blue', marker='o', linewidth=1.0, markersize=2)

plt.show()
olmpazwi

olmpazwi1#

是的,基于你的代码,它们有标记为xx2等的东西。所以逻辑是
1.使用for循环迭代数字
1.使用f-string使事情更容易。
代码如下:

for i in range(1, 30):
    if i == 1: i = '' #x is your first value not x1
    ax.plot(points[f"x{i}"], points[f"y{i}"], points[f"z{i}"], c='red', marker='o', linewidth=1.0, markersize=2)

F字符串基本上是字符串,但带有变量。您可以在字符串之前写入f,并使用{}括号添加变量。注意,它们给予了相同的输出:

a = "!"
print("Hello"+a)
print(f"Hello{a}")
yr9zkbsy

yr9zkbsy2#

因为它的行数是固定的,所以你可以遍历一个范围来获取值。如果它不是固定的,您可以计算行数并使用它来设置范围。

for idx in range(29):
   suffix = '' if idx == 0 else str(idx + 1) # ranges start at 0
   x = points[f"x{suffix}"].values 
   y = points[f"y{suffix}"].values
   z = points[f"z{suffix}"].values

   ax.plot(x, y, z, c='red', marker='o', linewidth=1.0, markersize=2)

plt.show()

更新:回应@TheMyth的评论

相关问题