2016-06-20 3 views
1

Я пытаюсь построить два кадра данных на одном графике. Я хочу сделать это пять раз, чтобы создать пять разных цифр, чтобы их можно было сохранить в виде отдельных файлов, чтобы их можно было использовать позже. Однако я не смог получить эти два набора данных на одном графике. Я знаю, как строить два набора данных на одном и том же графике, когда у меня есть несколько подсетей в сетке, а также как строить два набора данных, если не использовать dataframes на одном и том же графике. Однако это вызывает недоумение.Построение множества наборов данных на одном графике с несколькими цифрами

tableau20=xcolorpallet() 
f0,axes00=plt.subplots() 
axes01=axes00.twinx() 
df00=df00.drop('elev', 1) 
ax00min=float(df00.min()) 
ax00max=1.05*float(df00.max()) 
ax00step=int((ax00max-ax00min)/10) 
ax10min=float(df10.min()) 
ax10max=1.05*float(df10.max()) 
ax10step=int((ax10max-ax10min)/10) 
df00.plot(linewidth=2, figsize=(9,6),color=tableau20[6]) 
axes00.set_ylabel(v00,fontsize=14, rotation=90) 
axes00.set_ylim(ax00min,ax00max) 
axes00.set_yticks(np.arange(ax00min,ax00max,ax00step)) 
df10.plot(fig=f0,ax=axes01,secondary_y=v10,linewidth=2,color=tableau20[14]) 
f0.set_title(v10,fontsize=18) 
axes01.set_ylabel(v00,fontsize=14, rotation=90) 
axes01.set_ylim(ax00min,ax00max) 
axes01.set_yticks(np.arange(ax00min,ax00max,ax00step)) 
plt.show() 

В настоящее время он производит два отдельных графика с моими данными на нем, что приятно, но не то, что я ищу. Какие-либо предложения?

Вот некоторые выборочные данные, чтобы получить представление о том, что я пытаюсь построить график:

df00:

time    Temp 
2014-08-16 12:02:40 68.0 
2014-08-16 12:17:40 69.0 
2014-08-16 12:32:40 68.0 
2014-08-16 12:47:40 68.0 
2014-08-16 13:02:40 68.0 
2014-08-16 13:17:40 68.0 
2014-08-16 13:32:40 68.0 
2014-08-16 13:47:40 68.0 
2014-08-16 14:02:40 68.0 
2014-08-16 14:17:40 68.0 
2014-08-16 14:32:39 66.0 
2014-08-16 14:32:40 67.0 
2014-08-16 14:47:39 66.0 
2014-08-16 14:47:40 66.0 
2014-08-16 15:02:40 66.0 
2014-08-16 15:17:39 64.0 
2014-08-16 15:17:40 65.0 
... 

DF10:

date_time  Temperature 
2014-08-16 12:00:00 17.3997 
2014-08-16 13:00:00 16.9094 
2014-08-16 14:00:00 16.4693 
2014-08-16 15:00:00 15.9627 
2014-08-16 16:00:00 15.5795 
2014-08-16 17:00:00 15.5492 
2014-08-16 18:00:00 15.2729 
2014-08-16 19:00:00 15.2119 
2014-08-16 20:00:00 15.3572 
2014-08-16 21:00:00 15.497 
2014-08-16 22:00:00 15.349 
2014-08-16 23:00:00 15.3398 
2014-08-17 00:00:00 15.5546 
2014-08-17 01:00:00 14.9101 
2014-08-17 02:00:00 15.279 
2014-08-17 03:00:00 15.2961 
2014-08-17 04:00:00 15.003 
2014-08-17 05:00:00 15.4753 
... 

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

+0

Вы хотите построить несколько графиков линии на том же 'ax' объекта и затем сохранить или построить пять раз с использованием одного и того же форматирования и сохранить их отдельно? – Stefan

+0

Я хочу построить две строки на одном графике, а затем сохранить этот график. Затем я хочу сделать это еще пять раз. Вот только один раз. У меня есть еще пять наборов данных, и поскольку у меня может не всегда отображаться переменная в этом фреймворке данных, я не всегда хочу отображать один из графиков, и поэтому я использую операторы if, чтобы проверить, существуют ли фреймы данных перед построением графика. Я мог бы показать вам, как все это выглядит, но это более ста строк кода. –

+0

Вы используете 'twinx', потому что вам нужны две диаграммы? Для построения на одной диаграмме вы предпочитаете использовать один и тот же объект 'ax' дважды. – Stefan

ответ

1

Чтобы построить на том же графике, вы бы использовать тот же ax объект с .plot():

Используя данные примера - первый df1:

DatetimeIndex: 17 entries, 2014-08-16 12:02:40 to 2014-08-16 15:17:40 
Data columns (total 1 columns): 
Temp 17 non-null int64 
dtypes: int64(1) 
memory usage: 272.0 bytes 
None 
        Temp 
time      
2014-08-16 12:02:40 68 
2014-08-16 12:17:40 69 
2014-08-16 12:32:40 68 
2014-08-16 12:47:40 68 
2014-08-16 13:02:40 68 
2014-08-16 13:17:40 68 
2014-08-16 13:32:40 68 
2014-08-16 13:47:40 68 
2014-08-16 14:02:40 68 
2014-08-16 14:17:40 68 
2014-08-16 14:32:39 66 
2014-08-16 14:32:40 67 
2014-08-16 14:47:39 66 
2014-08-16 14:47:40 66 
2014-08-16 15:02:40 66 
2014-08-16 15:17:39 64 
2014-08-16 15:17:40 65 

и df2:

<class 'pandas.core.frame.DataFrame'> 
DatetimeIndex: 18 entries, 2014-08-16 12:00:00 to 2014-08-17 05:00:00 
Data columns (total 1 columns): 
Temperature 18 non-null float64 
dtypes: float64(1) 
memory usage: 288.0 bytes 
None 
        Temperature 
date_time      
2014-08-16 12:00:00  17.3997 
2014-08-16 13:00:00  16.9094 
2014-08-16 14:00:00  16.4693 
2014-08-16 15:00:00  15.9627 
2014-08-16 16:00:00  15.5795 
2014-08-16 17:00:00  15.5492 
2014-08-16 18:00:00  15.2729 
2014-08-16 19:00:00  15.2119 
2014-08-16 20:00:00  15.3572 
2014-08-16 21:00:00  15.4970 
2014-08-16 22:00:00  15.3490 
2014-08-16 23:00:00  15.3398 
2014-08-17 00:00:00  15.5546 
2014-08-17 01:00:00  14.9101 
2014-08-17 02:00:00  15.2790 
2014-08-17 03:00:00  15.2961 
2014-08-17 04:00:00  15.0030 
2014-08-17 05:00:00  15.4753 

:

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
plt.style.use('ggplot') 

ax = df1.plot() 
df2.plot(ax=ax) 
plt.show() 

приводит к более короткой линии для DataFrame, где конец данные около 12 часов раньше, но в остальном, как и ожидалось:

enter image description here

+0

Я все еще получаю' ValueError: Ordinal должен быть> = 1'. Теперь это два разных кадра данных, которые строятся на одном графике. Это имеет значение? –

+1

Возможно, эта ошибка возникает, когда, например, индексы несовместимы. Не могли бы вы объединить две «серии» в один «DataFrame» или сделать «.reset_index (drop = True)» на обоих? Еще одна причина, по которой я видел, - это «DateTimeIndex». – Stefan

+0

Я знаю, что они в разные даты. Один из наблюдений и имеет нерабочее время по времени 15 минут, в то время как другое моделируется поведением с указанием времени каждого часа в часах.Итак, если я объединю два фрейма данных, я потеряю все данные одного кадра данных. Как я могу накладывать данные на один граф и использовать одну и ту же ось X, имея разные x-шаги, поскольку это кажется проблемой. –

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