2 votes

Est-il possible de placer les `plt.yticks` entre les barres horizontales ?

J'essaie de placer la valeur dans le champ plt.yticks entre les barres. Malheureusement, je n'ai aucune idée de la manière de procéder. Est-ce possible ? et si oui, quelqu'un peut-il me donner des conseils ?

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

age = np.array(
    ["0 - 4", "5 - 9", "10 - 14", "15 - 19", "20 - 24", "25 - 29", "30 - 34", "35 - 39",
     "40 - 44", "45 - 49", "50 - 54", "55 - 59", "60 - 64", "65 - 69", "70 - 74",
     "75 - 79", "80 - 84", "85 - 89", "90 - 94", "95 - 99", "> 100"])
m = np.array(
    [1915887, 2100931, 2494484, 2464805, 2361297, 2529633, 2669927, 2754129, 2753282,
     2552531, 2211649, 1697221, 1311024, 902675, 722246, 482686, 273915, 108639, 35867,
     10965, 1238])
f = np.array(
    [1823981, 1980712, 2369795, 2435784, 2330223, 2562964, 2724990, 2860720, 2918730,
     2713534, 2376384, 1869867, 1454373, 1030677, 885393, 640698, 388748, 172302, 64170,
     19868, 2711])
x = np.arange(age.size)
tick_lab = ['3M', '2M', '1M', '1M', '2M', '3M']
tick_val = [-3000000, -2000000, -1000000, 1000000, 2000000, 3000000]

def plot_pyramid():
    plt.barh(x, -m, alpha=.75, height=.75, align='center' , color="deepskyblue")
    plt.barh(x, f, alpha=.75, height=.75, align='center', color="pink")
    plt.yticks(x, age)
    plt.xticks(tick_val, tick_lab)
    plt.grid(b=False)
    plt.title("Population Pyramid")
    plt.show()

if __name__ == '__main__':
    plot_pyramid()

Graphique généré par ce code

1voto

Bazingaa Points 7919

Je viens de remplacer les deux plt.barh par les lignes ci-dessous et ajouté la boucle for après plt.title à l'intérieur de la fonction et remplacé ax.set_yticks(False) por plt.yticks([]) . Je ne sais pas si c'est exactement ce que vous voulez.

# Modified before the function because you are shifting the bars left/right
tick_val = np.array([-3000000, -2000000, -1000000, 1000000, 2000000, 3000000])
shift = 300000
tick_val[0:3] -= shift
tick_val[3:] += shift

# Modified inside the function
plt.barh(x, -m, alpha=.75, height=.75, left=-shift, align='center' , color="deepskyblue")
plt.barh(x, f, alpha=.75, height=.75, left = shift, align='center', color="pink")

for i, j in enumerate(age):
    if i==0 or i==1:
        plt.text(-150000, x[i]-0.2, j, fontsize=10)
    else:    
        plt.text(-230000, x[i]-0.2, j, fontsize=10)

Sortie

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X