Как выровнять гистограмму и два линейных графика? - PullRequest
0 голосов
/ 10 февраля 2020

Мне нужно получить две линейные диаграммы и гистограмму на одной диаграмме. Обе линейные диаграммы имеют одинаковую ось Y, но гистограмма имеет различную ось.

Формат таблицы

Indicator Name                                     2011 2012 2013 2014 2015 2016 2017 2018 2019
Bank nonperforming loans to total gross loans (%) 3.8   3.6  5.5  4.2  3.2  2.6  2.4  3.4  4.2
Bank nonperforming loans to total net loans (%)   3     2.2  3.8  2.6  1.2  1.7  1.3  2.2  2.5 
Bank Total gross loans ( LK Bn)                   99   116.6 191  165 152.8 142.3 160.7 263.1 275.5 

Это мой код:

df.loc['Bank nonperforming loans to total gross loans (%)', years].plot(kind = 'line',color='mediumvioletred',marker ='o',
markerfacecolor ='blue',markersize=9,label = "NPL %")
df.loc['Bank nonperforming loans to total net loans (%)', years].plot(kind = 'line',color='blue',label = "SL")
plt.twinx()       
df.loc['Bank Total gross loans (LK Bn)', years].plot(kind = 'Bar',color='brown',label = "chk")
plt.ylim([90,280])
plt.title('Immigration from Afghanistan')
plt.ylabel('NPL %')
plt.xlabel('years')
plt.legend()

Ниже это график, который я получаю, но он не показывает гистограмму.

enter image description here

1 Ответ

0 голосов
/ 11 февраля 2020

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

Коде:

import pandas as pd
import matplotlib.pyplot as plt


data = {
    2011: [3.8, 3, 99],
    2012: [3.6, 2.2, 116.6],
    2013: [5.5, 3.8, 191],
    2014: [4.2, 2.6, 165],
    2015: [3.2, 1.2, 152.8],
    2016: [2.6, 1.7, 142.3],
    2017: [2.4, 1.3, 160.7],
    2018: [3.4, 2.2, 263.1],
    2019: [4.2, 2.5, 275.5],
}

df = pd.DataFrame(
    data,
    index=['Bank nonperforming loans to total gross loans (%)',
           'Bank nonperforming loans to total net loans (%)',
           'Bank Total gross loans (LK Bn)'],
    columns=data.keys()
)

years = list(data.keys())

fig, ax = plt.subplots()

# axis for the bar
ax2 = ax.twinx()
ax2.set_ylim([90, 280])

# creating a cloned axis from ax for lines
# wee need this to put line plots on bars
ax1 = fig.add_axes(ax.get_position(), sharex=ax, sharey=ax)
ax1.set_facecolor('none')
ax1.set_axis_off()
ax1.set_xticks(years)

bar = ax2.bar(
    years,
    df.loc['Bank Total gross loans (LK Bn)'], color='brown',
    label='chk',
)

line1, = ax1.plot(
    df.loc['Bank nonperforming loans to total gross loans (%)', years],
    color='mediumvioletred',
    marker='o',
    markerfacecolor='blue',
    markersize=9,
    label='NPL %',
)

line2, = ax1.plot(
    df.loc['Bank nonperforming loans to total net loans (%)', years],
    color='blue',
    label='SL',
)

ax.set_title('Immigration from Afghanistan')
ax.set_ylabel('NPL %')
ax.set_xlabel('years')

ax2.legend([bar, line1, line2], ['chk', 'NPL %', 'SL'])

Сюжет:

image

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