У меня есть сюжет R
, который я пытаюсь воспроизвести в python3
. Мой график R
генерирует следующий график:
У меня есть следующий код python
, который работает неправильно:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rc
import pandas as pd
plt.style.use("ggplot")
# Values of each group
#"2006 2014 2016 2017 2018 2019
#A 1 0 0 0 0 0
#B 0 0 0 1 0 0
#C 0 0 2 0 1 0
#D 0 0 1 2 0 0
#E 0 0 1 0 0 0
#F 0 0 0 0 0 1
#G 0 0 0 0 1 0
#H 0 1 0 0 0 0
bars1 = [1 ,0, 0, 0, 0 , 0]
bars2 = [0 , 0 , 0 , 1 , 0 , 0]
bars3 = [0 , 0 , 2 , 0 , 1 , 0]
bars4 = [0 , 0 , 1 , 2 , 0 , 0]
bars5 = [0 , 0 , 1 , 0 , 0 , 0]
bars6 = [0 , 0 , 0 , 0 , 0 , 1]
bars7 = [0 , 0 , 0 , 0 , 1 , 0]
bars8 = [0 , 1 , 0 , 0 , 0 , 0]
# Heights of bars1 + bars2
bars = np.add(bars1, bars2).tolist()
# The position of the bars on the x-axis
r = [0,1,2,3,4,5]
# Names of group and bar width
names = ['2006','2014','2016','2017','2018', '2019']
barWidth = 0.75
# Create brown bars
plt.bar(r, bars1, color='#2F3114', edgecolor='white', width=barWidth)
# Create green bars (middle), on top of the firs ones
plt.bar(r, bars2, bottom=bars1, color='#3B4E14', edgecolor='white', width=barWidth)
# Create green bars (top)
plt.bar(r, bars3, bottom=bars4, color='#A0C11B', edgecolor='white', width=barWidth)
plt.bar(r, bars4, bottom=bars3, color='#E8E7BC', edgecolor='white', width=barWidth)
plt.bar(r, bars5, bottom=bars, color='#2F1E14', edgecolor='white', width=barWidth)
plt.bar(r, bars6, bottom=bars, color='#DF2A81', edgecolor='white', width=barWidth)
plt.bar(r, bars7, bottom=bars, color='#27B916', edgecolor='white', width=barWidth)
plt.bar(r, bars8, bottom=bars, color='#A979DB', edgecolor='white', width=barWidth)
# Custom X axis
plt.xticks(r, names)
plt.xlabel("axisA")
plt.ylabel("axisB")
# Show graphic
plt.show()
Как я могу сгенерировать правильный столбчатый график в python3
, аналогичный показанному выше примеру рисунка (цвета не должны совпадать)?
Примечание: приведенный выше код отображает что-то близкое к тому, что ожидается, но не ожидается. Количество экземпляров отключено, если вы присмотритесь. Например, в 2017 году 3 экземпляра (показано только 2), а в 2016 году - 4 (показано только 3). Как правильно построить встроенное изображение?
Приложение: данные в R
фрейм данных:
dat <- read.table(text ="2006 2014 2016 2017 2018 2019
A 1 0 0 0 0 0
B 0 0 0 1 0 0
C 0 0 2 0 1 0
D 0 0 1 2 0 0
E 0 0 1 0 0 0
F 0 0 0 0 0 1
G 0 0 0 0 1 0
H 0 1 0 0 0 0
", header = TRUE)