【问题标题】:how do we plot plotly surface plots with frequency values on Z axis python我们如何在 Z 轴 python 上绘制带有频率值的曲面图
【发布时间】:2021-09-22 23:20:51
【问题描述】:

我有下面给出的数据,我想在 z 轴上绘制具有 x 和 y 值频率的交互式曲面图

**apples**  **oranges**
    0           1
   10           2
   20           1
   10           1
   10           1

我试过下面的代码

import plotly.graph_objects as go
import pandas as pd
import numpy as np
#
z_data = df.groupby(['apples', 'oranges']).count()

x, y = df['apples'], df['oranges']
sh_0, sh_1 = z.shape
fig = go.Figure(data=[go.Surface(z=z, x=x, y=y)])
#fig.update_layout(title='histogram_trial', autosize=True)

fig.update_layout(title='Mt Bruno Elevation', autosize=False,
                  width=500, height=500,
                  margin=dict(l=65, r=50, b=65, t=90))
fig.show()

上面的代码给了我空白输出。请告诉我如何获得 z 轴的计数

【问题讨论】:

  • 当你说z轴上x和y值的频率时,你能解释一下你的意思吗?每个 x 和 y 值的预期 z 值是多少?
  • 嗨 Derek,我的 z 值应该如下所示 apples oranges ** z** 0 1 1 10 2 1 20 1 1 10 1 2

标签: python matplotlib plotly frequency


【解决方案1】:

您的代码存在一些问题。

  1. DataFrameGroupBy.count 不会计算任何东西,因为你 没有非键列受聚合影响。使用任一 DataFrameGroupBy.sizeDataFrame.value_counts

  2. plotly.graph_objects.Surface 有特殊输入要求:

    描述表面坐标的数据设置在z中。 z 中的数据应该是一个二维列表。 xy 中的坐标可以是一维列表或二维列表(例如,绘制参数曲面)。如果xy 中未提供,则假定 x 和 y 坐标从 0 开始以单位步长为线性。

如果不满足 (2),则只能绘制 Scatter3dMesh3d。但是使用DataFrame.pivot_table,您可以获得正确形状的数据。

import numpy as np
import pandas as pd
import plotly.graph_objects as go

raw_df = pd.DataFrame(np.random.randint(0, 10, size=(50, 2)), columns=['x', 'y'])
df = raw_df.value_counts(['x', 'y']).reset_index(name='z')
surf_df = df.pivot_table(index=['y'], columns=['x'], values=['z'], fill_value=0)

fig = go.Figure()
fig.add_trace(go.Scatter3d(x=df['x'], y=df['y'], z=df['z'], mode='markers'))
fig.add_trace(go.Surface(z=surf_df))
fig

【讨论】:

    猜你喜欢
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    相关资源
    最近更新 更多