Pandas plot仅在多个数据帧之间重叠

时间:2017-01-30 22:45:10

标签: python pandas matplotlib ipython jupyter-notebook

在S.O.上发现以下解决方案来绘制多个数据框:

  

ax = df1.plot()

     

df2.plot(AX = AX)

但是,如果我只想绘制它们重叠的位置呢?

假设df1索引是跨越24小时的时间戳,而df2索引也是在df1的24小时内跨越12小时的时间戳(但与df1不完全相同)。

如果我只想绘制两个数据帧所涵盖的12小时。有什么方法可以做到这一点?

3 个答案:

答案 0 :(得分:2)

一般性问题的一般答案:

您有三种选择:

    在绘图之前
  1. Filter both DataFrames,使它们包含相同的时间间隔。
  2. 使用pandas绘图功能中的xlim keyword
  3. 绘制两个数据帧和set the axes limits later on(ax.set_xlim())

答案 1 :(得分:1)

有多种方法可以实现这一目标。下面的代码段显示了两种方式作为示例。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# Make up time data for 24 hour period and 12 hour period
times1 = pd.date_range('1/30/2016 12:00:00', '1/31/2016 12:00:00', freq='H')
times2 = pd.date_range('1/30/2016 12:00:00', '1/31/2016 00:00:00', freq='H')

# Put time into DataFrame
df1 = pd.DataFrame(np.cumsum(np.random.randn(times1.size)), columns=['24 hrs'],
                   index=times1)
df2 = pd.DataFrame(np.cumsum(np.random.randn(times2.size)), columns=['12 hrs'],
                   index=times2)

# Method 1: Filter first dataframe according to second dataframe's time index
fig1, ax1 = plt.subplots()
df1.loc[times2].plot(ax=ax1)
df2.plot(ax=ax1)

# Method 2: Set the x limits of the axis
fig2, ax2 = plt.subplots()
df1.plot(ax=ax2)
df2.plot(ax=ax2)
ax2.set_xlim(times2.min(), times2.max())

enter image description here

答案 2 :(得分:1)

要仅绘制其索引位于df2索引范围内的df1部分,您可以执行以下操作:

ax = df1.loc [df2.index.min():df2.index.max()]。plot()

可能有其他方法可以做到这一点,但这是我首先想到的。

祝你好运!