Как построить столбцы двух отдельных DataFrames на одном графике (подзаговоры, представляющие каждый столбец) - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть два кадра данных, как показано ниже.Они абсолютно одинаковы с точки зрения имен столбцов и структуры.Разница в том, что один кадр данных - это прогноз, а другой - данные наблюдений.Мне нужно построить диаграмму с подплодами, где каждый заголовок подплота - это имена столбцов, ось X - значения индекса, а ось Y - значения в таблице.Мне нужно нарисовать две линии на каждом графике, одну из данных с прогнозом, одну с наблюдением.Ниже то, что я пытался сделать, но это не работает.

      08FB006     08FC001    08FC005        08GD004     08GD005
----------------------------------------------------------------
0   1.005910075 0.988765247 0.00500000  0.984376392 5.099999889
1   1.052696367 1.075232414 0.00535313  1.076066586 5.292135227
2   1.101749034 1.169026145 0.005731682 1.176162168 5.491832766
3   1.153183046 1.270744221 0.006137526 1.285419625 5.699405829
4   1.207119522 1.381030962 0.006572672 1.404662066 5.915181534
5   1.263686077 1.500580632 0.007039282 1.534784937 6.139501445
6   1.323017192 1.630141078 0.007539681 1.676762214 6.372722261
7   1.38525461  1.770517606 0.008076372 1.831653101 6.615216537
8   1.450547748 1.922577115 0.008652045 2.000609283 6.867373442
9   1.519054146 2.087252499 0.009269598 2.184882781 7.129599561
10  1.590939931 2.265547339 0.009932148 2.385834436 7.402319731

Пример кода, у меня 81 станция / колонка

import matplotlib.pyplot as plt
%matplotlib inline

fig, axes = plt.subplots(nrows=81, ncols=1)

newdf1.plot(ax=axes[0,0])
newdf1_pred.plot(ax=axes[0,1])

1 Ответ

0 голосов
/ 12 декабря 2018

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

import pandas as pd
import numpy as np

obs = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
pred = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))

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

import matplotlib.pyplot as plt
%matplotlib inline

fig, axes = plt.subplots(figsize=(5,7), nrows=4, ncols=1)
for col in range(len(obs.columns)): # loop over the number of columns to plot
    obs.iloc[col].plot(ax=axes[col], label='observed') # plot observed data
    pred.iloc[col].plot(ax=axes[col], label='predicted') # plot predicted data
    axes[col].legend(loc='upper right') # legends to know which is which
    axes[col].set_title(obs.columns[col]) # titles to know which column/variable
plt.tight_layout() # just to make it easier to read the plots

Вот мой вывод:

enter image description here

Надеюсь, это поможет.

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