我有一个数据框飞行数据,其中包含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()
答案 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()