Как решить эту ошибку при создании столбчатой диаграммы?

Вопрос или проблема

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plotdata = pd.DataFrame({
    "Атака 0":[57,67,77,83],    
    "Атака 1":[68,73,80,79],    
    "Атака 2":[73,78,80,85],
    "Атака 3":[73,78,80,85],    
    "Атака 4":[73,78,80,85]},    
    index=["Атака 0", "Атака 1", "Атака 2", "Атака 3", "Атака 4"])

plotdata.plot(kind="bar",figsize=(15, 8))
plt.xlabel("Разные атаки вредоносных программ")    
plt.ylabel("Точность")

Ошибка, которую я получаю: ValueError: Размер переданных значений (4, 4), индексы подразумевают (5, 4).

Я думаю, что "Атака 0", "Атака 1", ... – это названия столбцов, а не строк.

Поэтому вам нужно использовать ключевое слово columns=["Атака 0", "Атака 1, ..." вместо index=["Атака 0", "Атака 1, ..." при создании вашего DataFrame.

.

Ответ или решение

Для того чтобы разрешить проблему, связанную с ошибкой ValueError: Shape of passed values is (4, 4), indices imply (5, 4), при создании столбчатой диаграммы в Python с использованием библиотеки pandas и matplotlib, необходимо понимать структуру DataFrame и его индексов.

Анализ проблемы

Ошибка, с которой вы столкнулись, возникает из-за несоответствия между размерами данных, которые вы передаёте в DataFrame, и указанными вами индексами. В вашем коде вы создали DataFrame с четырьмя строками данных (каждая строка соответствует отдельной атаке), но при этом вы указали пять индексов ("Attack 0", "Attack 1", "Attack 2", "Attack 3", "Attack 4"). Это и приводит к возникновению ошибки.

Исправление кода

Вам необходимо изменить способ создания DataFrame, чтобы избежать путаницы с индексами и столбцами. Так как вы хотите, чтобы ваши данные отражали различные атаки в качестве столбцов, правильно будет задать индексы для строк. Ниже приведён исправленный код.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

plotdata = pd.DataFrame({
    "Attack 0": [57, 67, 77, 83],
    "Attack 1": [68, 73, 80, 79],
    "Attack 2": [73, 78, 80, 85],
    "Attack 3": [73, 78, 80, 85],
    "Attack 4": [73, 78, 80, 85]},
    index=["Method 1", "Method 2", "Method 3", "Method 4"])  # Индексы для процессов

# Создание столбчатой диаграммы
plotdata.plot(kind="bar", figsize=(15, 8))
plt.xlabel("Разные методы атаки")    
plt.ylabel("Точность")
plt.title("Сравнение точности различных атак")  # добавление заголовка для большей ясности
plt.legend(title='Тип атаки')  # заголовок легенды для чтения
plt.show()

Комментарии к изменениям

  1. Правильное указание индексов: Индексы теперь корректно выровнены с количеством строк в ваших данных. Вы можете изменить их, чтобы отразить методики атаки или стратегии, которые вы используете.

  2. Добавление заголовка графика: Заголовок теперь чётко указывает на содержание графика, что дополнительно помогает в понимании графика.

  3. Легенда: Добавленная легенда делает график более читаемым и позволяет быстро ориентироваться в данных.

Заключение

Следуя приведённым рекомендациям, вы сможете избежать упомянутой ошибки и создать информативный и визуально привлекательный график. Помните, что тщательное обращение с индексами и структурой данных в pandas — ключ к эффективной работе со столбчатыми диаграммами.

Оцените материал
Добавить комментарий

Капча загружается...