【问题标题】:Is there a way to display flat face colors in plotly for 3D Surface Charts?有没有办法为 3D 表面图表显示平面颜色?
【发布时间】:2022-01-05 03:18:19
【问题描述】:

我在创建 3D 曲面图时使用 matlab,但最近转向 plolty js。在 plotly 的 3D Surface 图表中一切正常,除了颜色方案在 plotly 中是渐变的。我正在尝试获得平面颜色,但找不到合适的解决方案。关于如何在 plotly 中实现此功能的任何想法?类似于以下链接中的图像,其中颜色不是以渐变方式分布的,而是对于每张脸都是不同的。这是使用 matlab 中的“面部颜色:平面”选项实现的。我正在情节中寻找这个功能:-

https://www.javatpoint.com/matlab-3d-sphere

【问题讨论】:

  • 您只是想要整个表面的颜色保持不变?
  • 没有。我正在为每张脸寻找不同的颜色。类似于下面参考中的图,其中颜色不是以渐变方式分布的:- javatpoint.com/matlab-3d-sphere

标签: 3d plotly surface plotly.js


【解决方案1】:
  • 您可以将曲面拆分为“面”。在此示例中,我将 Bloch 球体拆分为多个部分
  • 为每个“面”生成一个痕迹
  • 每条轨迹都可以有一个色阶,它只会分配一种颜色
import numpy as np
import plotly.graph_objects as go
import plotly.colors

#just a sphere
theta = np.linspace(0,2*np.pi,100)
phi = np.linspace(0,np.pi,100)

data = []
STEP = 20
for s, e, c in zip(range(0,len(phi),STEP), range(STEP, len(phi)+STEP, STEP), plotly.colors.sequential.Plasma):
    theta2 = theta[s:e]
    for s2, e2 in zip(range(0,len(phi),STEP), range(STEP, len(phi)+STEP, STEP)):
        
        phi2 = phi[s2:e2]
        x = np.outer(np.cos(theta2),np.sin(phi2))
        y = np.outer(np.sin(theta2),np.sin(phi2))
        z = np.outer(np.ones(STEP),np.cos(phi2))
        c = np.random.choice(plotly.colors.sequential.Plasma, 1)[0]

        data.append(
            go.Surface(
                x=x,
                y=y,
                z=z,
                colorscale=[[0,c],[1,c]],
                showscale=False
            ))

fig = go.Figure(data=data, layout={"width":500, "height":500, "margin":{"t":0,"b":0}})

fig

【讨论】:

  • 嗨,Rob,这看起来很有希望。就我而言,我希望使用固定的色阶为面部着色,并根据不同的数据(z 除外)进行着色。简而言之,我正在尝试将渐变效果更改为扁平颜色图案。你认为这可以实现吗?请指导
  • 我认为您的意见与我的答案很接近。我是 plotly 的新手,您认为可以在这里使用来自固定色阶和基于不同输入(z 除外)的颜色吗?非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
  • 1970-01-01
  • 1970-01-01
  • 2019-12-19
  • 2012-08-23
  • 2022-12-04
  • 1970-01-01
相关资源
最近更新 更多