Построение отдельного кадра данных Pandas в виде столбцов с общей осью x - PullRequest
0 голосов
/ 12 февраля 2019

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

У меня есть два кадра данных следующим образом:

dfA = pd.DataFrame({'year':[2003,2004,2005,2006,2007],
                    'value':[75,84,95,101,119]})

dfA = dfA.set_index('year')

dfB = pd.DataFrame({'year':[2000,2001,2002,2003,2004,2005],
                    'value':[34,46,64,71,88,93]})

dfB = dfB.set_index('year')

Фреймы данных выглядят следующим образом:

      value
year       
2003     75
2004     84
2005     95
2006    101
2007    119

      value
year       
2000     34
2001     46
2002     64
2003     71
2004     88
2005     93

Затем я пытаюсь построить графики следующим образом:

fig, axarr = plt.subplots(2,
                          figsize = (4,6),
                          sharex = True)

dfA['value'].plot(kind = 'bar',
                  ax = axarr[0],
                  sharex = True,
                  title = 'DF A')

dfB['value'].plot(kind = 'bar',
                  ax = axarr[1],
                  sharex = True,
                  title = 'DF B')

plt.show()

Созданные графики показывают правильную высоту стержня, но оси xявно не разделяются, но вместо этого столбцы кажутся построенными один за другим и выровненными по левому столбцу;метки, используемые для оси x, являются просто метками нижнего графика.Bar-plots from different dataframes

Одно из возможных решений - внешнее объединение обоих фреймов данных, а затем построение каждого столбца.(Если задуматься, то это решение аналогично ответу # gyx-hh на Отображение данных Pandas в виде массива гистограммы не учитывает sharex = True .) Внешнее объединение фреймов данных работает, но работает независимоо том, установлен ли sharex = True, потому что для каждого набора данных присутствует полный набор значений, даже если некоторые ячейки могут содержать NaN.

dfC = dfA.join(dfB,
               how = 'outer',
               lsuffix = '_A',
               rsuffix = '_B')

      value_A  value_B
year                  
2000      NaN     34.0
2001      NaN     46.0
2002      NaN     64.0
2003     75.0     71.0
2004     84.0     88.0
2005     95.0     93.0
2006    101.0      NaN
2007    119.0      NaN

Bar-plot with correct x axis

Мне очень нравится метод pandas.plot(), но для меня это очень серьезный сбой, который может привести к неправильной интерпретации данных.Должно ли это быть вызвано ошибкой в ​​команде панд или есть причина, по которой такое поведение предпочтительнее?

1 Ответ

0 голосов
/ 12 февраля 2019

Чтобы подтвердить ваши наблюдения, я думаю, что это не так.*enter image description here

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