Есть ли способ создать сложенные графики на одном или линии на одном графике с помощью сложенных Y-осей с помощью matplot / seaborn? - PullRequest
0 голосов
/ 06 ноября 2019

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

У меня есть фрейм данных, подобный тому, чтониже, где у меня есть дата и время в качестве индекса и 4 профиля (тогда может быть больше столбцов, не заинтересованных в построении графика):

datetime                                                        
2019-06-11 00:00:00  28.97  38.47    NaN  41.47   
2019-06-11 01:00:00  28.83  38.42    NaN  41.48   
2019-06-11 02:00:00  28.72  38.38    NaN  41.49   
2019-06-11 03:00:00  28.56  38.33    NaN  41.49   
2019-06-11 04:00:00  28.36  38.22    NaN  41.51

Моя цель - создать график с описанными спецификациями:

  1. Линейные участки, по одному для каждого профиля, но все на одном графике .

  2. Линии должны не перехватывать, поэтомупрофили должны располагаться один над другим, желательно, чтобы профиль был в самом верху.

  3. Значения не должны изменяться, поэтому оси Y, вероятно, должны быть сложены.

  4. Легенда должна быть одна для всего графика из 4 профилей.

  5. График или линия профиля со значениями NaN не должны появляться.

Буду признателен, если вы сможете предложитьt или что-то подсказывает мне решение?

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

Спасибо за ваш вклад: -)

1 Ответ

0 голосов
/ 06 ноября 2019

Может быть, би будет полезно для вас:

df[3] = pd.to_numeric(df[3], errors = 'coerce').fillna(0)
df = df.rename(columns = {1:'A',2:'B',3:'C',4:'D'})
df = df.set_index(0)
df

Out[1]:

                        A      B    C    D
                 0              
2019-06-11 00:00:00 28.97   38.47   0.0 41.47
2019-06-11 01:00:00 28.83   38.42   0.0 41.48
2019-06-11 02:00:00 28.72   38.38   0.0 41.49
2019-06-11 03:00:00 28.56   38.33   0.0 41.49
2019-06-11 04:00:00 28.36   38.22   0.0 41.51


import matplotlib.dates as mdates


ax = [None]*4

fig = plt.figure()
f, (ax[0], ax[1], ax[2], ax[3]) = plt.subplots(4, 1, sharex=True)

ax[3].set_xlabel('Hours')

color = ['r','g','b','y']
for i in range(4):
    col = df.columns[i]
    _ = ax[i].plot(df.index,df[col], label = col, c = color[i])

xfmt = mdates.DateFormatter('%H:%M')
ax[3].xaxis.set_major_formatter(xfmt)
ax[3].xaxis.set_major_locator(mdates.HourLocator(byhour=range(24)))


_ = f.legend()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...