Description
NOTE: When I found and reported this bug, I was working on a Chromebook. After I wrote this, I noted this does not occur from Mac with Chrome (ver 74).
Please see my example code below. I am plotting offline. When I change the opacity to anything other than 1, the plot disappears. As evidenced by the hover info, the plot still exists; it's just not visible.
I tried a number of different colorscales with different alpha values. The result does not change.
I also tried working around the opacity issue by setting the opacity to 1 and then setting the colorscale alpha values to something less than 1. But the alpha values appear to have no effect.
I noticed some similar bugs such as 3741, 3744, and 3492. Despite their similarity, these bugs appear to be different from this issue I am reporting. They are also resolved.
Lastly, I note that this bug occurs on the latest versions of Chrome (i.e. 74). But it does not occur on earlier versions.
Postscript: I have subsequently noticed the occurrence of the same opacity bug for Scatter3d. I also note that there's no opacity problem for Scatter in 2d.
import numpy as np
from numpy import sin, cos, pi
import plotly
import plotly.graph_objs as go
def ellipsoid( a = 4, b = 3, c = 2, num_pts = 40):
phi = np.linspace(0, 2 * pi, num=num_pts)
theta = np.linspace(-pi / 2, pi / 2, num=num_pts)
phi, theta = np.meshgrid(phi, theta)
x = cos(theta) * sin(phi) * a
y = cos(theta) * cos(phi) * b
z = sin(theta) * c
Ell = np.vstack((x.flatten(), y.flatten(), z.flatten()))
ell_1 = go.Mesh3d(
opacity = 0.99,
colorscale = [ [0.0, 'rgb(255, 0, 0)'], [0.5, 'rgb(0, 255, 0)'], [1.0, 'rgb(0, 0, 255)'] ],
intensity = z.flatten(),
name = 'z',
showscale = False,
x = Ell[0, :].flatten(),
y = Ell[1, :].flatten(),
z = Ell[2, :].flatten(),
alphahull = 0
)
axes_max = np.max( np.abs(Ell) )
return ell_1, axes_max
def plot_it(data, mr):
r = [-mr, mr]
layout = go.Layout(
autosize = False,
width = 600,
height = 600,
margin = dict(
l = 0,
r = 0,
b = 0,
t = 0,
pad = 4),
scene = dict(
aspectratio = go.layout.scene.Aspectratio(x=1, y=1, z=1),
xaxis = dict(
range=r,
title='x'),
yaxis = dict(
range=r,
title='y'),
zaxis = dict(
range=r,
title='z' ))
)
fig = go.Figure(data=data, layout=layout)
plotly.offline.plot(fig, filename='/home/chronos/user/Downloads/bug_mesh3d_opac.html')
return
def test1():
d, mx = ellipsoid()
data = [d]
plot_it(data, mx+2.)
return
def main():
test1()
return
if __name__ == "__main__":
main()