Как увеличить ширину стержня в сгруппированном столбчатом графике без уменьшения разрыва между группами с помощью matplotlib.pyplot? - PullRequest
0 голосов
/ 13 апреля 2020

Я нашел следующий пример для сгруппированного гистограммы, используя matplotlib.pyplot, и смог успешно скопировать пример, который выдает следующий вывод:

enter image description here

Код для приведенного выше графика:

# libraries
import numpy as np
import matplotlib.pyplot as plt

# set width of bar
barWidth = 0.25

# set height of bar
bars1 = [12, 30, 1, 8, 22]
bars2 = [28, 6, 16, 5, 10]
bars3 = [29, 3, 24, 25, 17]

# Set position of bar on X axis
r1 = np.arange(len(bars1))
r2 = [x + barWidth for x in r1]
r3 = [x + barWidth for x in r2]

# Make the plot
plt.bar(r1, bars1, color='#7f6d5f', width=barWidth, edgecolor='white', label='var1')
plt.bar(r2, bars2, color='#557f2d', width=barWidth, edgecolor='white', label='var2')
plt.bar(r3, bars3, color='#2d7f5e', width=barWidth, edgecolor='white', label='var3')

# Add xticks on the middle of the group bars
plt.xlabel('group', fontweight='bold')
plt.xticks([r + barWidth for r in range(len(bars1))], ['A', 'B', 'C', 'D', 'E'])

# Create legend & Show graphic
plt.legend()
plt.show()

Затем я адаптировал этот пример кода для использования моих собственных данных и меток, но обнаружил, что мне нужно увеличить ширину столбцов. Когда я пытаюсь сделать это увеличение:

barWidth = 0.5

я нахожу, что я теряю промежуток между сгруппированными столбцами, и некоторые из столбцов заканчиваются стопкой, как показано здесь:

enter image description here

Я пытался увеличить размер фигуры, но это не помогло решить проблему, оно выглядело точно так же, только больше.

Как правильно увеличить ширину стержня и сохранить правильную группировку стержней и расстояние между группами?

Спасибо за ваше время.

1 Ответ

0 голосов
/ 13 апреля 2020

Вы можете попробовать сбросить r1:

r1 = np.arange(0,len(bars1)*2,2)

Таким образом, весь код теперь:

# libraries
import numpy as np
import matplotlib.pyplot as plt

# set width of bar
barWidth = 0.5

# set height of bar
bars1 = [12, 30, 1, 8, 22]
bars2 = [28, 6, 16, 5, 10]
bars3 = [29, 3, 24, 25, 17]

# Set position of bar on X axis
r1 = np.arange(0,len(bars1),1) #your original r1
print (r1)
r1 = np.arange(0,len(bars1)*2,2) #r1 was reset
print (r1)
r2 = [x + barWidth for x in r1]
r3 = [x + barWidth for x in r2]

# Make the plot
plt.bar(r1, bars1, color='#7f6d5f', width=barWidth, edgecolor='white',    label='var1')
plt.bar(r2, bars2, color='#557f2d', width=barWidth, edgecolor='white', label='var2')
plt.bar(r3, bars3, color='#2d7f5e', width=barWidth, edgecolor='white', label='var3')


# Add xticks on the middle of the group bars
plt.xlabel('group', fontweight='bold')
plt.xticks([r + barWidth for r in range(0,len(bars1)*2,2)], ['A', 'B', 'C', 'D', 'E'])

# Create legend & Show graphic
plt.legend()
plt.show()

Обратите внимание, что xticklabels также были сброшены соответственно.

Изображение barwidth=0.25:

enter image description here

Изображение barwidth=0.5:

enter image description here

Вы можете свободно изменить 2 на любое положительное число, просто не забудьте изменить xticklabels соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...