Я нашел решение, основанное на этом вопросе здесь . Итак, кадр данных необходимо преобразовать в матрицу, где значения существуют только на главной диагонали. Сначала я сохраняю столбец journals
для последующего использования в переменной. new_cols = df["Journal"].values
Во-вторых, я написал функцию, которая принимает серию, столбец Papers per year in Journal
и ранее сохраненные новые столбцы в качестве входных параметров и возвращает фрейм данных, где значения находятся только наглавная диагональ .:
def values_into_main_diagonal(some_series, new_cols):
"""Puts the values of a series onto the main diagonal of a new df.
some_series - any series given
new_cols - the new column labels as list or numpy.ndarray"""
x = [{i: some_series[i]} for i in range(len(some_series))]
main_diag_df = pd.DataFrame(x)
main_diag_df.columns = new_cols
return main_diag_df
В-третьих, при передаче функции столбцу Papers per year in Journal
и нашим именам сохраненных новых столбцов возвращается следующий кадр данных:
new_df:
1_journal 2_journal 3_journal 4_journal 5_journal
0 4 NaN NaN NaN NaN
1 NaN 4 NaN NaN NaN
2 NaN NaN 4 NaN NaN
3 NaN NaN NaN 5 NaN
4 NaN NaN NaN NaN 11
Наконец, построение new_df
через new_df.plot(kind='bar', stacked=True)
дает мне то, что я хочу. Журналы разных цветов в виде легенды, а НЕ на оси .: ![enter image description here](https://i.stack.imgur.com/Z4aYy.png)