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

How to create a dynamic piechart out of two dimensional Numpy array?

Python2.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

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

期待您的回复。

我真的建议将此数据存储为字典或 pandas 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())

这给了我以下情节: