首页 文章

ggplot在一个对象中的多个图

提问于
浏览
3

我创建了一个脚本来在一个对象中创建多个图 . 我正在寻找的结果是两个图,一个在另一个上,每个图具有不同的y轴刻度,但x轴是固定的 - 日期 . 但是,只有一个图(顶部)被正确创建,底部图是可见的但是空的,即 geom_line 不可见 . 此外,第二个图的y轴与值的范围不匹配 - 最小值到最大值 . 我也尝试使用 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'是索引:

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数据帧 .

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

相关问题