如何用二维Numpy数组创建动态饼图?

时间:2019-05-04 12:09:14

标签: python arrays list matplotlib pie-chart

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

预期结果将是这两列中的简单饼图。应该根据Metrics值和行数来动态创建它。

期待您的回复。

1 个答案:

答案 0 :(得分:0)

我真的建议将此数据存储为字典或大熊猫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