如何为Plotly 3D锥图添加对数颜色条?
问题:Plotly 3D锥图添加对数颜色条的替代方案
我尝试用Plotly的3D锥图可视化矢量场,需要为其添加对数颜色条,但Plotly没有直接实现该需求的方式,需要寻找替代方案。当前我的3D锥图存在刻度重叠的问题,效果如下:
我曾查找过替代方案,但只找到适用于热力图的解决方法——对z数据取对数,再为颜色条设置自定义刻度标签,但该方法无法直接应用在3D锥图上:目前Plotly不支持直接将矢量范数的对数作为3D锥图颜色条的参考依据。
我的实现代码
import numpy as np import plotly.graph_objects as go from emknot import * x = np.linspace(-3, 3, 7) y = np.linspace(-3, 3, 7) z = np.linspace(-3, 3, 7) cones = [] for i in x: for j in y: for k in z: print(i) u = [globule([i, j, k], k=1)[0]] v = [globule([i, j, k], k=1)[1]] w = [globule([i, j, k], k=1)[2]] cones.append(go.Cone( x=[i], y=[j], z=[k], u=u, v=v, w=w, cmin=0, cmax=1.5, colorbar=dict(tick0= 0, tickmode= 'array', tickvals= [0, 1e-3, 1e-2, 1e-1,1]), colorscale=[[0,'rgba(255,255,255, 0.4)'],[1,'rgba(0,0,255, 1)']], sizemode="absolute", sizeref=0.6, anchor="center")) camera = dict( up=dict(x=0, y=0, z=1), center=dict(x=0, y=0, z=0), eye=dict(x=1.3, y=1.0, z=0.8) ) layout = go.Layout(title='EM-globule') fig = go.Figure(data=cones, layout=layout) fig.update_layout(scene_camera=camera) fig.write_image("images/fig1.svg") fig.show()
复现所需的emknot模块代码
import numpy as np from scipy.special import jv from scipy.integrate import quad def phi(x): return np.arctan2(x[1], x[0]) def rho(x): return np.sqrt(x[0] ** 2 + x[1] ** 2) def f(x, k): result = quad(lambda t: np.sin(t) * np.cos(k * x[2] * np.cos(t)) * jv(1, k * rho(x) * np.sin(t)), 0, np.pi) return result[0] def g(x,k): result = quad(lambda t: np.sin(t) * np.cos(t) * np.sin(k * x[2] * np.cos(t)) * jv(1, k * rho(x) * np.sin(t)), 0, np.pi) result = (-1) * result[0] return result def h(x,k): result = quad(lambda t: np.sin(t) ** 2 * np.cos(k * x[2] * np.cos(t)) * jv(0, k * rho(x) * np.sin(t)), 0, np.pi) result = (-1) * result[0] return result def ring(x, k=2*np.pi, b0=1): return [-b0 * f(x,k) * np.sin(phi(x)), b0 * f(x,k) * np.cos(phi(x)), 0] def globule(x, k=2*np.pi, b0=1): e_rho = np.array([np.cos(phi(x)), np.sin(phi(x)),0]) e_z = np.array([0,0,1]) result = b0 * g(x, k) * e_rho + h(x, k) * e_z return result
未实现的思路
我曾尝试通过ChatGPT寻找方案,它提出了一个可行方向但生成的代码无法直接运行:创建一个以矢量范数的对数为数据的辅助图,将其颜色条作为3D锥图的颜色条,但我尚未完成该方案的实现。
内容的提问来源于stack exchange,提问作者Aceman
相关产品推荐
相关产品推荐

