#pandas #matplotlib
Вопрос:
Первое изображение-это фигура, которую я пытаюсь воспроизвести, а второе изображение-это данные, которые у меня есть. У кого-нибудь есть чистый способ сделать это с пандами или matplotlib?
Ответ №1:
Просто перенесите фрейм данных и используйте df.plot с stacked
установленным флагом true:
import pandas as pd
from matplotlib import pyplot as plt
df = pd.DataFrame({'squad': [0.6616, 0.1245, 0.0950],
'quac': [0.83, 0.065, 0.0176],
'quoref': [0.504, 0.340364, 0.1067]})
# Transpose
plot_df = df.T
# plot
ax = plot_df.plot(kind='bar', stacked=True, rot='horizontal')
ax.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0.)
ax.set_ylabel("% of Questions")
plt.tight_layout()
plt.show()
Ответ №2:
Вы можете попробовать это:
data = {'squad':[0.661669, 0.127516, 0.095005],
'quac':[0.930514, 0.065951, 0.017680],
'quoref': [0.504963, 0.340364, 0.106700]}
df = pd.DataFrame(data)
bars_1 = df.iloc[0]
bars_2 = df.iloc[1]
bars_3 = df.iloc[2]
# Heights of bars_1 bars_2
bars_1_to_2 = np.add(bars_1, bars_2).tolist()
# The position of the bars on the x-axis
r = [0, 1, 2]
plt.figure(figsize = (7, 7))
plt.bar(r, bars_1, color = 'lightgrey', edgecolor = 'white')
plt.bar(r, bars_2, bottom = bars_1, color = 'darkgrey', edgecolor = 'white')
plt.bar(r, bars_3, bottom = bars_1_to_2, color = 'dimgrey', edgecolor = 'white')
plt.yticks(np.arange(0, 1.1, 0.1))
plt.xticks(ticks = r, labels = df.columns)
plt.ylabel('% of Questions')
plt.show()
Комментарии:
1. Спасибо за это, но самое странное в моих данных то, что я хотел бы иметь столбчатую диаграмму для каждого из столбцов. Итак, в вашем примере я ищу один столбчатый график для var_1 и один для var_2, где высоты компонентов в каждом столбчатом графике являются пропорциями значений в столбце.
2. Я обновил пример. Надеюсь, это будет полезно
![]()