Печать по индексу с разными метками - PullRequest
0 голосов
/ 15 октября 2019

Я использую pandas и matplotlib для генерации некоторых диаграмм.

Мой DataFrame:

                                             Journal    Papers per year in journal
0                Information and Software Technology    4
1  2012 International Conference on Cyber Securit...    4
2       Journal of Network and Computer Applications    4 
3                            IEEE Security & Privacy    5
4                               Computers & Security    11

Мой Dataframe - это результат группировки из большого кадра данных. То, что я хочу сейчас, - это простая диаграмма, которая в теории прекрасно работает с df_groupby_time.plot(kind='bar'). Тем не менее, я получаю это:

enter image description here

Мне нужны разноцветные полосы и легенда, в которой указано, какой цвет соответствует какой бумаге.

enter image description here

Игра с перемаркировкой никуда меня не привела. И я понятия не имею, как добиться того, чего я хочу.


РЕДАКТИРОВАТЬ:

Сброс индекса и построение графиков - это не то, что я хочу: df_groupby_time.set_index("Journals").plot(kind='bar')

enter image description here

1 Ответ

0 голосов
/ 20 октября 2019

Я нашел решение, основанное на этом вопросе здесь . Итак, кадр данных необходимо преобразовать в матрицу, где значения существуют только на главной диагонали. Сначала я сохраняю столбец 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

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