如何在 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 创建线性回归图?