Show Sidebar Hide Sidebar

# 3D Streamtube Plots in Python

How to make 3D streamtube plots in Python with Plotly.

### Introduction¶

In streamtube plots, attributes include x, y, and z, which set the coordinates of the vector field, and u, v, and w, which set the x, y, and z components of the vector field. Additionally, you can use starts to determine the streamtube's starting position.

### Basic Streamtube Plot¶

In [1]:
import plotly.graph_objects as go

fig = go.Figure(data=go.Streamtube(x=[0, 0, 0], y=[0, 1, 2], z=[0, 0, 0],
u=[0, 0, 0], v=[1, 1, 1], w=[0, 0, 0]))
fig.show()


### Starting Position and Segments¶

By default, streamlines are initialized in the x-z plane of minimal y value. You can change this behaviour by providing directly the starting points of streamtubes.

In [2]:
import plotly.graph_objects as go

import pandas as pd

fig = go.Figure(data=go.Streamtube(
x = df['x'],
y = df['y'],
z = df['z'],
u = df['u'],
v = df['v'],
w = df['w'],
starts = dict(
x = [80] * 16,
y = [20,30,40,50] * 4,
z = [0,0,0,0,5,5,5,5,10,10,10,10,15,15,15,15]
),
sizeref = 0.3,
colorscale = 'Portland',
showscale = False,
maxdisplayed = 3000
))

fig.update_layout(
scene = dict(
aspectratio = dict(
x = 2,
y = 1,
z = 0.3
)
),
margin = dict(
t = 20,
b = 20,
l = 20,
r = 20
)
)

fig.show()