Додавання Легенди
Коли на графіку присутні кілька елементів, часто доцільно їх підписати для кращої зрозумілості. Легенда виконує цю функцію, надаючи компактну область, яка пояснює різні компоненти графіка.
Нижче наведено три поширені способи створення легенди у matplotlib
.
Перший варіант
Розгляньте наступний приклад для кращого розуміння концепції:
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()
У верхньому лівому куті легенда пояснює різні стовпці на діаграмі. Цю легенду створюють за допомогою функції plt.legend()
, куди першим аргументом передають список підписів — зазвичай його називають labels
.
Другий варіант
Інший спосіб полягає у вказанні параметра label
під час кожного виклику функції побудови графіка, наприклад, bar у нашому випадку:
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()
Тут plt.legend()
автоматично визначає елементи, які потрібно додати до легенди, та їх підписи; усі елементи з вказаним параметром label включаються.
Третій варіант
Насправді існує ще один варіант — використання методу set_label()
для художнього елемента (у нашому прикладі — bar
):
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()
Розташування легенди
Існує ще один важливий іменований аргумент функції legend()
— loc
, який визначає розташування легенди. Його значення за замовчуванням — best
, що "доручає" matplotlib
автоматично вибрати найкраще місце для легенди, щоб уникнути перекриття з даними.
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()
У цьому прикладі легенда розташована у верхньому центрі графіка. Інші допустимі значення параметра loc
включають:
'upper right'
,'upper left'
,'lower left'
;'lower right'
,'right'
;'center left'
,'center right'
,'lower center'
,'center'
.
Ви можете дізнатися більше у legend()
документації
Swipe to start coding
- Позначити найнижчі стовпці як
'primary sector'
, вказавши відповідний іменований аргумент. - Позначити стовпці посередині як
'secondary sector'
, вказавши відповідний іменований аргумент. - Позначити найвищі стовпці як
'tertiary sector'
, вказавши відповідний іменований аргумент. - Розмістити легенду праворуч, по центру вертикалі.
Рішення
Дякуємо за ваш відгук!