Вопрос или проблема
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()
Комментарии к изменениям
-
Правильное указание индексов: Индексы теперь корректно выровнены с количеством строк в ваших данных. Вы можете изменить их, чтобы отразить методики атаки или стратегии, которые вы используете.
-
Добавление заголовка графика: Заголовок теперь чётко указывает на содержание графика, что дополнительно помогает в понимании графика.
-
Легенда: Добавленная легенда делает график более читаемым и позволяет быстро ориентироваться в данных.
Заключение
Следуя приведённым рекомендациям, вы сможете избежать упомянутой ошибки и создать информативный и визуально привлекательный график. Помните, что тщательное обращение с индексами и структурой данных в pandas — ключ к эффективной работе со столбчатыми диаграммами.