【问题标题】:multiple boxplots from Pandas dataframe来自 Pandas 数据框的多个箱线图
【发布时间】:2015-12-20 11:59:00
【问题描述】:

我正在尝试根据 pandas 数据框中的数据绘制一个带有多个箱线图的面板图。数据框的列如下所示:

 data.columns 
 Index([u'SiteId', u'obs1', u'obs2', u'obs3', u'obs4', u'obs5', u'obs6', u'date', u'area']

我想创建一个包含 9 个不同地块的面板(因为有 9 个不同的地理区域),每个地块在一年中的每个月都有 12 个箱形图。下面显示了一个示例,其中 sn-p 用于创建绘图:

df = data.ix[:, ['obs1','date', 'area']]
df = df.set_index('date')
colm = ['LOCATION 1']
for area in areas:
   df2 = df.loc[(df.area== area)]
   df2.boxplot(column=colm, by=df2.index.month, showmeans=True)

上面的代码只生成一个图(图中每个月对应的箱线图),但我想创建 9 个这样的图,每个图对应于特定区域作为同一图中的子图。换句话说,我想首先按区域对数据进行分组,然后按一年中的月份对数据进行分组,然后将结果绘制为箱线图。有什么想法可以得到想要的情节吗?任何帮助表示赞赏。

另外,我怎样才能摆脱“按 [1 1 1 ...12 12 12] 分组的箱线图”和“1,1,1,1,1,1,1,1,1,.. ...”在情节的顶部和底部?

我不能发布图片,因为 stackoverflow 规则不允许我这样做。 谢谢。

【问题讨论】:

  • 如果您可以提供一个带有假数据的简单数据框来玩弄,那将很有用。我怀疑您的 9 个数字确实是生成的,但是每个数字都被下一个数字覆盖。您可以尝试在 for 循环中创建一个新图形,您应该得到 9 个不同的图形。如果你想在同一个图中绘制所有 9 个区域,你应该创建一个 9x12 的子图并在你的 for 循环中的相关轴上绘制
  • 谢谢 Diziet,我试过了,但它不起作用。下面是样本数据(虽然只是几天但日期涵盖了全年,并且有9个这样的区域)。 :2011-01-21 85.330990 5 2011-01-18 85.330990 5 2011-01-21 85.63021267 2011-01-24 7.944901/11-01-01-20 30 56.947048 3 2011-01-03 89.431410 6 2011-01-06 7.979408 6

标签: python pandas matplotlib


【解决方案1】:

这是你想要的吗?

fig, axs = plt.subplots(len(areas), 1, figsize=(5,45))
for ax,area in zip(axs,areas):
    df2 = df.loc[(df.area==area)]
    df2.boxplot(column=['obs1'], by=df2.index.month, showmeans=True, ax=ax)

【讨论】:

    猜你喜欢
    • 2016-10-30
    • 1970-01-01
    • 2021-11-15
    • 2021-04-18
    • 2014-05-27
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 2018-09-08
    相关资源
    最近更新 更多