Побудуйте різні кадри даних на одному малюнку


93

У мене є файл температури з багаторічними записами температури у форматі, наведеному нижче:

2012-04-12,16:13:09,20.6
2012-04-12,17:13:09,20.9
2012-04-12,18:13:09,20.6
2007-05-12,19:13:09,5.4
2007-05-12,20:13:09,20.6
2007-05-12,20:13:09,20.6
2005-08-11,11:13:09,20.6
2005-08-11,11:13:09,17.5
2005-08-13,07:13:09,20.6
2006-04-13,01:13:09,20.6

Кожен рік має різні цифри, час записів, тому індекси дати і часу панд різні.

Я хочу побудувати дані різного року на одному малюнку для порівняння. Вісь X - з січня по грудень, вісь Y - температура. Як мені робити це?

Відповіді:


30

Хоча відповідь Чанга пояснює, як будувати графіки кілька разів на одній і тій же фігурі, у цьому випадку вам може бути краще в цьому випадку, використовуючи a groupbyта unstacking:

(Якщо припустити, що у вас це є в фреймі даних, з уже індексом дати та часу)

In [1]: df
Out[1]:
            value  
datetime                         
2010-01-01      1  
2010-02-01      1  
2009-01-01      1  

# create additional month and year columns for convenience
df['Month'] = map(lambda x: x.month, df.index)
df['Year'] = map(lambda x: x.year, df.index)    

In [5]: df.groupby(['Month','Year']).mean().unstack()
Out[5]:
       value      
Year    2009  2010
Month             
1          1     1
2        NaN     1

Тепер скласти графік (кожен рік окремим рядком):

df.groupby(['Month','Year']).mean().unstack().plot()

344

Спробуйте:

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

1
якщо це на ноутбуці ipython, як його досягти? чи існує функція утримання чи показу, яка друкує графік лише після того, як встановлені всі налаштування?
Diansheng

1
Встановіть, %matplotlib inlineкуди ви імпортуєте, щоб ваші візуалізації відображалися всередині ноутбуків iPython.
Hassan Baig,

1
Будь-який підказка, як це могло б працювати, було більше 3 кадрів даних?
RPT

Це дивно. Я відповім, як робити з більш ніж 3 dfs
adivis12

3
Ви впевнені , що це працює для будь-якого типу з plot(), а саме , коли будь-який тип специфікації передаються в якості аргументу в plotфункції?
генеровано

27

Якщо у вас працює ноутбук Jupyter / Ipython і у вас виникають проблеми з використанням;

ax = df1.plot()

df2.plot(ax=ax)

Запустіть команду всередині тієї ж комірки !! З якихось причин це не спрацьовує, коли вони розділяються на послідовні комірки. Принаймні для мене.


6

Щоб зробити це для декількох кадрів даних, ви можете зробити цикл for над ними:

fig = plt.figure(num=None, figsize=(10, 8))
ax = dict_of_dfs['FOO'].column.plot()
for BAR in dict_of_dfs.keys():
    if BAR == 'FOO':
        pass
    else:
        dict_of_dfs[BAR].column.plot(ax=ax)

0

Просто для посилення відповіді @ adivis12, вам не потрібно робити ifтвердження. Покладіть це так:

fig, ax = plt.subplots()
for BAR in dict_of_dfs.keys():
    dict_of_dfs[BAR].plot(ax=ax)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.