Anotación significa agregar notas a un diagrama indicando qué valores representa. A menudo resulta tedioso para el usuario leer los valores del gráfico cuando el gráfico está reducido o está demasiado poblado. En este artículo, discutiremos cómo anotar los diagramas de barras creados en python usando la biblioteca matplotlib .
Los siguientes son ejemplos de gráficos de barras anotados y no anotados:
Enfoque paso a paso:
- Primero tracemos gráficos simples a partir de un marco de datos de Pandas, por lo que ahora tenemos listo el siguiente marco de datos:
Python3
# Importing libraries for dataframe creation # and graph plotting import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # Creating our own dataframe data = {"Name": ["Alex", "Bob", "Clarein", "Dexter"], "Marks": [45, 23, 78, 65]} # Now convert this dictionary type data into a pandas dataframe # specifying what are the column names df = pd.DataFrame(data, columns=['Name', 'Marks'])
Producción:
- Ahora comencemos a trazar el marco de datos usando la biblioteca seaborn . Obtenemos los siguientes resultados. Pero no es muy visible cuáles son los valores reales en los gráficos de barras. Esta condición también puede presentarse cuando los valores de las parcelas vecinas son bastante cercanos entre sí.
Python3
# Defining the plotsize plt.figure(figsize=(8, 6)) # Defining the x-axis, the y-axis and the data # from where the values are to be taken plots = sns.barplot(x="Name", y="Marks", data=df) # Setting the x-acis label and its size plt.xlabel("Students", size=15) # Setting the y-axis label and its size plt.ylabel("Marks Secured", size=15) # Finallt plotting the graph plt.show()
Producción:
- Agregar las anotaciones. Nuestra estrategia aquí será iterar todas las barras y poner un texto sobre todas ellas que señalará los valores de esa barra en particular. Aquí usaremos la función de Matlpotlib llamada anotar(). Podemos encontrar varios usos de esta función en varios escenarios, actualmente, solo mostraremos el valor de las respectivas barras en su parte superior.
Nuestros pasos serán:
- Iterar sobre las barras
- Obtenga la posición del eje x (x) y el ancho (w) de la barra, esto nos ayudará a obtener la coordenada x del texto, es decir , get_x()+get_width()/2 .
- La coordenada y (y) del texto se puede encontrar usando la altura de la barra, es decir, get_height()
- Entonces tenemos las coordenadas del valor de la anotación, es decir, get_x()+get_width()/2, get_height()
- Pero esto imprimirá la anotación exactamente en el límite de la barra, por lo que para obtener una gráfica anotada más agradable, usamos el parámetro xyplot=(0, 8) . Aquí 8 denota los píxeles que quedarán desde la parte superior de la barra. Por lo tanto, para ir por debajo de la línea de compás podemos usar xy=(0,-8) .
- Así que ejecutamos el siguiente código para obtener el gráfico anotado:
Python3
# Defining the plot size plt.figure(figsize=(8, 8)) # Defining the values for x-axis, y-axis # and from which dataframe the values are to be picked plots = sns.barplot(x="Name", y="Marks", data=df) # Iterrating over the bars one-by-one for bar in plots.patches: # Using Matplotlib's annotate function and # passing the coordinates where the annotation shall be done # x-coordinate: bar.get_x() + bar.get_width() / 2 # y-coordinate: bar.get_height() # free space to be left to make graph pleasing: (0, 8) # ha and va stand for the horizontal and vertical alignment plots.annotate(format(bar.get_height(), '.2f'), (bar.get_x() + bar.get_width() / 2, bar.get_height()), ha='center', va='center', size=15, xytext=(0, 8), textcoords='offset points') # Setting the label for x-axis plt.xlabel("Students", size=14) # Setting the label for y-axis plt.ylabel("Marks Secured", size=14) # Setting the title for the graph plt.title("This is an annotated barplot") # Finally showing the plot plt.show()
Producción:
A continuación se muestra el programa completo basado en el enfoque anterior:
Python3
# Importing libraries for dataframe creation # and graph plotting import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # Creating our own dataframe data = {"Name": ["Alex", "Bob", "Clarein", "Dexter"], "Marks": [45, 23, 78, 65]} # Now convert this dictionary type data into a pandas dataframe # specifying what are the column names df = pd.DataFrame(data, columns=['Name', 'Marks']) # Defining the plot size plt.figure(figsize=(8, 8)) # Defining the values for x-axis, y-axis # and from which dataframe the values are to be picked plots = sns.barplot(x="Name", y="Marks", data=df) # Iterrating over the bars one-by-one for bar in plots.patches: # Using Matplotlib's annotate function and # passing the coordinates where the annotation shall be done # x-coordinate: bar.get_x() + bar.get_width() / 2 # y-coordinate: bar.get_height() # free space to be left to make graph pleasing: (0, 8) # ha and va stand for the horizontal and vertical alignment plots.annotate(format(bar.get_height(), '.2f'), (bar.get_x() + bar.get_width() / 2, bar.get_height()), ha='center', va='center', size=15, xytext=(0, 8), textcoords='offset points') # Setting the label for x-axis plt.xlabel("Students", size=14) # Setting the label for y-axis plt.ylabel("Marks Secured", size=14) # Setting the title for the graph plt.title("This is an annotated barplot") # Finally showing the plot plt.show()
Producción:
A continuación se muestran algunos ejemplos que representan las barras de anotación en un diagrama de barras con la biblioteca matplotlib :
Ejemplo 1:
Python3
# Importing libraries for dataframe creation # and graph plotting import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # Creating our own dataframe data = {"Language": ["Python", "C++", "Java"], "Students": [75, 50, 25]} # Now convert this dictionary type data into a pandas dataframe # specifying what are the column names df = pd.DataFrame(data, columns=['Language', 'Students']) # Defining the plot size plt.figure(figsize=(5, 5)) # Defining the values for x-axis, y-axis # and from which dataframe the values are to be picked plots = sns.barplot(x="Language", y="Students", data=df) # Iterrating over the bars one-by-one for bar in plots.patches: # Using Matplotlib's annotate function and # passing the coordinates where the annotation shall be done plots.annotate(format(bar.get_height(), '.2f'), (bar.get_x() + bar.get_width() / 2, bar.get_height()), ha='center', va='center', size=15, xytext=(0, 5), textcoords='offset points') # Setting the title for the graph plt.title("Example 1") # Finally showing the plot plt.show()
Producción:
Ejemplo 2:
Python3
# Importing libraries for dataframe creation # and graph plotting import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # Creating our own dataframe data = {"Section": ["A", "B", "C", 'D', 'E'], "Students": [0, 10, 20, 30, 40]} # Now convert this dictionary type data into a pandas dataframe # specifying what are the column names df = pd.DataFrame(data, columns=['Section', 'Students']) # Defining the plot size plt.figure(figsize=(5, 5)) # Defining the values for x-axis, y-axis # and from which dataframe the values are to be picked plots = sns.barplot(x="Section", y="Students", data=df) # Iterrating over the bars one-by-one for bar in plots.patches: # Using Matplotlib's annotate function and # passing the coordinates where the annotation shall be done plots.annotate(format(bar.get_height(), '.2f'), (bar.get_x() + bar.get_width() / 2, bar.get_height()), ha='center', va='center', size=15, xytext=(0, 5), textcoords='offset points') # Setting the title for the graph plt.title("Example 2") # Finally showing the plot plt.show()
Python3
# Importing libraries for dataframe creation # and graph plotting import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # Creating our own dataframe data = {"Section": ["A", "B", "C", 'D', 'E'], "Students": [0, 10, 20, 30, 40]} # Now convert this dictionary type data into a pandas dataframe # specifying what are the column names df = pd.DataFrame(data, columns=['Section', 'Students']) # Defining the plot size plt.figure(figsize=(5, 5)) # Defining the values for x-axis, y-axis # and from which dataframe the values are to be picked plots = sns.barplot(x="Section", y="Students", data=df) # Iterrating over the bars one-by-one for bar in plots.patches: # Using Matplotlib's annotate function and # passing the coordinates where the annotation shall be done plots.annotate(format(bar.get_height(), '.2f'), (bar.get_x() + bar.get_width() / 2, bar.get_height()), ha='center', va='center', size=15, xytext=(0, 5), textcoords='offset points') # Setting the title for the graph plt.title("Example 2") # Finally showing the plot plt.show()
Producción:
Publicación traducida automáticamente
Artículo escrito por sagarpandey7742 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA