текст matplotlib не помещается поверх патчей даже при более высоком zorder - PullRequest
0 голосов
/ 15 февраля 2019

Я нанес данные для женщин по одной оси и мужчин по другим осям.Каждый график был сделан с zorder = 0, но с position = 1 и position = 2 соответственно.Я помечаю столбцы текстом с zorder = 1, , но, как вы можете видеть , столбцы перекрывают текст.Это потому что они на разных осях?В таком случае, как я могу сделать так, чтобы текст на одной оси был выше, чем самый высокий zorder на других осях?

def get_ages():
    df = pd.read_csv('surveydata.csv', low_memory=False)

    fems = df.loc[df['gender'] == 1]
    males =  df.loc[df['gender'] == 2]

    fdata = fems['age'].value_counts()
    mdata = males['age'].value_counts()

    fdata.sort_index(inplace=True)
    mdata.sort_index(inplace=True)
    print(fdata)
    print(mdata)
    fdata2 = fdata[0:14]
    mdata2 = mdata[0:14]
    fdata2['>31'] = sum(fdata[14:])
    mdata2['>31'] = sum(mdata[14:])

    fig = plt.figure()  # Create matplotlib figure

    ax = fig.add_subplot(111)  # Create matplotlib axes
    ax2 = ax.twinx()  # Create another axes that shares the same x-axis as ax.


    fdata2.plot(kind='bar', figsize=(10, 5.7), width=.4, color='pink', position=0, ax=ax,zorder=0)
    mdata2.plot(kind='bar', figsize=(10, 5.7), width=.4, color='lightskyblue', position=1, ax=ax2, zorder=0)
    ax.set_title("Ages", fontsize=18)
    ax.set_ylabel("Occurrence", fontsize=18)
    ax.set_facecolor('snow')
    ax.set_xlim(ax.patches[0].get_x() - 1, ax.patches[-1].get_x() + 1)
    ax2.set_yticks([])
    totals = []

    for i in ax.patches:
        totals.append(i.get_height())

    total = sum(totals)

    for i in ax.patches:
        ax.text(i.get_x() , i.get_height() + .5,
                str(round((i.get_height() / total) * 100, 2)) + '%', fontsize=8,
                color='black', horizontalalignment='left', zorder=9)



    totals = []
    for i in ax2.patches:
        totals.append(i.get_height())

    total = sum(totals)

    for i in ax2.patches:
        t = ax2.text(i.get_x()+ i.get_width(), i.get_height() + .5,
                str(round((i.get_height() / total) * 100, 1)) + '%', fontsize=8,
                color='black', horizontalalignment='right', zorder=10)

        for x in ax.texts: #Shifts text up and down in case they overlap.
            bb2 = x.get_window_extent(ax.get_figure().canvas.get_renderer())
            bb = t.get_window_extent(ax.get_figure().canvas.get_renderer())

            while bb2.overlaps(bb):
                t.set_y(a._y - .01)
                bb2 = x.get_window_extent(ax.get_figure().canvas.get_renderer())
                bb = t.get_window_extent(ax.get_figure().canvas.get_renderer())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...