Plotly:如何制作 3D 堆叠直方图?

2024-05-13

我有几个成功绘制的直方图plotly https://plot.ly/python/像这样:

fig.add_trace(go.Histogram(x=np.array(data[key]), name=self.labels[i]))

我想创建类似的东西这个 3D 堆叠直方图 https://plot.ly/~yksuh/1/#/但不同的是,里面的每个二维直方图都是一个真正的直方图,而不仅仅是一个硬编码的线(我的数据的形式[0.5 0.4 0.5 0.7 0.4]所以直接用Histogram就很方便了)

请注意,我所问的并不类似于this https://matplotlib.org/examples/mplot3d/hist3d_demo.html因此也不同于this https://community.plot.ly/t/how-to-create-a-3d-histogram-with-plotly/8607。在 matplotlib 示例中,数据直接以 2D 数组形式呈现,因此直方图是第三维。就我而言,我想为一个函数提供许多已经计算出的直方图。


下面的代码片段负责对图形进行分箱和格式化,以便它显示为使用多个轨迹的堆叠 3D 图表。go.Scatter3D and np.Histogram。 输入是一个带有随机数的数据帧,使用np.random.normal(50, 5, size=(300, 4))如果您可以使用以下内容,我们可以更多地讨论其他细节:

Plot 1: Angle 1

Plot 2: Angle 2

完整代码:

# imports
import numpy as np
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import plotly.io as pio

pio.renderers.default = 'browser'

# data
np.random.seed(123)
df = pd.DataFrame(np.random.normal(50, 5, size=(300, 4)), columns=list('ABCD'))

# plotly setup
fig=go.Figure()

# data binning and traces
for i, col in enumerate(df.columns):
    a0=np.histogram(df[col], bins=10, density=False)[0].tolist()
    a0=np.repeat(a0,2).tolist()
    a0.insert(0,0)
    a0.pop()
    a1=np.histogram(df[col], bins=10, density=False)[1].tolist()
    a1=np.repeat(a1,2)
    fig.add_traces(go.Scatter3d(x=[i]*len(a0), y=a1, z=a0,
                                mode='lines',
                                name=col
                               )
                  )
fig.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Plotly:如何制作 3D 堆叠直方图? 的相关文章

随机推荐