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

plupiseo  于 2022-11-15  发布在  Python
关注(0)|答案(2)|浏览(122)

!!!〉〉我是一个新手,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

等等。
有没有办法说“从那个.csv中绘制x1,y1,z1到x29,y29,z29”?

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()

提前感谢!

bvhaajcl

bvhaajcl1#

是的,根据您的代码,这些代码将事物标记为xx2等...因此,逻辑是:
1.使用for循环迭代数字
1.使用f字符串使事情变得更容易。
代码如下:

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}")
cidc1ykv

cidc1ykv2#

因为它是一个固定的行数,所以你可以在一个范围内迭代来得到值。如果它不是固定的,你可以计算行数,然后用它来设置范围。

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的评论

相关问题