2016-10-28 78 views
1

我有5個時間系列,我想在一個子圖中形成圖形。基本上我一直在使用subplotting:在熊貓中組合條形和線形子圖

fig, axes = plt.subplots(nrows=5, ncols=1, figsize=(16,10), sharex=True) 
xlim = (start, end) 
ax1=df.hr.plot(ax=axes[0], color='green', xlim=xlim) 
ax2=df.act.plot(ax=axes[1], color='orange', xlim=xlim) 
ax3=df.rr.plot(ax=axes[2], color='blue', xlim=xlim) 
ax4=df2.set_index('timestamp').rmssd.plot(color='purple', ax=axes[3], xlim=xlim) 
ax5=ma_df.tz_convert('US/Eastern')['any_act'].resample('10Min', how='count').plot(kind='line',ax=axes[4]) 

將會產生

enter image description here

由於數據的性質,我想以可視化的最後插曲爲條形圖。所以很自然,我改變了最後一行:

ax5=ma_df.tz_convert('US/Eastern')['any_act'].resample('10Min', how='count').plot(kind='bar',ax=axes[4]) 

,然後創建如下圖所示:

enter image description here

其中,生產什麼我希望在最後的插曲,但讓其他地塊沒用。不用說,這不是我想要的。

如何將4行時間序列與同一圖中的一個條形圖組合在一起,但不同的子圖都共享相同的x軸? 含義我想要像第一幅圖像中的前4個子圖,以及第二幅圖中的最後一個子圖。

更新

我做了一個簡單的例子,不幸的是正常工作,並且不復制我的問題,這更是莫名其妙。代碼如下

import pandas as pd 
from matplotlib import pyplot as plt 
%matplotlib inline 
df = pd.read_csv('https://s3.amazonaws.com/temp-leonsas-qsaeamu0sl5v4b/df.csv') 
bar_df = pd.read_csv('https://s3.amazonaws.com/temp-leonsas-qsaeamu0sl5v4b/bar_df.csv') 
fig, axes = plt.subplots(nrows=4, ncols=1, figsize=(16,10), sharex=True) 
ax1=df.hr.plot(ax=axes[0], color='green', kind='line') 
ax2=df.act.plot(ax=axes[1], color='orange', kind='line') 
ax3=df.rr.plot(ax=axes[2], color='blue', kind='line') 
ax4=bar_df.occ_count.plot(ax=axes[3], kind='bar') 

而在我的代碼庫它複製問題的代碼是

fig, axes = plt.subplots(nrows=4, ncols=1, figsize=(16,10), sharex=True) 
ax1=df.hr.plot(ax=axes[0], color='green', kind='line') 
ax2=df.act.plot(ax=axes[1], color='orange', kind='line') 
ax3=df.rr.plot(ax=axes[2], color='blue', kind='line') 
ax4=bar_df.occ_count.plot(ax=axes[3], kind='bar') 

的主要區別是,在我的代碼庫正在生成的DataFrames而不是僅僅從S3裝起來。 DataFrame中是否存在隱式配置,可以以某種方式實現此目的?我只是使用df.to_csv將這2個數據幀轉儲到S3中。

+0

您是否嘗試過先調用barplot和線圖之後?您可能從重新採樣中獲得不需要的幫助活動,但這不是一個完整的示例。至少提供虛擬數據並查看需要多少線條圖來重現錯誤。 [MVCE] – cphlewis

+0

@cphlewis在帖子中看到我的更新。 – leonsas

+0

它可能是指標略有不同,請在繪製 – maxymoo

回答

0

我想你只需要明確地傳遞kind='line'前三個地塊,這裏有一個簡單的例子:

import matplotlib.pyplot as plt 
import pandas as pd 
%matplotlib inline 
s = pd.Series([1,2,3,2,1]) 
fig, axes = plt.subplots(nrows=2, ncols=1, figsize=(16,10), sharex=True) 
s.plot(ax=axes[0], color='green', kind='line') 
s.plot(ax=axes[1], color='red', kind='bar') 

enter image description here

+0

這似乎並沒有解決它。也許它與重採樣有關?看看在我的2個數字中,軸刻度標籤的數量是不同的。 – leonsas

+1

嗯不知道...你可以添加一些數據到你的問題,使其可重現? – maxymoo

+0

看到我的更新後。 – leonsas