繁体   English   中英

使用 Plotly 绘制动画 3D 曲面图

[英]Animated 3D Surface Plots with Plotly

对于研究数据可视化,我想在 Plotly 中制作一个动画 3D 曲面图。 目标是查看盒子中温度随时间的变化。 但我不知道如何动画它。

在这一刻,我只有在给定的时间我的情节。 这是我的代码:

import plotly
import plotly.graph_objects as go
#import plotly.express as px
import pandas as pd
#import numpy as np

#read CSV
z_data = pd.read_csv('data1.csv')# Read data from a csv

fig = go.Figure(data=[go.Surface(z=z_data.values)])

#projection 2D
fig.update_traces(contours_z=dict(show=True, usecolormap=True,
                                  highlightcolor="tomato", project_z=True),
                                  colorscale='portland')

#fig
fig.update_layout(title='data HEATPILES', autosize=False, width=650, height=500, margin=dict(l=0, r=0, b=0, t=0))

#show
plotly.offline.plot(fig)

这是给你的完整代码:

import pandas as pd
import plotly.graph_objects as go

z_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv').values
print(z_data)
z_data2 = z_data * 1.1
z_data3 = z_data * 1.2
z_data4 = z_data * 0.5

z_data_list = []
z_data_list.append(z_data)
z_data_list.append(z_data2)
z_data_list.append(z_data3)
z_data_list.append(z_data4)
z_data_list.append(z_data)
z_data_list.append(z_data2)
z_data_list.append(z_data3)
z_data_list.append(z_data4)

fig = go.Figure(
    data=[go.Surface(z=z_data_list[0])],
    layout=go.Layout(updatemenus=[dict(type="buttons", buttons=[dict(label="Play", method="animate", args=[None])])]),
     frames = [go.Frame(data=[go.Surface(z=k)], name=str(i)) for i, k in enumerate(z_data_list)]
)

fig.update_traces(contours_z=dict(show=True, usecolormap=True, highlightcolor="tomato", project_z=True), colorscale='portland')

fig.update_layout(title='data HEATPILES', autosize=False, width=650, height=500, margin=dict(l=0, r=0, b=0, t=0))

def frame_args(duration):
    return {
            "frame": {"duration": duration},
            "mode": "immediate",
            "fromcurrent": True,
            "transition": {"duration": duration, "easing": "linear"},
        }

sliders = [
            {
                "pad": {"b": 10, "t": 60},
                "len": 0.9,
                "x": 0.1,
                "y": 0,
                "steps": [
                    {
                        "args": [[f.name], frame_args(0)],
                        "label": str(k),
                        "method": "animate",
                    }
                    for k, f in enumerate(fig.frames)
                ],
            }
        ]


fig.update_layout(
    sliders=sliders
)


import plotly.io as pio

ii = 1
pio.write_html(fig, file="Live3D_"+str(ii)+".html", auto_open=True)
# plotly.offline.plot(fig)

经过良好的研究后,我构建了此代码来绘制适当的平滑 3D 曲面图。 只需将 data_frame 放入此函数中。 您将获得适当的平滑曲面图。 如果您遇到任何错误,只需从 data_frame 中选择那些数字特征。

'data_frame = data_frame.select_dtypes(include='number')'

from scipy import interpolate
from mpl_toolkits.mplot3d import axes3d, Axes3D

def surface(data_frame, title=None, title_x=0.5, title_y=0.9):

    X, Y = np.mgrid[-10:10:complex(0,data_frame.shape[0]), 
-10:10:complex(0,data_frame.shape[1])]
    Z = data_frame.values

    xnew, ynew = np.mgrid[-1:1:80j, -1:1:80j]
    tck = interpolate.bisplrep(X, Y, Z, s=0)
    znew = interpolate.bisplev(xnew[:,0], ynew[0,:], tck)

    fig = go.Figure(data=[go.Surface(z=znew)])
    fig.update_layout(template='plotly_dark', 
                      width=800, 
                      height=800,
                      title = title,
                      title_x = title_x, 
                      title_y = title_y
                     )
    return fig

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM