【发布时间】:2017-12-13 18:17:21
【问题描述】:
假设我有 3 个数据框,其中包含有关对象的纬度、经度和时间标签的信息,这样每一列代表一个不同的对象,每一行代表一个时间点。
latitudes =
object 1 2 3
0 -8.064267 -8.047483 -8.056339
1 -8.064267 -8.047483 -8.056339
2 -8.064267 -8.047483 -8.056339
3 -8.064267 -8.047483 -8.056339
4 -8.064267 -8.047483 -8.056339
5 -8.064267 -8.047483 -8.056339
longitudes =
object 1 2 3
0 -34.878386 -34.904086 -34.889661
1 -34.878386 -34.904086 -34.889661
2 -34.878386 -34.904086 -34.889661
3 -34.878386 -34.904086 -34.889661
4 -34.878386 -34.904086 -34.889661
5 -34.878386 -34.904086 -34.889661
times =
object 1 2 3
0 2016-03-05 07:52:00 2016-03-05 16:26:00 2016-03-05 16:58:00
1 2016-03-05 08:19:00 2016-03-05 16:42:00 2016-03-05 17:45:00
2 2016-03-05 08:52:00 2016-03-05 17:06:00 2016-03-05 17:58:00
3 2016-03-05 09:36:00 2016-03-05 18:21:00 2016-03-05 18:23:00
4 NaT 2016-03-05 23:06:00 2016-03-05 22:38:00
5 NaT 2016-03-05 23:09:00 NaT
我想绘制一个 3D 轨迹,时间在 z 轴上,经度在 x 轴上,纬度在 y 轴上,所有物体的轨迹都在同一个图上。我该怎么做?
这是我的尝试,但它不起作用:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111,projection='3d')
ax.plot(longitudes.values,latitudes.values,times.values)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('Time')
plt.show()
错误:
ValueError: third arg must be a format string
谢谢
【问题讨论】:
-
对于二维绘图,第三个参数保留给标记类型,使用字符串指定。我认为您收到了默认错误消息,因为数组 times.values 不被理解。这个数组的类型是什么?它看起来像日期时间或类似的东西。您是否尝试在调用 plot 之前将其转换为浮点数?
-
它实际上是一个对象,因为除了日期时间值之外还有一些 NaT。
-
我建议您提供问题的minimal reproducible example,可以复制并运行以重现错误。否则,解决方案将需要做出假设,这可能对您的情况有效,也可能无效。
-
@ImportanceOfBeingErnest 我编辑了问题并在“times”数据框中添加了“NaT”值,所以它应该是 MCV。
-
不,这不是minimal reproducible example,我花了很长时间才重现这个问题。请参阅我的回答,了解 minimal reproducible example 的外观 - 它可以被复制和运行。
标签: python python-3.x pandas matplotlib mplot3d