在一个对象中绘制多个ggplot图表

3
我创建了一个脚本来在一个对象中创建多个图。我需要的结果是两个图,一个在另一个上面,每个图有不同的纵轴刻度,但横轴是固定的-日期。然而,只有一个图(顶部)被正确创建,底部的图是可见的但为空白,即geom_line不可见。此外,第二个图的y轴与值的范围-min到max不匹配。我还尝试使用facet_grid (scales="free"),但y轴没有变化。第二个图的y轴范围为0到0.05。
我将日期范围限制在过去几周内。这是我正在使用的代码:
    df = df.set_index('date')
    weekly = df.resample('w-mon',label='left',closed='left').sum()
    data = weekly[-4:].reset_index()
    data= pd.melt(data, id_vars=['date'])
    pplot = ggplot(aes(x="date", y="value", color="variable", group="variable"), data)
    #geom_line()
    scale_x_date(labels = date_format('%d.%m'), 
                         limits=(data.date.min() - dt.timedelta(2),
                                 data.date.max() + dt.timedelta(2)))
    #facet_grid("variable", scales="free_y")
    theme_bw()

数据框样本(df),是一个每日数据集,包含每个变量x和a的值,在这种情况下,“日期”是索引:

date            x      a
2016-08-01      100    20
2016-08-02       50    0
2016-08-03       24    18
2016-08-04       0     10

数据帧示例(to_plot)- 每周概述:

         date       variable  value
0  2016-08-01       x        200
1  2016-08-08       x        211
2  2016-08-15       x        104
3  2016-08-22       x        332
4  2016-08-01       a         8
5  2016-08-08       a         15
6  2016-08-15        a        22
7  2016-08-22        a        6

很抱歉之前没有添加df数据框。


有人能明确一下我还能分享什么以获得帮助吗?我还是不能弄清楚为什么第二个图没有正确的y轴范围,也没有被绘制出来。虽然在我的本地/家庭环境中可以正常工作。 - OAK
你可以把所有相关的代码都发出来,这样我们就可以先执行一下 :) 比如说,在这里,我不知道你代码中的 df 到底是什么。 - Daneel
@Daneel 更新帖子。谢谢。 - OAK
1个回答

2
您对绘图指令 geom_line()scale_x_date() 等的调用是独立存在于您的脚本中的;您没有将它们连接到您的绘图对象上。因此,它们对您的绘图没有任何影响。
为了将绘图指令应用于现有的绘图对象,请使用 "图形语言" 并通过使用 + 运算符将其与您的绘图对象连接起来。
结果(如预期):

ggplot in python with facet_grid

完整脚本:
from __future__ import print_function

import sys
import pandas as pd
import datetime as dt
from ggplot import *

if __name__ == '__main__':
    df = pd.DataFrame({
        'date': ['2016-08-01', '2016-08-08', '2016-08-15', '2016-08-22'],
        'x': [100, 50, 24, 0],
        'a': [20, 0, 18, 10]
    })

    df['date'] = pd.to_datetime(df['date'])

    data = pd.melt(df, id_vars=['date'])
    plt = ggplot(data, aes(x='date', y='value', color='variable', group='variable')) +\
        scale_x_date(
            labels=date_format('%y-%m-%d'), 
            limits=(data.date.min() - dt.timedelta(2), data.date.max() + dt.timedelta(2))
        ) +\
        geom_line() +\
        facet_grid('variable', scales='free_y')

    plt.show()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接