【问题标题】:python plot line for each percentile每个百分位数的python绘图线
【发布时间】:2020-05-04 13:50:52
【问题描述】:

如何使用 seaborn 为每个百分位数绘制通过 pandas.DataFrame.describe 计算的百分位数?

目前,我需要遍历每一个。相反,我想要一个包含所有百分位数的图表。 https://seaborn.pydata.org/generated/seaborn.lineplot.html 有一些关于色调和风格的很好的例子,但我目前想知道如何正确地重塑数据框以便能够使用这种方法。

import pandas as pd
%pylab inline

df = pd.DataFrame({'dt':['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-03'], 'bar':[1,2,3, 4], 'baz':[3,4,5, 6]})
df['dt'] = pd.to_datetime(df['dt'])
display(df)

df = df.groupby(['dt']).describe()
df = df.reset_index()
df = df.set_index(['dt'], drop=False)
display(df)

import seaborn as sns; sns.set()

# iterate for each column (bar, baz)
df_plot = df[['dt']].copy()

# iterate for each percentile
df_plot['metric'] = df['bar']['25%']
sns.lineplot(x='dt', y='metric', data=df_plot)
plt.show()

df_plot['metric'] = df['bar']['50%']
sns.lineplot(x='dt', y='metric', data=df_plot)
plt.show()

df_plot['metric'] = df['bar']['75%']
sns.lineplot(x='dt', y='metric', data=df_plot)
plt.show()

【问题讨论】:

  • 删除前2个plt.show()?还是我错过了什么?
  • 哇——好的。这比我想象的要容易得多。正确的。现在我只需要设置一个图例并手动应用色调/样式。但至少它很容易将所有内容都绘制成一个情节。
  • sns.lineplot(x='dt', y='metric', data=df_plot, label='C')

标签: python pandas seaborn reshape percentile


【解决方案1】:

您可以使用以下方法简化所有这些:

import pandas as pd
import seaborn as sns
%pylab inline

df = pd.DataFrame({'dt':['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-03'], 'bar':[1,2,3, 4], 'baz':[3,4,5, 6]})
df = df.groupby(['dt']).describe()
sns.lineplot(data=df['baz'][['25%', '50%', '75%']])

结果(可能有额外的plt.show()?我没有安装 pylab 来测试。):

【讨论】:

  • 这太棒了!我仍然需要摆弄样式,即seaborn.pydata.org/generated/seaborn.lineplot.html 从文档中显示的淡出看起来非常好。我还需要弄清楚如何允许两个类别,即男 7 女。但最有可能的是,最好为每个类别分别绘制图表。
猜你喜欢
  • 2020-05-28
  • 2016-10-19
  • 2013-02-10
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 2019-04-05
  • 2019-10-02
  • 2017-01-19
相关资源
最近更新 更多