plotly distplot子图

5lhxktic  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(301)

我试图为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()

我正在尝试为DistPlot的子图运行for循环,并得到以下错误:
情节错误:哎呀!您的数据列表或数据数组的长度应相同。
更新:以下是一个示例:

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()

我想在不同的子地块中绘制每个分布。
非常感谢。

rjjhvcjd

rjjhvcjd1#

你应该:
1.使用 pd.melt(df, id_vars=['index'], value_vars=df.columns[1:]) ,
2.并使用发生列 'variable' 为每个 year 通过 facet_row 参数以获取此信息:

在下面的完整片段中,您将看到我已更改 'variable''year' 为了使情节更直观。这种方法有一个特别方便的副作用,即运行 dfm.dropna() 将删除 na 价值 2012 只有如果要在原始 Dataframe 上执行相同的操作,则同一行中的对应值 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()

相关问题