在(X,Y,Z)坐标图上包含时间标签

时间:2019-07-20 01:52:22

标签: python matplotlib data-visualization

我有一个数据框飞行数据,其中包含X,Y和Z位置坐标以及时间。我想创建一个3D图,我可以:

1)将鼠标悬停在每个散点上,并在该点上显示X,Y,Z和时间

OR

2)在特定点添加注释。例如,为时间> 900和X <500的所有点添加注释。

我也愿意接受任何其他可以提供类似可视化效果的方法。到目前为止,我使用颜色条显示轨迹移动过程中时间的增加,但是我需要给出更详细的可视化信息。

编辑:显然,我要解决的主要问题是如何用数据帧的每一行(即X,Y,Z和时间)中的所有信息注释每个数据点。

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

data = pd.DataFrame({"X": np.linspace(0,500,1001), 
                     "Y": np.linspace(100,1000,1001), 
                     "Z": np.linspace(0,100,1001),
                     "Time": np.linspace(0,1000,1001)})

fig = plt.figure()
ax = plt.axes(projection = "3d")
img = ax.scatter(data.X, data.Y, data.Z, c = data.Time, cmap = "Greens")
fig.colorbar(img)
plt.show()

Example

1 个答案:

答案 0 :(得分:1)

对于悬停数据,您可以使用plotly完成。从最新版本开始,您可以使用plotly.express中捆绑的plotly

import pandas as pd
import numpy as np
import plotly.express as px

data = pd.DataFrame({"X": np.linspace(0,500,1001),
                     "Y": np.linspace(100,1000,1001),
                     "Z": np.linspace(0,100,1001),
                     "Time": np.linspace(0,1000,1001)})

fig = px.scatter_3d(data, x = "X", y = "Y", z = "Z", hover_data = ["Time"])

# your plot will be rendered in your browser
fig.show()

如果您使用的是plotly的旧版本,或者不想使用express语法,则可以使用以下方法实现相同的目的:

import plotly.graph_objects as go
import pandas as pd
import numpy as np

data = pd.DataFrame({"X": np.linspace(0,500,1001),
                     "Y": np.linspace(100,1000,1001),
                     "Z": np.linspace(0,100,1001),
                     "Time": np.linspace(0,1000,1001)})

fig = go.Figure(
    data = [
        go.Scatter3d(
            x = data["X"], 
            y = data["Y"], 
            z = data["Z"], 
            mode = "markers"
        ),
        hover_data = ["Time"]
    ]
)


fig.show()