Панды и комбинировать сложенные столбчатые и линейные графики

#python #pandas #matplotlib

#python #панды #matplotlib

Вопрос:

Я сгруппировал фрейм данных pandas:

         DailyTests  pos_DailyTests  percentOfPositive
Week                                               
44          1079              45               4.00
45         14593             706               4.64
46         18290            1003               5.14
47         19271            1237               6.07
48         12258             938               7.04
 

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

Мой код:

 fig , ax1 = plt.subplots()
ax2 = ax1.twinx()
data_con2.plot(kind='bar', stacked = True, ax=ax1, y = ['DailyTests','pos_DailyTests'])
data_con2.plot(kind='line', ax=ax2, y = 'percentOfPositive', color="red")
ax1.set_ylabel('Tests in day')
ax2.set_ylabel('percent of positives')
 

Пример графика выглядит следующим:

Пример графика — столбчатые столбцы, но не линейный график

Ответ №1:

Есть причина, по которой ваш код не работает, потому что kind = ‘bar’ и ‘line’ по-разному отображают ось x. Простой способ решить эту проблему — преобразовать week в строковый тип. Еще одна вещь, которую трудно увидеть на линейном графике, поскольку «Процент положительного» имеет низкие значения по сравнению с двумя другими столбцами, но он есть.

 df['Week'] = df['Week'].astype("string") 
ax = df[['Week', 'DailyTests', 'pos_DailyTests']].plot(x='Week', kind='bar',  stacked=True )
df[['Week', 'percentOfPositive']].plot(x='Week', color ='black' ,marker='o',ax=ax)
plt.show()
 

введите описание изображения здесь