我们如何在 Z 轴 python 上绘制带有频率值的曲面图
Posted
技术标签:
【中文标题】我们如何在 Z 轴 python 上绘制带有频率值的曲面图【英文标题】:how do we plot plotly surface plots with frequency values on Z axis 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 【参考方案1】:您的代码存在一些问题。
DataFrameGroupBy.count
不会计算任何东西,因为你
没有非键列受聚合影响。使用任一
DataFrameGroupBy.size
或 DataFrame.value_counts
。
plotly.graph_objects.Surface
有特殊输入要求:
描述表面坐标的数据设置在
z
中。z
中的数据应该是一个二维列表。x
和y
中的坐标可以是一维列表或二维列表(例如,绘制参数曲面)。如果x
和y
中未提供,则假定 x 和 y 坐标从 0 开始以单位步长为线性。
如果不满足 (2),则只能绘制 Scatter3d
或 Mesh3d
。但是使用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
【讨论】:
以上是关于我们如何在 Z 轴 python 上绘制带有频率值的曲面图的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 matplotlib 在日期时间轴上绘制一个矩形?