Я упал с головой в эту ловушку Панд несколько раз в разных обличьях.В этом случае я хочу построить два столбца, один над другим, используя данные из двух отдельных кадров данных, но каждый график имеет общую ось х.
У меня есть два кадра данных следующим образом:
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, являются просто метками нижнего графика.
Одно из возможных решений - внешнее объединение обоих фреймов данных, а затем построение каждого столбца.(Если задуматься, то это решение аналогично ответу # 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

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