2016-10-28 1 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

Which, производит то, что я ожидал в последнем сюжетном, но и делает другие участки бесполезны , Излишне говорить, что это не то, что я хочу.

Как я могу объединить 4 линейные временные ряды с одной гистограммой в одном и том же сюжете, но разные подсети, все с одинаковой осью х? Значение Я бы хотел, чтобы первые 4 подзадачи, как на первом изображении, и последний подзаголовок, как на втором изображении.

Update

Я сделал простой пример, который, к сожалению, работает, как ожидалось, и не тиражировать мою проблему, которая еще более озадачивает. Код ниже

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

может быть, что индексы тонко отличаются друг от друга, попробуйте вызвать 'reset_index' на ваших данных-кадрах перед построением – 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

Это, кажется, не исправить. Может быть, это связано с повторной выборкой? Посмотрите, как на моих двух рисунках метки ярлыков оси различаются по количеству. – leonsas

+1

hmm dunno ... можете ли вы добавить некоторые данные в свой вопрос, чтобы сделать его воспроизводимым? – maxymoo

+0

см. Мое обновление в сообщении. – leonsas

Смежные вопросы