Legge til Forklaring
Når flere elementer er til stede i et diagram, er det ofte nyttig å merke dem for å gjøre diagrammet tydeligere. Forklaringen (legend) fyller denne rollen ved å gi et kompakt område som forklarer de ulike komponentene i diagrammet.
Følgende er tre vanlige måter å lage en forklaring på i matplotlib
.
Første alternativ
Vurder følgende eksempel for å tydeliggjøre konseptet:
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()
Øverst til venstre forklarer en forklaring de ulike stolpene i diagrammet. Denne forklaringen opprettes ved hjelp av funksjonen plt.legend()
, hvor en liste med etiketter sendes som første argument—vanligvis referert til som labels
.
Andre alternativ
Et annet alternativ innebærer å spesifisere parameteren label
i hvert kall til plottfunksjonen, som for eksempel bar i vårt 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 som skal legges til i forklaringen og deres etiketter; alle elementer med angitt label-parameter blir inkludert.
Tredje alternativ
Faktisk finnes det enda et alternativ ved å bruke set_label()
-metoden på artist-objektet (bar
i vårt 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()
Plassering av forklaring
Det finnes et annet viktig nøkkelargument for funksjonen legend()
, nemlig loc
, som angir plasseringen av forklaringen. Standardverdien er best
, som "forteller" matplotlib
å automatisk velge den beste plasseringen for forklaringen for å unngå overlapping 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 eksemplet er forklaringen plassert øverst i midten av diagrammet. Andre gyldige verdier for parameteren loc
inkluderer:
'upper right'
,'upper left'
,'lower left'
;'lower right'
,'right'
;'center left'
,'center right'
,'lower center'
,'center'
.
Du kan utforske mer i legend()
dokumentasjon
Swipe to start coding
- Merk de laveste stolpene som
'primary sector'
ved å angi riktig nøkkelordargument. - Merk stolpene i midten som
'secondary sector'
ved å angi riktig nøkkelordargument. - Merk de øverste stolpene som
'tertiary sector'
ved å angi riktig nøkkelordargument. - Plasser forklaringen på høyre side, sentrert vertikalt.
Løsning
Takk for tilbakemeldingene dine!