gpt4 book ai didi

python - 绘制 Distplot 子图

转载 作者:行者123 更新时间:2023-12-04 13:26:23 31 4
gpt4 key购买 nike

我正在尝试为 distplot 子图编写一个 for 循环。
我有一个包含许多不同长度列的数据框。 (不包括 NaN 值)

fig = make_subplots(
rows=len(assets), cols=1,
y_title = 'Hourly Price Distribution')

i=1
for col in df_all.columns:
fig = ff.create_distplot([[df_all[[col]].dropna()]], col)
fig.append()
i+=1
fig.show()
我正在尝试为 distplots 的子图运行 for 循环并收到以下错误:
PlotlyError:糟糕!您的数据列表或 ndarray 应该具有相同的长度。
更新:
这是下面的示例:
df = pd.DataFrame({'2012': np.random.randn(20),
'2013': np.random.randn(20)+1})
df['2012'].iloc[0] = np.nan
fig = ff.create_distplot([df[c].dropna() for c in df.columns],
df.columns,show_hist=False,show_rug=False)
fig.show()
我想在不同的子图中绘制每个分布。
谢谢你。

最佳答案

更新:分布图
使用 numpy 计算正确的值可能更快更优雅.但我经常使用一种 plotly 方法(图形工厂,plotly express)构建我的图形的一部分,然后将它们与 plotly 库(plotly.graph_objects)的其他元素一起使用以获得我想要的。下面的完整片段向您展示了如何做到这一点以构建 go基于 subplot来自 ff.create_distplot 的元素.如果以下建议适合您的需要,我很乐意提供进一步的解释。
阴谋
enter image description here
完整代码

import numpy as np
import pandas as pd
import plotly.express as px
import plotly.figure_factory as ff
from plotly.subplots import make_subplots
import plotly.graph_objects as go

df = pd.DataFrame({'2012': np.random.randn(20),
'2013': np.random.randn(20)+1})
df['2012'].iloc[0] = np.nan

df = df.reset_index()
dfm = pd.melt(df, id_vars=['index'], value_vars=df.columns[1:])
dfm = dfm.dropna()

dfm.rename(columns={'variable':'year'}, inplace = True)
cols = dfm.year.unique()
nrows = len(cols)

fig = make_subplots(rows=nrows, cols=1)

for r, col in enumerate(cols, 1):
dfs = dfm[dfm['year']==col]
fx1 = ff.create_distplot([dfs['value'].values], ['distplot'],curve_type='kde')
fig.add_trace(go.Scatter(
x= fx1.data[1]['x'],
y =fx1.data[1]['y'],
), row = r, col = 1)

fig.show()

第一个建议

你应该:
1. 使用 pd.melt(df, id_vars=['index'], value_vars=df.columns[1:]) 重构您的数据,
2. 并使用出现的列 'variable'为每个 year 建立子图通过 facet_row得到这个的论点:
enter image description here
在下面的完整片段中,您会看到我已更改 'variable''year'为了让剧情更直观。这种方法有一个特别方便的副作用,即运行 dfm.dropna()将删除 na 2012 的值 只有 .如果您要对原始数据帧执行相同的操作,则 2013 的同一行中的相应值也将被删除。
import numpy as np
import pandas as pd
import plotly.express as px

df = pd.DataFrame({'2012': np.random.randn(20),
'2013': np.random.randn(20)+1})
df['2012'].iloc[0] = np.nan

df = df.reset_index()
dfm = pd.melt(df, id_vars=['index'], value_vars=df.columns[1:])
dfm = dfm.dropna()

dfm.rename(columns={'variable':'year'}, inplace = True)
fig = px.histogram(dfm, x="value",
facet_row = 'year')
fig.show()

关于python - 绘制 Distplot 子图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68309750/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com