Tilføjelse af Signaturforklaring
Når flere elementer er til stede i et diagram, er det ofte nyttigt at mærke dem for at skabe klarhed. Forklaringen (legend) tjener dette formål ved at give et kompakt område, der forklarer de forskellige komponenter i diagrammet.
Følgende er tre almindelige måder at oprette en forklaring i matplotlib
på.
Første mulighed
Overvej følgende eksempel for at tydeliggøre konceptet:
import matplotlib.pyplot as plt import numpy as np # Define categories and data questions = ['question_1', 'question_2', 'question_3'] yes_answers = np.array([500, 240, 726]) no_answers = np.array([432, 618, 101]) answers = np.array([yes_answers, no_answers]) # Set positions and bar width positions = np.arange(len(questions)) width = 0.3 # Create the grouped bar chart for i in range(len(answers)): plt.bar(positions + width * i, answers[i], width) # Adjust x-axis ticks to the center of groups plt.xticks(positions + width * (len(answers) - 1) / 2, questions) # Setting the labels for the legend explicitly plt.legend(['positive answers', 'negative answers']) plt.show()
I øverste venstre hjørne forklarer en signatur de forskellige søjler på diagrammet. Denne signatur oprettes ved hjælp af funktionen plt.legend()
, hvor en liste af etiketter gives som det første argument—ofte kaldet labels
.
Andet valg
En anden mulighed indebærer at angive parameteren label
i hvert kald af plotfunktionen, såsom bar i vores eksempel:
import matplotlib.pyplot as plt import numpy as np # Define x-axis categories and their positions questions = ['question_1', 'question_2', 'question_3'] positions = np.arange(len(questions)) # Define answers for each category yes_answers = np.array([500, 240, 726]) no_answers = np.array([432, 618, 101]) answers = np.array([yes_answers, no_answers]) labels = ['positive answers', 'negative answers'] # Set the width for each bar width = 0.3 # Plot each category with a label for i in range(len(answers)): plt.bar(positions + width * i, answers[i], width, label=labels[i]) # Set x-axis ticks and labels at the center of each group plt.xticks(positions + width * (len(answers) - 1) / 2, questions) # Automatically create legend from label parameters plt.legend() plt.show()
Her bestemmer plt.legend()
automatisk, hvilke elementer der skal tilføjes til signaturforklaringen og deres etiketter; alle elementer med den angivne label-parameter inkluderes.
Tredje mulighed
Faktisk findes der endnu en mulighed ved at bruge set_label()
-metoden på kunstobjektet (bar
i vores eksempel):
import matplotlib.pyplot as plt import numpy as np questions = ['question_1', 'question_2', 'question_3'] positions = np.arange(len(questions)) yes_answers = np.array([500, 240, 726]) no_answers = np.array([432, 618, 101]) answers = np.array([yes_answers, no_answers]) width = 0.3 labels = ['positive answers', 'negative answers'] # Plot bars for each category with labels for i in range(len(answers)): bar = plt.bar(positions + width * i, answers[i], width) bar.set_label(labels[i]) # Set x-axis ticks and labels at the center of the grouped bars center_positions = positions + width * (len(answers) - 1) / 2 plt.xticks(center_positions, questions) # Display legend above the plot, centered horizontally plt.legend(loc='upper center') plt.show()
Placering af signaturforklaring
Der er et andet vigtigt nøgleargument i funktionen legend()
, loc
, som angiver placeringen af signaturforklaringen. Standardværdien er best
, hvilket "fortæller" matplotlib
automatisk at vælge den bedste placering for signaturforklaringen for at undgå overlap med data.
import matplotlib.pyplot as plt import numpy as np questions = ['question_1', 'question_2', 'question_3'] positions = np.arange(len(questions)) yes_answers = np.array([500, 240, 726]) no_answers = np.array([432, 618, 101]) answers = np.array([yes_answers, no_answers]) width = 0.3 labels = ['positive answers', 'negative answers'] # Plot bars for each category with labels for i, label in enumerate(labels): bars = plt.bar(positions + width * i, answers[i], width) bars.set_label(label) # Set x-axis ticks and labels at the center of the grouped bars center_positions = positions + width * (len(answers) - 1) / 2 plt.xticks(center_positions, questions) # Display legend above the plot, centered horizontally plt.legend(loc='upper center') plt.show()
I dette eksempel er signaturforklaringen placeret i øverste midte af diagrammet. Andre gyldige værdier for loc
-parameteren inkluderer:
'upper right'
,'upper left'
,'lower left'
;'lower right'
,'right'
;'center left'
,'center right'
,'lower center'
,'center'
.
Du kan udforske mere i legend()
dokumentation
Swipe to start coding
- Mærk de laveste søjler som
'primary sector'
ved at angive det relevante nøgleargument. - Mærk søjlerne i midten som
'secondary sector'
ved at angive det relevante nøgleargument. - Mærk de øverste søjler som
'tertiary sector'
ved at angive det relevante nøgleargument. - Placer signaturforklaringen til højre, centreret lodret.
Løsning
Tak for dine kommentarer!