Как создать динамическую круговую диаграмму из двухмерного массива Numpy? - PullRequest
0 голосов
/ 04 мая 2019

Python 2.7

Нужна ваша помощь в создании круговой диаграммы из массива Numpy. В настоящее время каждый метод, который я пробую, приводит к тому, что диаграмма не отображается.

Массив Numpy выглядит следующим образом.

array([['A' '506']
 ['B' '80']
 ['C' '6']
 ['...' '15']
 ['Z' '7']],dtype = '|S21')

Где количество строк, значения столбцов будут меняться. Количество и вид столбцов останутся прежними.

Я пытался:

  1. Преобразуйте массив в набор данных Pandas, примените правильный тип и создайте plt.pie, как показано ниже. Диаграмма не показана.

    dataset = pd.DataFrame(**array**, columns = ['Description','Metric'])
    dataset[['Metric']] = dataset[['Metric']].apply(pd.to_numeric)
    
    colors = ["#...", '#...', '#...','#...', '#...', '#...', '#...', '#...', '#...', '#...', '#...'] 
    
    plt.pie(
    x = dataset['Metric'],
    labels=dataset['Description'],
    shadow=False,
    colors=colors,
    autopct='%1.1f%%',
    )
    
    plt.axis('equal')
    
    plt.tight_layout()
    plt.show
    
  2. Измените его на список, добавьте элементы в виде списков. Диаграмма не показана.

    metrics = list(dataset['Metric'])
    descriptions = list(dataset['Description'])
    
    plt.pie(
    x = metrics,
    labels=descriptions,
    ... )
    

Сам набор данных выглядит хорошо, но, похоже, существуют некоторые проблемы с форматом кадра данных, поскольку график не может быть создан ...

>> print dataset
<<
              Description           Metric
0                       A              506
1                       B               80
2                       C                6
3                       D               15
...
8                       X              26
9                       Y               13
10                      Z               7

Ожидаемым результатом будет простая круговая диаграмма из этих двух столбцов. Он должен создаваться динамически на основе значения метрики и количества строк.

С нетерпением жду вашего ответа.

1 Ответ

0 голосов
/ 04 мая 2019

Я бы порекомендовал хранить эти данные в виде словаря или панды DataFrame. В приведенном ниже решении я преобразую ваши данные в словарь перед построением графика.

import numpy as np
import matplotlib.pyplot as plt

# Data as given
data = np.array([['A', '506'],
                 ['B', '80'],
                 ['C', '6'],
                 ['...', '15'],
                 ['Z', '7']], dtype = '|S21')

# Create dictionary
data_dict = {}

# Convert byte string to string and string number to int
for row in range(data.shape[0]):
    data_dict[data[row, 0].astype(str)] = int(data[row, 1])

plt.pie(data_dict.values(), labels=data_dict.keys())

Это дало мне следующий сюжет:

enter image description here

...