У меня есть график с несколькими барами с разными сценариями, но когда я строю его, все столбцы повторяются.Пожалуйста, найдите ниже мой код.
Я знаю, что я использую только одно значение за раз из списка, но когда я пытаюсь передать весь подмассив с помощью data[0]
, я получаю Значениеошибка несоответствия:
ValueError: shape mismatch: objects cannot be broadcast to a single shape
Что я делаю не так?Я посмотрел на PyPlot пример и этот другой пост и оба передали массив в ax.bar
.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data = [[20, 35, 30, 40], [25, 40, 45, 30],
[15, 20, 35, 45], [10, 25, 40, 15],
[50, 20, 45, 55], [10, 55, 60, 20]]
data_std = [[1, 2, 1, 2], [1, 2, 1, 2], [1, 2, 1, 2],
[1, 2, 1, 2], [1, 2, 1, 2], [1, 2, 1, 2]]
length = len(data)
x_labels = ['A', 'B', 'C', 'D', 'E', 'F']
# Set plot parameters
fig, ax = plt.subplots()
width = 0.2 # width of bar
x = np.arange(length)
ax.bar(x, data[0][0], width, color='#000080', label='Case-1', yerr=data_std[0][0])
ax.bar(x + width, data[0][1], width, color='#0F52BA', label='Case-2', yerr=data_std[0][1])
ax.bar(x + (2 * width), data[0][2], width, color='#6593F5', label='Case-3', yerr=data_std[0][2])
ax.bar(x + (3 * width), data[0][3], width, color='#73C2FB', label='Case-4', yerr=data_std[0][3])
ax.set_ylabel('Metric')
ax.set_ylim(0,75)
ax.set_xticks(x + width + width/2)
ax.set_xticklabels(x_labels)
ax.set_xlabel('Scenario')
ax.set_title('Title')
ax.legend()
plt.grid(True, 'major', 'y', ls='--', lw=.5, c='k', alpha=.3)
fig.tight_layout()
plt.show()
Результат:
