Comment créer un graphique à barres groupé avec un espacement correct et des annotations précises à l'aide de Matplotlib et Pandas ?

Susan Sarandon
Libérer: 2024-11-03 12:23:29
original
1044 Les gens l'ont consulté

How to create a grouped bar chart with correct spacing and accurate annotations using Matplotlib and Pandas?

Traçage et annotation d'un graphique à barres groupées

Analyse des erreurs

Le code fourni pour créer un graphique à barres groupé en Python à l'aide de Matplotlib contient des erreurs. Plus précisément, la valeur de w est incorrecte et les emplacements d'annotations utilisant l'autolabel sont mal alignés.

Valeur w corrigée :

La valeur de w devrait être de 0,8/3 à la place. de 0,8 pour garantir un espacement approprié entre les barres.

Utilisation du tracé Pandas pour le traçage

Une approche plus simple pour tracer un graphique à barres groupées consiste à utiliser la méthode de tracé des DataFrames pandas. Cette méthode permet un traçage et des annotations faciles.

Placement amélioré des annotations

Pour placer avec précision les annotations au-dessus des barres, utilisez le code suivant :

for p in ax.patches:
    ax.annotate(f'{p.get_height():0.2f}', (p.get_x() + p.get_width() / 2., p.get_height()), ha = 'center', va = 'center', xytext = (0, 10), textcoords = 'offset points')
Copier après la connexion

Ici, le décalage les points sont fixés à (0, 10) pour aligner les annotations directement au-dessus des centres des barres.

Code complet

Le code corrigé et amélioré est le suivant :

import pandas as pd
import matplotlib.pyplot as plt

df = pandas.DataFrame({
    'Very interested': [1332, 1688, 429, 1340, 1263, 1629],
    'Somewhat interested': [729, 444, 1081, 734, 770, 477],
    'Not interested': [127, 60, 610, 102, 136, 74]
    }, index=['Big Data (Spark / Hadoop)', 'Data Analysis / Statistics', 'Data Journalism', 'Data Visualization', 'Deep Learning', 'Machine Learning'])

colors = ['#5cb85c', '#5bc0de', '#d9534f']
fig, ax = plt.subplots(figsize=(20, 8))

ax.set_ylabel('Percentage', fontsize=14)
ax.set_title(
    "The percentage of the respondents' interest in the different data science Area",
    fontsize=16)
ax.set_xticklabels(ax.get_xticklabels(), rotation=0)

df.plot.bar(ax=ax, color=colors)

for p in ax.patches:
    ax.annotate(f'{p.get_height():0.2f}', (p.get_x() + p.get_width() / 2., p.get_height()), ha='center', va='center', xytext=(0, 10), textcoords='offset points')

plt.show()
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal