如何在 pandas / matplotlib 中绘制多条线

Posted

技术标签:

【中文标题】如何在 pandas / matplotlib 中绘制多条线【英文标题】:How to plot multiple lines within pandas / matplotlib for 【发布时间】:2022-01-19 13:47:06 【问题描述】:

我有以下结构的数据:

0  0 0 0 1 0 1 4 8 0 9
1  0 1 4 2 3 4 5 1 2 4
2  1 4 2 9 4 5 2 4 5 6 

(这会持续 100 行,总共有 48 列)

第一列的时间间隔在 0 到 100 之间,每一列显示两个相互作用粒子之间的接触次数。例如。第 5 列显示在 t=0 时发生 1 次接触,在 t=1 时发生 2 次接触等。 我想在 3D 线图中表示每个粒子随时间变化的接触次数。 我认为在 x 轴上有时间(第 0 列),在 z 轴上有接触数,在 y 轴上有相应的粒子数(第 1 到 n 列)。 我对 python 比较陌生,看到 matplotlib/pandas 提供了一些从表格文件输入数据并以 3D 绘图的可能性。所以这是我到目前为止所做的:

import matplotlib.pyplot as plt
import pandas as pd
from mpl_toolkits.mplot3d import Axes3D
data=pd.read_table(path, delim_whitespace=True, header=None)
x_data=data.iloc[0:100, 0:1]
z_data=data.iloc[0:100, 1:]
y_data=np.arange(1, 47, 1)
ax = plt.axes(projection="3d")
ax.plot(x_data, y_data, z_data)
plt.show()

x_data、y_data 和 z_data 分配具有我希望它们拥有的确切数据(检查,例如 print(z_data))。但是关于绘图的脚本的最后部分失败并出现以下错误: ValueError: 输入操作数的维度超过了轴重新映射所允许的维度

我是不是把输入数据拼接错了?还是不能像 3D 可视化那样使用绘图功能?我已经看到它需要一个网格网格来处理两个值,然后是一个函数来处理第三个值 - 但是,我不知道如何以这种方式表达我的数据。 非常感谢任何帮助!

【问题讨论】:

为什么需要 3D 绘图?对于每列具有不同颜色的简单 2D 图呢?我怀疑它会更容易理解 3D 情节 您好,感谢您的建议!不同颜色的问题在于,有 47 条不同的线可以用部分重叠的数据点绘制。我认为这将是非常难以理解的。 【参考方案1】:

以下是您如何绘制 3D 绘图,请注意可读性。

import matplotlib.pyplot as plt
import pandas as pd
from mpl_toolkits.mplot3d import Axes3D

#data= here your code to read data

x_data=data.iloc[:,0].to_numpy()
n = len(data)
ax =  plt.figure().add_subplot(projection="3d")
for i, col in enumerate(data.columns[1:],1):
    ax.plot(x_data, [i]*n, data[col].to_numpy())
plt.show()

【讨论】:

非常感谢!这就像一个魅力!

以上是关于如何在 pandas / matplotlib 中绘制多条线的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中使用 matplotlib 和 pandas 绘制 CSV 数据

如何获取“matplotlib”、“numpy”、“scipy”、“pandas”等的存根文件?

Pandas、matplotlib 和 plotly - 如何修复系列图例?

如何使用 Matplotlib、pandas 和 sklearn 创建线性回归图?

如何系统地学习Python 中 matplotlib,numpy,scipy,pandas

如何系统地学习Python 中 matplotlib,numpy,scipy,pandas