# Can someone suggest a more elegant way of doing this?

Hi.
This question is more of a conceptual question than a coding question.
Iâ€™m trying to draw a â€śtunnelâ€ť around the price of a stock (Apple in this example). The upper boundary on any particular day is the highest price achieved in the n days before (20 in the example). The lower boundary is the lowest price. I begin by adding columns to the pandas dataframe for the Highest High (HH) and Lowest Low (LL).

I did manage to code this using scatter3d, but the chart looks awfully â€śbusyâ€ť. Comment out line 8 and and the issue becomes even more pronounced.

I also had another go using Surface, with four â€śwallsâ€ť around the price. But still, a lot of traces in the chart!

So my question is: is there a more elegant way of visualizing this data? Plotlyâ€™s mesh3d perhaps? What would a data scientist have used to?

``````import plotly.graph_objects as go
import pandas as pd

df["HH"] = df["AAPL.High"].rolling(20).max() #the highest price in the 20 days before each trading day
df["LL"] = df["AAPL.Low"].rolling(20).min()  #the lowest price

df = df.tail(50) #comment out this line and the issue becomes more evident

fig = go.Figure()

#close price as a lines scatter in the middle of the chart
fig.add_scatter3d(x = df.index*0 + len(df)/2, #just so the price centers in mid-chart
y = df["Date"],
z = df["AAPL.Close"],
mode = "lines",
line = dict(width = 4),
)

#for each date, drawing a rectangle around the price showing (HH) and lower boundaries
for i in range(0, len(df)):
xs = [ 0,                  len(df),            len(df),            0,                  0                  ]
ys = [ df.iloc[i]['Date'], df.iloc[i]['Date'], df.iloc[i]['Date'], df.iloc[i]['Date'], df.iloc[i]['Date'] ]
zs = [ df.iloc[i]['LL'],   df.iloc[i]['LL'],   df.iloc[i]['HH'],   df.iloc[i]['HH'],   df.iloc[i]['LL']   ]
fig.add_scatter3d(x=xs, y=ys, z=zs, mode = "lines", line=dict(color = "red"))

fig.show()

``````