Диаграмма matplotlib не распознает метки на панели, но тот же код работает для пирога - PullRequest
0 голосов
/ 08 сентября 2018

Я начал с matplotlib / pandas.

Я создал сводную таблицу с пандами, а затем визуализировал ее с помощью matplotlib.

Вот скриншот : enter image description here

Странно, что когда одни и те же данные ("client_pivot") встроены в два разных графика (столбец и круговая диаграмма), они ведут себя по-разному по отношению к легенде / ключам.

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

Вы хоть представляете, почему это так и как я могу это решить?

Ниже приведена выдержка из соответствующего кода (для краткости нерелевантный код был вырезан).

import pandas as pd

def reportMe(event):
csv_file = pd.read_csv("file.csv",
                       names = ['USER',
                               'CLIENT',
                               'TYPE',
                               'START',
                               'END',
                               'DURATION',
                               'NOTES'])

client_pivot = csv_file.pivot_table(index="CLIENT",
                                         aggfunc="sum")

def pieMaker():
    x_client = list(client_pivot.index)
    y_duration = list(client_pivot["DURATION"])

    fig = plt.figure(figsize=(12, 4))

    ax1 = fig.add_subplot(121)
    ax2 = fig.add_subplot(122)

    ax1.bar(x_client, y_duration)   #bar

    for label in ax1.xaxis.get_ticklabels():
        label.set_rotation(17)

    ax1.tick_params(labelsize=7)
    ax1.legend(x_client,
               loc="center left",
               bbox_to_anchor=(0.9, 0, 0.5, 1),
               fontsize=7)
    ax1.set_ylabel('Time (s)')

    ax2.pie(y_duration,             #pie
            shadow=True,
            autopct='%1.1f%%',
            textprops={'fontsize': 7,
                       'color':'w'})
    ax2.legend(x_client,
               loc="center left",
               bbox_to_anchor=(0.9, 0, 0.5, 1),
               fontsize=7)
    ax2.set_aspect(1)

    plt.show()
pieMaker()

edit: добавлен круговой код для сравнения

1 Ответ

0 голосов
/ 08 сентября 2018

Столбцы распознаются как один объект, но круговые клинья - это отдельные объекты, как видно из легенды. Это выбор стиля; круговые диаграммы не имеют шкалы, которая будет использоваться для описания отдельных патчей, поэтому для пирогов полезна легенда с цветом. Гистограммы обычно отображаются одним и тем же цветом, так что в легенде требуется только одна метка для идентификации полного гистограммы (и, возможно, для отличия от некоторого другого гистограммы).

Чтобы каждый столбец отдельно отображался в легенде, вы можете указать его для аргумента handles legend.

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

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)


a = .5+np.random.rand(5)
labs = list("ABCDE")

fig, (ax,ax2) = plt.subplots(ncols=2)
ax.pie(a)
ax.legend(labels=labs)


colors = plt.rcParams["axes.prop_cycle"].by_key()["color"]
bars = ax2.bar(labs, a, color=colors)
ax2.legend(handles=bars, labels=labs)

plt.show()

enter image description here

...